粒子群算法的简单应用

粒子群算法PSO是什么

01.简介[1]

PSO是粒子群优化算法(–Particle Swarm Optimization)的英文缩写,是一种基于种群的随机优化技术,由Eberhart和Kennedy于1995年提出。粒子群算法模仿昆虫、兽群、鸟群和鱼群等的群集行为,这些群体按照一种合作的方式寻找食物,群体中的每个成员通过学习它自身的经验和其他成员的经验来不断改变其搜索模式。

02.算法步骤[2]

01.简述

每个寻优的问题解都被想像成一只鸟,称为“粒子”。所有粒子都在一个D维空间进行搜索。

- 所有的粒子都由一个fitness-function确定适应值以判断目前的位置好坏。

- 每一个粒子必须赋予记忆功能,能记住所搜寻到的最佳位置。

- 每一个粒子还有一个速度以决定飞行的距离和方向。这个速度根据它本身的飞行经验以及同伴的飞行经验进行动态调整。

02.基本PSO算法

a. D维空间中,有m个粒子;

粒子i位置

粒子i速度

粒子i经历过的历史最好位置:

群体内(或领域内)所有粒子所经历过的最好位置:

一般来说,粒子的位置和速度都是在连续的实数空间内进行取值。

b. 基本公式

其中,c1,c2是学习因子和加速因子,r1,r2取值范围为[0,1],是该区间范围内的随机数,是例子速度能达到的最大值

03.流程图

简单的PSO例子(python实现)

例一:最值问题[3]

求函数

的最大值

首先,我们需要构造评价函数:

这里我们注意到,在边界处理上,我们返回了一个较小值,而并非负无穷(-inf),是为了避免出现速度很大导致的越界。

然后我们可以调用snowland-algorithm工具包,进行求解

完整代码

例二:解方程

求解方程 x = sqrt(x) - x*sin(x) 在[-2, 0]区间内的近似解 问题的主要难点在于方程组向评价函数的转化。 我们可以把右式移项,变成F(x) = 0的形式,我们用“越接近0越好”最为评价函数,问题即转化为最优值问题

在这里,我们用了一个减函数1/abs(·)的形式把接近0表示出来,当然也可以使用跟其他函数。在在分母处+1,为了防止分母为0导致评价变成无穷。

完整代码

例三:优化问题

把约束条件写在评价函数内即可。注意,经验表明,约束排除的点的区间不应该大于整个区间的1/3.如果约束过多,需要考虑缩小变量的范围,否则可能影响迭代效果。

完整代码

参考资料

[1].360百科 https://baike.so.com/doc/6744648-24861474.html 2018-08-03

[2].CSDN https://blog.csdn.net/zuochao2013/article/details/53431767?ref=myread 2018-8-27

[3].码云 https://gitee.com/hoops/snowland-algorithm-python/blob/master/slapy/demo/gsodemo.py 2018-8-7

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180828G1K4VN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券