1. 程式人生 > >粒子群演算法的matlab實現

粒子群演算法的matlab實現

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);