一、粒子群算法概述
在一个森林中,有很多好吃的食物。森林中,一个鸟群中,每只鸟都想找到最好吃的食物。
假设在一次种群觅食的过程中,bird Z找到的是目前所有食物中最好的,并且告诉其它鸟这个信息。这个时候bird A会改变自己的运动方向,朝这food A的方向移动。但是bird A一想:
- 它现在找到也不一定是最好的啊,可能只是它目前找到的最好的
- 我之前在找的过程中也找到了非常好的,我也没必要方向全部改变到
food A那边
(假设自己目前找到的最好的是食物的位置是pbest_x,所有个体目前找到的最好的是gbest_x)
于是这个时候,bird A想了一种折中的办法:选取此时自己的方向和bird Z的方向的一个中间方向。在如此不停迭代的过程中,所有个体都慢慢靠向最优的食物,最终找到最优食物。
二、速度和位置的更新
上面说到,bird A会选取一个中间方向。该算法给出的速度、位置更新公式如下:
公式说明:
- 表示第个个体第次觅食的速度,有大小和方向
- 表示第个个体目前找到的最优食物的位置,表示种群内所有个体目前找到的最优食物的位置。显然有
- 表示第个个体目前的位置
均为超参数(即可以自己调节)
- 可以解释为惯性系数,表示第个个体保持原有速度的程度
- 可以解释为学习因子,表示以多大的程度接受两个方向的变化
- 可以解释为随机因子,范围在,一定程度上控制算法的随机性
公式解释
以我自己的理解,就是利用算一个方向的变化(接受个体的认知),利用算一个方向的变化(接受种群的认知),然后将这些方向的变化加到自己现有的速度上,就实现了一个方向的改变。至于系数,无非就是接受这些变化的程度。
三、算法流程图
常量有哪些?
迭代次数、种群大小、惯性系数、学习因子、随机因子、速度范围、位置范围