function [xm,fv]=PSO_Kades(fitness,N,c1,c2,w,M,D) %待优化的函数:fitness %粒子数目:N %学习因子:c1 %学习因子:c2 %惯性权重:W %最大迭代次数:M %取得最小值时的自变量值:xm %目标函数的最小值:fv %初始化初始位置 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) %更新粒子本身历史最优 y(i,:)=x(i,:); end if fitness(y(i,:))<fitness(pg) %更新全局最优 pg=y(i,:) end end end xm=pg'; fv=fitness(pg);