gusucode.com > 遗传算法优化参数的递归T-S模糊神经网络学习算法matlab源码程序 > 遗传算法优化参数的递归T-S模糊神经网络学习算法matlab源码程序/T-S-FNN/main.m

    % 利用GA优化隶属函数中心、宽度、递归增益及后件参数的主程序

clc;
clear all;
FieldDR=[-1 -0.9936 0.3 0.3 -1 -1 -100 -100 -100 -1 -0.9936 0.3 0.3 -1 -1 -100 -100 -100 ...
        -1 -0.9936 0.3 0.3 -1 -1 -100 -100 -100 -1 -0.9936 0.3 0.3 -1 -1 -100 -100 -100 ...
        -1 -0.9936 0.3 0.3 -1 -1 -100 -100 -100;1 1 0.8 0.8 1 1 100 100 100 ...
        1 1 0.8 0.8 1 1 100 100 100 1 1 0.8 0.8 1 1 100 100 100 ...
         1 1 0.8 0.8 1 1 100 100 100 1 1 0.8 0.8 1 1 100 100 100]; 
%隶属函数中心、宽度、递归增益及后件参数取值范围初始化
chromc=crtrp(50,FieldDR);  % 随机产生初始种群
Chromc=zeros(49,45);
SelCh=zeros(50,45);
gen=0;
MAXGEN=1500;
Fobjv='objvxins';
Jmc=1;
tracec=zeros(MAXGEN,1);
tic
obj=feval(Fobjv,chromc,50,45);
while (gen<MAXGEN)&(Jmc>0.01)
    fitnv=zeros(49,1);
    FitnV=ranking(obj);
    [maxfit index]=max(FitnV);                  %选出最优个体
    fitnv(1:index-1,1)=FitnV(1:index-1,1);
    fitnv(index:49,1)=FitnV(index+1:50,1);
    Chromc(1:index-1,:)=chromc(1:index-1,:);
    Chromc(index:49,:)=chromc(index+1:50,:);
    SelCh(1,:)=chromc(index,:);              % 保留一个最优个体不参与交叉、变异
    SelCh(2:50,:)=select('sus',Chromc,fitnv);    %选择
    SelCh(2:50,:)=recombin('reclin',SelCh(2:50,:));   %算数交叉,Alpha=[-0.25,1.25]
    SelChm=zeros(1,45);
for k2=2:50                     %for-end判断,两个输入变量的取值范围分别为[-1,1]和[-0.9936,1],隶属函数宽度为[0.3,0.8],经过交叉后若超出此范围,则随机产生一个在此范围的数代 替
         k3=0;                                                             
        while(k3<=4)                     
          SelChm(1,9*k3+1:(k3+1)*9)=SelCh(k2,9*k3+1:(k3+1)*9);
          if(SelChm(1,9*k3+1)<-1)|(SelChm(1,9*k3+1)>1)
            SelChm(1,9*k3+1)=crtrp(1,[-1;1]);
          else
             SelChm(1,9*k3+1)=SelChm(1,9*k3+1);
          end
          if(SelChm(1,9*k3+2)<-0.9936)|(SelChm(1,9*k3+2)>1)
            SelChm(1,9*k3+2)=crtrp(1,[-0.9936;1]);
         else
            SelChm(1,9*k3+2)=SelChm(1,9*k3+2);
         end   
         if(SelChm(1,9*k3+3)<0.3)|(SelChm(1,9*k3+3)>0.8)
            SelChm(1,9*k3+3)=crtrp(1,[0.3;0.8]);
         else
            SelChm(1,9*k3+3)=SelChm(1,9*k3+3);
         end   
         if(SelChm(1,9*k3+4)<0.3)|(SelChm(1,9*k3+4)>0.8)
            SelChm(1,9*k3+4)=crtrp(1,[0.3;0.8]);
         else
            SelChm(1,9*k3+4)=SelChm(1,9*k3+4);
         end
         k3=k3+1;
     end
        SelCh(k2,:)=SelChm(1,:);
end
FieldDR1=[-1 -0.9936 0.3 0.3 -1 -1 -100 -100 -100 -1 -0.9936 0.3 0.3 -1 -1 -100 -100 -100 ...
        -1 -0.9936 0.3 0.3 -1 -1 -100 -100 -100 -1 -0.9936 0.3 0.3 -1 -1 -100 -100 -100 ...
        -1 -0.9936 0.3 0.3 -1 -1 -100 -100 -100;1 1 0.8 0.8 1 1 100 100 100 ...
        1 1 0.8 0.8 1 1 100 100 100 1 1 0.8 0.8 1 1 100 100 100 ...
         1 1 0.8 0.8 1 1 100 100 100 1 1 0.8 0.8 1 1 100 100 100]; 
%限定隶属函数中心、宽度、递归增益及后件参数取值边界
SelCh(2:50,:)=mutate(mutbga,SelCh(2:50,:),FieldDR1);  
                      %变异,由于变异中已限定每个变量的边界,因此不用再判断      
chromc=SelCh;
gen=gen+1;
obj=objvxins(chromc,50,45)
[Jmc index]=min(obj);
tracec(gen,1)=Jmc;
end
t=toc