%先创建一个这个函数,是目标函数
function F=fitness(x)
F=0;
for i=1:30
F=F+x(i)^2+x(i)-6;
end
测试:
[xm,fv,pbest]=PSO(@fitness,100,1.5,2.5,0.5,100,30);
figure(1);
plot(pbest);
粒子群规模:100,自我认知因子:1.5,社会认知因子:2.5,惯性权重:0.5,数据维度:30
效果:
如果有需要代写一些简单的MATLAB代码文件的,可以私信我,我如果能做到将免费代写
今天发现,平台不允许完全免费下载,至少需要9个积分,所以我把完整代码,粘在这里,供大家参考
function [xm,fv,fvh]=PSO(fitness,N,c1,c2,w,M,D)
format long;% 16 significant digits
%-----------------------initialized variable-------------------------------
fvh=zeros(1,N);
x=randn(N,D);% current partical location
v=randn(N,D);
p_best=zeros(1,N); % The best function value of every partical.
x_local=x;
for i=1:N
p_best(i)=fitness(x(i,:));% The first best value is current function value.
end
x_global=x(N,:); % the global best solution
for i=1:N-1
if fitness(x(i,:)) < fitness(x_global)
x_global=x(i,:);
end
end
% iterator update
for t=1:M
for i=1:N % update partical state
v(i,:)=w*v(i,:)+c1*rand*(x_local(i,:)-x(i,:))+c2*rand*(x_global-x(i,:));
x(i,:)=x(i,:)+v(i,:);
% update local
if fitness(x(i,:))<p_best(i)
p_best(i)=fitness(x(i,:)); % save better current function value
x_local(i,:)=x(i,:); % save better solution
end
% update global
if p_best(i)<fitness(x_global)
x_global=x_local(i,:);
end
end
fvh(t)=fitness(x_global);
end
xm=x_global';
fv=fitness(x_global);
PSO函数文件,已经上传到CSDN了,是免费的,供大家自由取用
这是下载链接,