Hello Mat

 找回密码
 立即注册
查看: 6445|回复: 0

基于遗传算法的RBF网络逼近

[复制链接]

1294

主题

1520

帖子

110

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22633
发表于 2017-3-16 12:56:05 | 显示全部楼层 |阅读模式
       RBF网络逼近算法中,网络权值w、高斯函数h的中心矢量c和基宽向量b的初值难以确定,如果这些参数选择不当,会造成逼近精度的下降甚至RBF网络的发散。采用遗传算法可实现RBF网络参数的优化。
    主程序如下:
  1. % GA(Generic Algorithm) to Optimize Initial Parameters of RBF Approaching
  2. % 遗传算法优化程序
  3. clc % 清屏
  4. clear all; % 删除workplace变量
  5. close all; % 关掉显示图形窗口

  6. G=150; %Gen最大循环次数
  7. Size=30;  %样本个数
  8. CodeL=10;% 二进制编码长度

  9. for i=1:1:3
  10.         MinX(i)=0.1*ones(1);
  11.         MaxX(i)=3*ones(1);
  12. end
  13. for i=4:1:9
  14.         MinX(i)=-3*ones(1);
  15.         MaxX(i)=3*ones(1);
  16. end
  17. for i=10:1:12
  18.         MinX(i)=-ones(1);
  19.         MaxX(i)=ones(1);
  20. end

  21. E=round(rand(Size,12*CodeL));  %初始化编码

  22. BsJ=0;

  23. for kg=1:1:G
  24.    
  25.     time(kg)=kg;
  26.     for s=1:1:Size
  27.         m=E(s,:);

  28.         for j=1:1:12
  29.             y(j)=0;

  30.             mj=m((j-1)*CodeL+1:1:j*CodeL);
  31.             for i=1:1:CodeL
  32.                 y(j)=y(j)+mj(i)*2^(i-1);
  33.             end
  34.                 f(s,j)=(MaxX(j)-MinX(j))*y(j)/1023+MinX(j);
  35.         end

  36.         % Evaluate BestJ
  37.         p=f(s,:);

  38.         [p,BsJ]=rbf_gaf(p,BsJ);

  39.         BsJi(s)=BsJ;   
  40.     end

  41. [OderJi,IndexJi]=sort(BsJi);
  42. BestJ(kg)=OderJi(1);
  43. BJ=BestJ(kg);
  44. Ji=BsJi+1e-10;

  45. fi=1./Ji;
  46. [Oderfi,Indexfi]=sort(fi);     %从小到大排序
  47. Bestfi=Oderfi(Size);           % 选择最好的适应度值
  48. BestS=E(Indexfi(Size),:);      % 最适应个体

  49. kg   
  50. p
  51. BJ
  52. % 选择复制
  53.    fi_sum=sum(fi);
  54.    fi_Size=(Oderfi/fi_sum)*Size;
  55.    
  56.    fi_S=floor(fi_Size);        %选择最佳适应度
  57.    
  58.    kk=1;
  59.    for i=1:1:Size
  60.       for j=1:1:fi_S(i)       % 选择复制
  61.        TempE(kk,:)=E(Indexfi(i),:);  
  62.          kk=kk+1;   
  63.       end
  64.    end
  65.    
  66. %交叉
  67. pc=0.60; %设置交叉概率
  68. n=ceil(20*rand);
  69. for i=1:2:(Size-1)
  70.     temp=rand;
  71.     if pc>temp            %交叉条件
  72.     for j=n:1:20
  73.         TempE(i,j)=E(i+1,j);
  74.         TempE(i+1,j)=E(i,j);
  75.     end
  76.     end
  77. end
  78. TempE(Size,:)=BestS;
  79. E=TempE;

  80. %变异
  81. pm=0.001-[1:1:Size]*(0.001)/Size; %设置变异概率
  82.    for i=1:1:Size
  83.       for j=1:1:12*CodeL
  84.          temp=rand;
  85.          if pm>temp               %变异条件
  86.             if TempE(i,j)==0
  87.                TempE(i,j)=1;
  88.             else
  89.                TempE(i,j)=0;
  90.             end
  91.         end
  92.       end
  93.    end

  94. % 确保TempE(Size,:)为最佳个体
  95. TempE(Size,:)=BestS;
  96. E=TempE;

  97. end

  98. Bestfi
  99. BestS
  100. fi
  101. Best_J=BestJ(G)
  102. figure(1);
  103. plot(time,BestJ);
  104. xlabel('Gen');ylabel('Best J');
  105. grid on
  106. title('遗传算法发优化迭代过程')
  107. save pfile p;
复制代码
RBF网络逼近函数程序如下:
  1. % RBF网络逼近函数程序
  2. function [p,BsJ]=rbf_gaf(p,BsJ)
  3. ts=0.001;

  4. alfa=0.05; % 动量因子
  5. xite=0.85;  % 学习因子      
  6. x=[0,0]';

  7. b=[p(1);p(2);p(3)];   
  8. c=[p(4) p(5) p(6);
  9.     p(7) p(8) p(9)];
  10. w=[p(10);p(11);p(12)];   

  11. w_1=w;w_2=w_1;
  12. c_1=c;c_2=c_1;
  13. b_1=b;b_2=b_1;
  14. y_1=0;

  15. for k=1:1:500
  16. timef(k)=k*ts;
  17.    
  18. u(k)=sin(5*2*pi*k*ts);

  19. y(k)=u(k)^3+y_1/(1+y_1^2);  

  20. x(1)=u(k);
  21. x(2)=y(k);
  22. for j=1:1:3
  23.     h(j)=exp(-norm(x-c(:,j))^2/(2*b(j)*b(j)));%高斯基函数
  24. end
  25. ym(k)=w_1'*h';

  26. e(k)=y(k)-ym(k);

  27. d_w=0*w;d_b=0*b;d_c=0*c;
  28. for j=1:1:3
  29.    d_w(j)=xite*e(k)*h(j);
  30.    d_b(j)=xite*e(k)*w(j)*h(j)*(b(j)^-3)*norm(x-c(:,j))^2;
  31.   for i=1:1:2
  32.    d_c(i,j)=xite*e(k)*w(j)*h(j)*(x(i)-c(i,j))*(b(j)^-2);
  33.   end
  34. end
  35.    w=w_1+ d_w+alfa*(w_1-w_2);
  36.    b=b_1+d_b+alfa*(b_1-b_2);
  37.    c=c_1+d_c+alfa*(c_1-c_2);

  38.    y_1=y(k);
  39.    
  40.    w_2=w_1;
  41.    w_1=w;
  42.    
  43.    c_2=c_1;
  44.    c_1=c;
  45.    
  46.    b_2=b_1;
  47.    b_1=b;
  48.    end
  49.    
  50. B=0;
  51. for i=1:1:500
  52.    Ji(i)=abs(e(i));
  53.    B=B+100*Ji(i);   
  54. end
  55. BsJ=B;
复制代码
参考文献:MATLAB智能算法超级学习手册




算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-4-28 03:59 , Processed in 0.245403 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表