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);
粒子羣算法的matlab實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.