|
RBF网络逼近算法中,网络权值w、高斯函数h的中心矢量c和基宽向量b的初值难以确定,如果这些参数选择不当,会造成逼近精度的下降甚至RBF网络的发散。采用遗传算法可实现RBF网络参数的优化。 主程序如下: - % GA(Generic Algorithm) to Optimize Initial Parameters of RBF Approaching
- % 遗传算法优化程序
- clc % 清屏
- clear all; % 删除workplace变量
- close all; % 关掉显示图形窗口
- G=150; %Gen最大循环次数
- Size=30; %样本个数
- CodeL=10;% 二进制编码长度
- for i=1:1:3
- MinX(i)=0.1*ones(1);
- MaxX(i)=3*ones(1);
- end
- for i=4:1:9
- MinX(i)=-3*ones(1);
- MaxX(i)=3*ones(1);
- end
- for i=10:1:12
- MinX(i)=-ones(1);
- MaxX(i)=ones(1);
- end
- E=round(rand(Size,12*CodeL)); %初始化编码
- BsJ=0;
- for kg=1:1:G
-
- time(kg)=kg;
- for s=1:1:Size
- m=E(s,:);
- for j=1:1:12
- y(j)=0;
- mj=m((j-1)*CodeL+1:1:j*CodeL);
- for i=1:1:CodeL
- y(j)=y(j)+mj(i)*2^(i-1);
- end
- f(s,j)=(MaxX(j)-MinX(j))*y(j)/1023+MinX(j);
- end
- % Evaluate BestJ
- p=f(s,:);
- [p,BsJ]=rbf_gaf(p,BsJ);
- BsJi(s)=BsJ;
- end
-
- [OderJi,IndexJi]=sort(BsJi);
- BestJ(kg)=OderJi(1);
- BJ=BestJ(kg);
- Ji=BsJi+1e-10;
- fi=1./Ji;
- [Oderfi,Indexfi]=sort(fi); %从小到大排序
- Bestfi=Oderfi(Size); % 选择最好的适应度值
- BestS=E(Indexfi(Size),:); % 最适应个体
- kg
- p
- BJ
- % 选择复制
- fi_sum=sum(fi);
- fi_Size=(Oderfi/fi_sum)*Size;
-
- fi_S=floor(fi_Size); %选择最佳适应度
-
- kk=1;
- for i=1:1:Size
- for j=1:1:fi_S(i) % 选择复制
- TempE(kk,:)=E(Indexfi(i),:);
- kk=kk+1;
- end
- end
-
- %交叉
- pc=0.60; %设置交叉概率
- n=ceil(20*rand);
- for i=1:2:(Size-1)
- temp=rand;
- if pc>temp %交叉条件
- for j=n:1:20
- TempE(i,j)=E(i+1,j);
- TempE(i+1,j)=E(i,j);
- end
- end
- end
- TempE(Size,:)=BestS;
- E=TempE;
- %变异
- pm=0.001-[1:1:Size]*(0.001)/Size; %设置变异概率
- for i=1:1:Size
- for j=1:1:12*CodeL
- temp=rand;
- if pm>temp %变异条件
- if TempE(i,j)==0
- TempE(i,j)=1;
- else
- TempE(i,j)=0;
- end
- end
- end
- end
- % 确保TempE(Size,:)为最佳个体
- TempE(Size,:)=BestS;
- E=TempE;
- end
-
- Bestfi
- BestS
- fi
- Best_J=BestJ(G)
- figure(1);
- plot(time,BestJ);
- xlabel('Gen');ylabel('Best J');
- grid on
- title('遗传算法发优化迭代过程')
- save pfile p;
复制代码RBF网络逼近函数程序如下: - % RBF网络逼近函数程序
- function [p,BsJ]=rbf_gaf(p,BsJ)
- ts=0.001;
- alfa=0.05; % 动量因子
- xite=0.85; % 学习因子
- x=[0,0]';
- b=[p(1);p(2);p(3)];
- c=[p(4) p(5) p(6);
- p(7) p(8) p(9)];
- w=[p(10);p(11);p(12)];
- w_1=w;w_2=w_1;
- c_1=c;c_2=c_1;
- b_1=b;b_2=b_1;
- y_1=0;
- for k=1:1:500
- timef(k)=k*ts;
-
- u(k)=sin(5*2*pi*k*ts);
- y(k)=u(k)^3+y_1/(1+y_1^2);
- x(1)=u(k);
- x(2)=y(k);
- for j=1:1:3
- h(j)=exp(-norm(x-c(:,j))^2/(2*b(j)*b(j)));%高斯基函数
- end
- ym(k)=w_1'*h';
- e(k)=y(k)-ym(k);
- d_w=0*w;d_b=0*b;d_c=0*c;
- for j=1:1:3
- d_w(j)=xite*e(k)*h(j);
- d_b(j)=xite*e(k)*w(j)*h(j)*(b(j)^-3)*norm(x-c(:,j))^2;
- for i=1:1:2
- d_c(i,j)=xite*e(k)*w(j)*h(j)*(x(i)-c(i,j))*(b(j)^-2);
- end
- end
- w=w_1+ d_w+alfa*(w_1-w_2);
- b=b_1+d_b+alfa*(b_1-b_2);
- c=c_1+d_c+alfa*(c_1-c_2);
- y_1=y(k);
-
- w_2=w_1;
- w_1=w;
-
- c_2=c_1;
- c_1=c;
-
- b_2=b_1;
- b_1=b;
- end
-
- B=0;
- for i=1:1:500
- Ji(i)=abs(e(i));
- B=B+100*Ji(i);
- end
- BsJ=B;
复制代码 参考文献:MATLAB智能算法超级学习手册
|
|