(二十四)matlab 粒子羣算法

粒子羣算法

function [xm,fv]=PSO(fitness,N,c1,c2,w,M,D)
format long;
for i=1:N
    for j=1:D
        x(i,j)=randn;
        v(i,j)=randn;
    end
end
for i=1:N
    p(i)=fitness(x(i,:));
    y(i,:)=x(i,:);
end
pg=x(N,:);
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`    58qw    ASDFGHL
    end
    Pbest(t)=fitness(pg);
end
xm=pg';
fv=fitness(pg);

算法調用

% 目標函數
f=@(x)x^2;
% 粒子數量
N = 50;
% 學習因子1
c1 = 0.5;
% 學習因子2
c2 = 0.5;
% 迭代次數
M = 100;
% 慣性權重
w = 0.8;
% 數據維數
D = 1;
% 調用PSO
[xm,fv]=PSO(f,N,c1,c2,w,M,d)
% xm =
%     -1.178435432430680e-07
% fv =
%      1.388710068408084e-14

參考資料:《MATLAB R2016a 完全自學一本通》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章