一.简介
作为最优化算法的一种,粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。
二.基本思想
通过群体中个体之间的协作和信息共享来寻找最优解。
通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置
三、粒子群算法分析
(1)基本公式:
vi=vi+c1*rand()*(pbesti-xi)+c2*rand()*(gbesti-xi)
xi=xi+vi
i=1,2,3……N是此群中粒子的总数
vi:粒子的速度;rand是(0,1)之间的随机数
xi:粒子当前的位置
c1、c2:学习因子,通常c1=c2=2
vi的最大值为Vmax(大于0),如果vi大于Vmax,则vi=Vmax
公式(1)的第一部分称为【记忆项】,表示上次速度大小和方向的影响;公式(1)的第二部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;公式(1)的第三部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。以上面两个公式为基础,形成了PSO的标准形式
(2)流程图

四.程序代码(Matlab)
f=@(x)x+x.*sin(x);%目标函数表达式
figure(1);
fplot(f,[-10,10]);
N=50; %初始种群个数
d=1; %空间维数
ger=100; %最大迭代次数
limit=[-10,10]; %位置参数限制
vlimit=[-1,1]; %速度参数限制
w=0.8;c1=2;c2=2; %w—惯性权重;c1,c2—学习因子
x=-10+20*rand(N,d); %初始种群的位置
v=rand(N,d); %初始种群的速度
xm=x; %每个个体的历史最佳位置
ym=zeros(1,d); %种群的历史最佳位置
fxm=zeros(N,1); %每个个体的历史最佳适应度
fym=-inf; %种群历史最佳适应度
hold on
plot(xm,f(xm),'ro');
title('初始状态图');
figure(2)
iter=1;
record=zeros(ger,1); %记录器
while iter<=ger
fx=f(x); %个体当前适应度
for i=1:N
if fxm(i)<fx(i)
fxm(i)=fx(i); %更新个体历史最佳适应度
xm(i,:)=x(i,:); %更新个体历史最佳位置
end
end
if fym<max(fxm)
[fym,nmax]=max(fxm); %更新群体历史最佳适应度
ym=xm(nmax,:); %更新群体历史最佳位置
end
v=v*w+c1*rand*(xm-x)+c2*rand*(repmat(ym,N,1)-x); %速度更新
%边界速度处理
v(v>vlimit(2))=vlimit(2);
v(v<vlimit(1))=vlimit(1);
x=x+v;
%边界位置处理
x(x>limit(2))=limit(2);
x(x<limit(1))=limit(1);
record(iter)=fym; %最大值记录
x0=-10:0.01:10;
plot(x0,f(x0),'b-',x,f(x),'ro');
title('状态位置变化')
pause(0.1)
iter=iter+1;
end
figure(3);
plot(record);
title('收敛过程')
x0=-10:0.01:10;
figure(4);
plot(x0,f(x0),'b-',x,f(x),'ro');
title('最终状态位置')
disp(['最大值:',num2str(fym)]);
disp(['变量取值:',num2str(ym)]);
运行结果:
搜索过程中
![]() |



最终结果
五.总结
PSO的优势在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。但其也存在精度较低,容易发散,以及选择合适的参数控制等等不足。

1304

被折叠的 条评论
为什么被折叠?



