粒子群优化算法(PSO)

 一.简介

      作为最优化算法的一种,粒子群优化算法(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的优势在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。但其也存在精度较低,容易发散,以及选择合适的参数控制等等不足。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值