粒子羣算法的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);

發佈了62 篇原創文章 · 獲贊 42 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章