算法

粒子群算法

2019-05-06  本文已影响1人  f990c9264644

今天给大家介绍一种优化算法。

粒子群优化算法,也叫作鸟群算法,英文简称PSO算法。

现在假设这样一个问题,在一个空间内,有一定数量的鸟群,在这个空间中的某个位置存放了食物,但是鸟群中的鸟不知道什么位置存放了食物,仅知道其当前位置与食物的距离,问题就是我们的鸟群需要在最快的时间内找到食物的位置。

算法是这样定义的,首先对于鸟群中的鸟,其所拥有的变量有三个,第一,是其当前的位置信息。第二,是其速度,这个速度(包含速度大小和速度方向)就决定了下一时刻该鸟的位置。然后,对于鸟群中的每个鸟,其在搜寻食物过中所经历的最好位置(也就是距离食物的最近位置)记为pbest;对于整个种群,其每次整体迁移的过程中,总会有一个鸟距离食物的距离最近,那么我们记这个鸟在这一时刻的位置为gbest。其次,对于速度的定义是这样的

其中这个i就是第i个小鸟。

对于这里的一些名词,我们简单解释一下:

w 为非负数,称为惯性因子。

c1和c2称为加速常数。c1c1是根据个体自身的经验进行判断的常数;c2c2根据群体的经验

r1和r2为[0,1]范围内变换的随机数。

a 称为约束因子,目的是控制速度的权重。

然后我们取单位时间,那么下一时刻的位置就变成了上一时刻的位置加上一时刻的速度。

最后,粒子的位置坐标对应于所求的目标函数的函数值,也就是适应度值。粒子群中的粒子中适应度值最好的那个粒子的坐标就是目标函数的解。

基于这些,我们的鸟群就可以找到食物了。

现在让我们化身为鸟群里的小鸟,来进行一次搜寻食物之旅。

假设现在有三只小鸟:

第一只叫坤坤,第二只叫凡凡,第三只叫带带大师兄。

现在进行搜索,凡凡,坤坤,大师兄,在森林里漫无目的的飞啊飞。

每隔一段时间,坤坤,凡凡还有大师兄拿出手机互通电话,共享各自的位置。

然后坤坤和凡凡发现大师兄距离食物最近,就决定向大师兄那个方向飞去。

就这样,坤坤和凡凡准备开始向大师兄靠拢。

但是凡凡想起来自己有一次的位置比大师兄现在的这个位置更好,他不知道怎么办,所以三个人就在微信群里商量,就有了上面的速度公式。

然后,经过不断的调整,三只鸟儿会向食物方向聚集,达到目标。

对于我们的实际应用来说,我现在有一个需要优化的函数(一般是优化函数的最小值),有五个自变量,那么我们的每个鸟儿的位置就会有五个,每个鸟儿的速度也会有五个,那么我们的适应值就是将五个自变量带入优化函数所得到的函数值。鸟群一共有三只鸟,那么我的鸟群所构成的数组就是一个三行五列的数组。

以下是粒子群的算法流程:

上一篇下一篇

猜你喜欢

热点阅读