粒子群算法
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 完全自学一本通》