找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2260|回復(fù): 0
收起左側(cè)

pso算法改進(jìn)含MATLAB代碼

[復(fù)制鏈接]
ID:489427 發(fā)表于 2019-3-12 19:06 | 顯示全部樓層 |閱讀模式
以前寫的改進(jìn)pso算法,附件包含源代碼

MATLAB源程序如下:
  1. %% No-dealing LOO RBF
  2. %      程序運行完以后,觀察一下數(shù)據(jù)
  3. %QPSO輸出
  4. %      Validation_err(curCount,Swarmsize)          %每一代每一個粒子的驗證數(shù)據(jù)錯誤率
  5. %      Test_err(curCount,Swarmsize)                %每一代每一個粒子的測試數(shù)據(jù)錯誤率(有可能比驗證集。
  6. %      Position{curCount,Swarmsize}                %每一代每一個粒子的位置,即所尋找的參數(shù)
  7. %      BestFitness(curCount,:)=gbest;              %每一代得到的驗證集全局最小誤差,即適應(yīng)度函數(shù)的迭代指標(biāo),越小越好
  8. %      BestPosition(curCount,:)=Pg;                %每一代得到的對應(yīng)驗證集全局最小誤差的最優(yōu)參數(shù)
  9. %      BestFitness2(curCount,:)=gbest2;            %每一代得到的驗證集取得全局最小誤差所對應(yīng)的最優(yōu)參數(shù)取得的測試集誤差(不一定最。
  10. %      Bestlabel1(curCount,:)=z1_best;             %每一代得到的驗證集全局最小誤差的預(yù)測標(biāo)簽
  11. %      Bestlabel2(curCount,:)=z2_best;             %每一代得到的驗證集取得全局最小誤差所對應(yīng)的最優(yōu)參數(shù)取得的測試集誤差的預(yù)測標(biāo)簽
  12. %      best_position=Pg;                           %迭代完成以后驗證集取得最小誤差所對應(yīng)的最優(yōu)參數(shù)值
  13. %      best_accuracy=1-gbest;                      %迭代完成以后驗證集取得是識別率最大值
  14. %      best_accuracy2=1-gbest2;                    %迭代完成以后驗證集取得最大識別率對應(yīng)的最優(yōu)參數(shù)取得的測試集識別率  
  15. %      best_validation_lable=z1_best;              %迭代完成以后驗證集取得最大識別率的預(yù)測標(biāo)簽
  16. %      best_test_lable=z2_best;                    %迭代完成以后驗證集取得最大識別率對應(yīng)的最優(yōu)參數(shù)取得的測試集識別率的預(yù)測標(biāo)簽

  17. %用最優(yōu)參數(shù)模型對驗證集和測試機(jī)進(jìn)行識別輸出
  18. %      V_label                                     %QPSO輸出最優(yōu)參數(shù)對應(yīng)的驗證集最大識別率的預(yù)測標(biāo)簽和驗證集原始標(biāo)簽,第二列等于best_validation_lable=z1_best
  19. %      T_label                                     %QPSO輸出最優(yōu)參數(shù)對應(yīng)的測試集識別率的預(yù)測標(biāo)簽和測試集原始標(biāo)簽,第二列等于best_test_lable=z2_best
  20. %      accuracy                                    %QPSO輸出最優(yōu)參數(shù)對應(yīng)的驗證集識別率等于best_accuracy=1-gbest
  21. %      accuracy2                                   %QPSO輸出最優(yōu)參數(shù)對應(yīng)的測試集識別率等于best_accuracy2=1-gbest2
  22. %% 載入數(shù)據(jù)

  23. clear
  24. global X

  25. X=[];

  26. load wound_data_max


  27. % %% 歸一化
  28. % X1=mapminmax(wound_data_max',0,1);            %要進(jìn)行一次轉(zhuǎn)置,這樣的歸一化是對列(也就是每個傳感器響應(yīng)曲線)的歸一化,也有的是對每一次采樣得到的數(shù)據(jù)進(jìn)行歸一化。
  29. % X1=X1';  

  30. X=wound_data_max;
  31. %%

  32. Swarmsize=20;    %種群規(guī)模
  33. particlesize=2; %待優(yōu)化的參數(shù)個數(shù)
  34. LoopCount=200;   %迭代次數(shù)


  35. W=rand(Swarmsize,particlesize);




  36. tic                 %計時開始
  37. for i=1:Swarmsize
  38.     lbest(i)=inf;  
  39. end                 % the values of local fitness
  40. gbest=inf;          % the valuse of global fitness
  41. Pl=W;               % storgae W value to P, the best local eight values
  42. Pg=W(1,:);          % the best adaptation weight values (mininum mean square error)
  43. %% The starting of Particle Swarm Optimization Algorithm

  44. for curCount=1:LoopCount
  45.         
  46. %calculate the adapting value
  47.      for i=1:Swarmsize

  48. [err,y,z]= fit_sqpso_m_rbf_LOO_2(W(i,:));  %對應(yīng)的要優(yōu)化的函數(shù)的名稱,本論文中對應(yīng)的就是fit_sqpso_fda_m_svm,fit_sqpso_kfda_m_svm等六個函數(shù)。
  49.                                                %err是錯誤率
  50.                                                %a是矩陣,包含兩列第一列是給出的標(biāo)簽類別信息,第二列是分類器預(yù)測出的標(biāo)簽類別信息

  51. Validation_err(curCount,i)=err;  %每一次迭代每一個粒子的留一法錯誤率
  52. Position{curCount,i}=W(i,:); %每一次迭代每一個粒子的位置,即所尋找的參數(shù)

  53.                                                
  54.        J(i)=err;   %驗證集錯誤率

  55.        zz1(i,:)=y;  %第i個粒子時80個樣本的實際標(biāo)簽                          
  56.        zz2(i,:)=z;  %第i個粒子時80個樣本的預(yù)測標(biāo)簽
  57.       
  58.        if lbest(i)>J(i)
  59.            lbest(i)=J(i);                      %每個粒子到目前為止的最優(yōu)值
  60.            Pl(i,:)=W(i,:);                     %Updated local optimal
  61.        end
  62.      end
  63.     % Search global optimal weight
  64.    [fitness, index]=sort(J);                   % arrange in order of size from mininum to maxinum
  65.     if gbest>fitness(1)
  66.         gbest=fitness(1);                      %到目前為止的全局最優(yōu)值
  67.         Pg=W(index(1),:);                      %到目前為止的取得全局最優(yōu)值的最優(yōu)參數(shù)
  68.         z1_best=zz1(index(1),:);               %到目前為止的全局最優(yōu)值對應(yīng)的80個樣本實際標(biāo)簽               
  69.         z2_best=zz2(index(1),:);               %到目前為止的全局最優(yōu)值對應(yīng)的80個樣本預(yù)測標(biāo)簽
  70.     end
  71.    
  72.      BestFitness(curCount,:)=gbest;      %每一次迭代得到的全局最小誤差,即每一代中適應(yīng)度函數(shù)值最小的一個
  73.      BestPosition(curCount,:)=Pg;        %每一次迭代得到的對應(yīng)全局最小誤差的最優(yōu)參數(shù)
  74.      Bestlabel1(curCount,:)=z1_best;     %每一次迭代得到的80個樣本實際標(biāo)簽
  75.      Bestlabel2(curCount,:)=z2_best;     %每一次迭代得到的80個樣本預(yù)測標(biāo)簽
  76.      %save('gbest.txt','gbest','Pg','z1_best','z2_best','-ascii','-double')

  77.     %  Expressions of updated location and speed
  78.     for i=1:particlesize
  79.         P=0;
  80.         for j=1:Swarmsize
  81.             P=P+Pl(j,i);
  82.         end
  83.         Mbest(i)=P/Swarmsize;      
  84.     end
  85.     %  Updated particle locations
  86.     beta=0.5+0.5*(LoopCount-curCount)/LoopCount;
  87.     for i=1:Swarmsize  
  88.        for j=1:particlesize
  89.           fai1=rand;
  90.           fai2=rand;
  91.           % p=(fai1*Pl(i,j)+fai2*Pg(j))/(fai1+fai2);
  92.             p=fai1*Pl(i,j)+(1-fai2)*Pg(j);
  93.           u=rand;
  94.           if u>0.5
  95.               W(i,j)=p+beta*abs(Mbest(j)-W(i,j))*log(1/u);
  96.           else
  97.               W(i,j)=p-beta*abs(Mbest(j)-W(i,j))*log(1/u);
  98.           end
  99.        end
  100.     end
  101. if curCount==LoopCount
  102.        best_position=Pg;                          %最優(yōu)參數(shù)值
  103.        best_accuracy=1-gbest;                     %全局最大值
  104.        best_actual_lable=z1_best;              
  105.        best_test_lable=z2_best;                     
  106.      % disp('times of iteration is not enough');
  107.   end
  108. end
  109. %best_fitness=BestFitness(curCount);             %適應(yīng)度函數(shù)最小取值
  110. % plot( BestFitness,'o')                         %通過曲線顯示整個過程fitness函數(shù)的走勢
  111. % load train;y1=[y;y;y];Fs=5000;wavplay(y1,Fs);  %起到提醒的作用,表示程序已經(jīng)運行完畢
  112. t=toc;                                         %計時結(jié)束并且將時間值返回給t


  113. save workspace_qpso_m_rbf_LOO(2)
復(fù)制代碼

所有資料51hei提供下載:
PSO.zip (25.99 KB, 下載次數(shù): 13)


回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表