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