• 我心飞扬3977
    了解作者
  • matlab
    开发工具
  • 1KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 5
    下载次数
  • 2019-12-24 21:01
    上传日期
MATLAB 基于BP神经网络的粒子群算法
PSO_BP.rar
  • PSO_BP.m
    5KB
内容介绍
clc clear tic SamNum=30; HiddenNum=7; InDim=1; OutDim=1; load train_x load train_f a=train_x'; d=train_f'; p=[a]; t=[d]; [SamIn,minp,maxp,tn,mint,maxt]=premnmx(p,t); NoiseVar=0.01; Noise=NoiseVar*randn(1,SamNum); SamOut=tn + Noise; SamIn=SamIn'; SamOut=SamOut'; MaxEpochs=60000; lr=0.025; E0=0.65*10^(-6); %% %the begin of PSO E0=0.001; Max_num=500; particlesize=200; c1=1; c2=1; w=2; vc=2; vmax=5; dims=InDim*HiddenNum+HiddenNum+HiddenNum*OutDim+OutDim; x=-4+7*rand(particlesize,dims); v=-4+5*rand(particlesize,dims); f=zeros(particlesize,1); %% for jjj=1:particlesize trans_x=x(jjj,:); W1=zeros(InDim,HiddenNum); B1=zeros(HiddenNum,1); W2=zeros(HiddenNum,OutDim); B2=zeros(OutDim,1); W1=trans_x(1,1:HiddenNum); B1=trans_x(1,HiddenNum+1:2*HiddenNum)'; W2=trans_x(1,2*HiddenNum+1:3*HiddenNum)'; B2=trans_x(1,3*HiddenNum+1); Hiddenout=logsig(SamIn*W1+repmat(B1',SamNum,1)); Networkout=Hiddenout*W2+repmat(B2',SamNum,1); Error=Networkout-SamOut; SSE=sumsqr(Error) f(jjj)=SSE; end personalbest_x=x; personalbest_f=f; [groupbest_f i]=min(personalbest_f); groupbest_x=x(i,:); for j_Num=1:Max_num vc=(5/3*Max_num-j_Num)/Max_num; %% v=w*v+c1*rand*(personalbest_x-x)+c2*rand*(repmat(groupbest_x,particlesize,1)-x); for kk=1:particlesize for kk0=1:dims if v(kk,kk0)>vmax v(kk,kk0)=vmax; else if v(kk,kk0)<-vmax v(kk,kk0)=-vmax; end end end end x=x+vc*v; %% for jjj=1:particlesize trans_x=x(jjj,:); W1=zeros(InDim,HiddenNum); B1=zeros(HiddenNum,1); W2=zeros(HiddenNum,OutDim); B2=zeros(OutDim,1); W1=trans_x(1,1:HiddenNum); B1=trans_x(1,HiddenNum+1:2*HiddenNum)'; W2=trans_x(1,2*HiddenNum+1:3*HiddenNum)'; B2=trans_x(1,3*HiddenNum+1); Hiddenout=logsig(SamIn*W1+repmat(B1',SamNum,1)); Networkout=Hiddenout*W2+repmat(B2',SamNum,1); Error=Networkout-SamOut; SSE=sumsqr(Error); f(jjj)=SSE; end %% for kk=1:particlesize if f(kk)<personalbest_f(kk) personalbest_f(kk)=f(kk); personalbest_x(kk)=x(kk); end end [groupbest_f0 i]=min(personalbest_f); if groupbest_f0<groupbest_f groupbest_x=x(i,:); groupbest_f=groupbest_f0; end ddd(j_Num)=groupbest_f end str=num2str(groupbest_f); trans_x=groupbest_x; W1=trans_x(1,1:HiddenNum); B1=trans_x(1,HiddenNum+1:2*HiddenNum)'; W2=trans_x(1,2*HiddenNum+1:3*HiddenNum)'; B2=trans_x(1,3*HiddenNum+1); %the end of PSO %% for i=1:MaxEpochs %% Hiddenout=logsig(SamIn*W1+repmat(B1',SamNum,1)); Networkout=Hiddenout*W2+repmat(B2',SamNum,1); Error=Networkout-SamOut; SSE=sumsqr(Error) ErrHistory=[ SSE]; if SSE<E0,break, end dB2=zeros(OutDim,1); dW2=zeros(HiddenNum,OutDim); for jj=1:HiddenNum for k=1:SamNum dW2(jj,OutDim)=dW2(jj,OutDim)+Error(k)*Hiddenout(k,jj); end end for k=1:SamNum dB2(OutDim,1)=dB2(OutDim,1)+Error(k); end dW1=zeros(InDim,HiddenNum); dB1=zeros(HiddenNum,1); for ii=1:InDim for jj=1:HiddenNum for k=1:SamNum dW1(ii,jj)=dW1(ii,jj)+Error(k)*W2(jj,OutDim)*Hiddenout(k,jj)*(1-Hiddenout(k,jj))*(SamIn(k,ii)); dB1(jj,1)=dB1(jj,1)+Error(k)*W2(jj,OutDim)*Hiddenout(k,jj)*(1-Hiddenout(k,jj)); end end end W2=W2-lr*dW2; B2=B2-lr*dB2; W1=W1-lr*dW1; B1=B1-lr*dB1; end Hiddenout=logsig(SamIn*W1+repmat(B1',SamNum,1)); Networkout=Hiddenout*W2+repmat(B2',SamNum,1); aa=postmnmx(Networkout,mint,maxt); x=a; newk=aa; figure plot(x,d,'r-o',x,newk,'b--+') legend('原始数据','训练后的数据'); xlabel('x');ylabel('y'); toc
评论
    相关推荐
    • Pso matlab.zip
      pso optimization for kernel parameters of svm
    • PSO代码
      pso得代码,很好改,如果还想做其他的算法也可以用
    • PSO_matlab
      PSO算法的源代码,有助于对PSO算法的理解和掌握
    • PSO算法MATLAB实现
      PSO算法MATLAB实现,附12个标准测试函数
    • PSOMATLAB实现
      PSOMATLAB实现代码,大家可以参考参考
    • PSO 算法matlab程序
      这个程序就是最基本的粒子群优化算法程序,用Matlab实现。
    • pso 标准算法 matlab
      微粒群标准算法 matlab实现 附有解释 程序简单明了
    • PSO算法matlab程序
      PSO算法的标准程序,程序使用matlab语言
    • matlab pso
      pso的相关文件,有较为详细的pso操作过程的pso软件工具包,可以结合matlab使用
    • PSO matlab 算法实例
      非常适合刚开始学习PSO的初学者,我用了半天就搞明白了,很有价值!用了才说好!matlab平台