基于遗传算法的RBF网络逼近
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,:);
=rbf_gaf(p,BsJ);
BsJi(s)=BsJ;
end
=sort(BsJi);
BestJ(kg)=OderJi(1);
BJ=BestJ(kg);
Ji=BsJi+1e-10;
fi=1./Ji;
=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-*(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 =rbf_gaf(p,BsJ)
ts=0.001;
alfa=0.05; % 动量因子
xite=0.85;% 学习因子
x=';
b=;
c=[p(4) p(5) p(6);
p(7) p(8) p(9)];
w=;
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智能算法超级学习手册
页:
[1]