Halcom 发表于 2017-3-16 12:56:05

基于遗传算法的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]
查看完整版本: 基于遗传算法的RBF网络逼近