粒子群演算法的matlab實現
阿新 • • 發佈:2018-12-27
function [xm,fv]=PSO(fitness,N,c1,c2,w,M,D) % fitness:待優化的目標函式 % N:粒子數目 % c1,c2:學習因子1,學習因子2 % w:慣性權重 % M:最大迭代次數 % D:問題的維數 % xm:目標函式取最小值時的自變數值 % fv:目標函式最小值 format long; %---------初始化種群的個體------------- for i=1:N for j=1:D x(i,j)=randn; v(i,j)=randn; end end %---------先計算各個粒子的適應度,並初始化Pi和Pg---------- for i=1:N p(i)=fitness(x(i,:)); y(i,:)=x(i,:); end pg=x(N,:); %pg為全域性最優 for i=1:(N-1); if fitness(x(i,:))<fitness(pg) pg=x(i,:); end end %---------進入主迴圈,按照公式依次迭代---------- for t=1:M for i=1:N v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:)); x(i,:)=x(i,:)+v(i,:); if fitness(x(i,:))<p(i) p(i)=fitness(x(i,:)); y(i,:)=x(i,:); end if p(i)<fitness(pg) pg=y(i,:); end end pbest(t)=fitness(pg); end xm=pg'; fv=fitness(pg);