粒子群优化算法(Particle Swarm Optimization)的 Matlab(R2018b)代码实现
生活随笔
收集整理的這篇文章主要介紹了
粒子群优化算法(Particle Swarm Optimization)的 Matlab(R2018b)代码实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這里以 2D Michalewicz function 為對象來演示粒子群算法。
1、Michalewicz function
2、代碼詳解
2.1 畫Michalewicz函數的網格圖形
f=@(x,y)(-sin(x).*(sin(x.^2/3.1415926)).^(2*m)...-sin(y).*(sin(2*y.^2/3.1415926)).^(2*m));range=[0 4 0 4]; Ngrid=100; dx=(range(2)-range(1))/Ngrid; dy=(range(4)-range(3))/Ngrid; xgrid=range(1):dx:range(2); ygrid=range(3):dy:range(4); [x,y]=meshgrid(xgrid,ygrid); z=f(x,y); figure(1); %subplot(1,2,1); surfc(x,y,z); hold on;2.2 粒子群優化算法的子函數
粒子群初始化
function [xn,yn]=init_pso(n,range) xrange=range(2)-range(1); yrange=range(4)-range(3); xn=rand(1,n)*xrange+range(1); yn=rand(1,n)*yrange+range(3); end粒子群的移動
function [xn,yn]=pso_move(xn,yn,xo,yo,a,b,range) nn=size(yn,2); xn=xn.*(1-b)+xo.*b+a.*(rand(1,nn)-0.5); yn=yn.*(1-b)+yo.*b+a.*(rand(1,nn)-0.5); [xn,yn]=findrange(xn,yn,range); end確保粒子群不會出界
function [xn,yn]=findrange(xn,yn,range) nn=length(yn); for i=1:nnif xn(i)<=range(1)xn(i)=range(1);endif xn(i)>=range(2)xn(i)=range(2);endif xn(i)<=range(3)xn(i)=range(3);endif xn(i)>=range(4)xn(i)=range(4);end end end2.3 粒子群算法的主體函數
%n = number of particles % Num_iterations = number of iterations n=10; Num_iterations =50; best=zeros(Num_iterations,3); [xn, yn]=init_pso(n,range); figure(2); for i = 1:Num_iterationscontour(x,y,z,15); %show the contour of the objectvie functionhold on;%find the current best location(xo,yo)zn=f(xn,yn);zn_min=min(zn);xo=min(xn(zn==zn_min));yo=min(yn(zn==zn_min));zo=min(zn(zn==zn_min));plot(xn,yn,'.',xo,yo,'*');axis(range);beta=0.5;gamma=0.7;alpha=gamma.^i;[xn,yn]=pso_move(xn,yn,xo,yo,alpha,beta,range);drawnow;hold off;best(i,1)=xo;best(i,2)=yo;best(i,3)=zo; end3 圖形展示,粒子數設為10,迭代次數設為50
Michalewicz function的網格圖
粒子群初始化圖,‘點’表示粒子,‘星’表示群中最小的粒子
?粒子群運動結束圖,最后粒子都運動到了 '星' 點處
4 粒子群優化算法的優缺點
粒子群優化算法應用范圍廣,不要求目標函數可導。如果粒子群不夠大(比如把粒子數設為2),迭代次數不夠多(迭代次數設為5),最后可能無法得到最優解。由于算法初始化時隨機生成粒子群,多次運行,粒子群不一樣,最終的結果也可能會不一樣(進入不同的局部最優解)。
?
總結
以上是生活随笔為你收集整理的粒子群优化算法(Particle Swarm Optimization)的 Matlab(R2018b)代码实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB中的S-Function的用
- 下一篇: PyTorch框架学习九——网络模型的构