粒子群算法PSO
- 1. 粒子群算法
- 2. 算法流程
- 2.1 公式解读
- 2.2 初始化
- 2.3 计算流程
- 2.4 示例
1. 粒子群算法
粒子群算法(Particle Swarm Optimization)是一种优化算法,其主要思想受到自然界鸟群飞行的启发。
对一群鸟群来说,其群体觅食行为呈现一定规律:单只鸟并不知道食物地在哪里,但可以通过飞行中对食物的远离程度来纠正自己的飞行。体现在单只鸟上可能并不明显,但当鸟群数量多起来之后,就可以利用鸟群数量弥补单只鸟搜索能力的不足,逐渐逼近最优值。而在这个过程中,整个系统还需要满足一定的性能指标(称为代价函数)。
2. 算法流程
首先设定一个搜索的范围
此即为每个粒子(每只鸟)的搜索范围。
还要定义每个粒子搜索的速度
该量的具体含义在后面给出。
此外还有一些量需要提前初始化:
– 粒子个数, – 每个粒子的维度(包含几个自变量),
2.1 公式解读
粒子群算法的核心公式为
该公式含义为:每第k次迭代计算的粒子群的搜索范围,应当是在上一次搜索范围基础上加上一个增量,具象地来说就是每次的搜索域都“挪动”一个小范围,进行地毯式搜索。
而这个“挪动”的范围,需要考虑三方面内容:上一次挪动范围,上一次的局部最优范围和上一次的搜索范围之差,以及上一次的全局搜索范围和上一次的搜索范围之差。
换言之,考虑了上一次的,上一次的局部最优,以及上一次的全局最优。这样,粒子运动时就会综合考虑局部最优、全局最优、历史影响三者,能兼顾到随机性和全局最优性。
2.2 初始化
粒子群算法的初始化公式为
公式含义为:粒子群的搜索范围,应当是在基础上加上一个增量,该增量前的系数为一随机数,保证了算法随机搜索的能力,但同时该随机数应当在范围内,以便保证搜索域依然能满足条件(1)。同理。
2.3 计算流程
将初始搜索域的所有粒子代入代价函数计算代价函数的值:
随后利用公式(3)进行更新,并代入代价函数计算每一次迭代的代价函数值:
计算后,若该为目前出现过的最小/大值,则记录下来
依次循环,每次利用随机数得出新的搜索域,并更新,以便使得代价函数始终为极值。
值得注意的是,对于和,每次迭代前都需要进行限幅saturation:
2.4 示例
设二维搜索空间为,代价函数为
设粒子数,迭代次数,惯性系数,学习系数,搜索范围,速度增量范围。
对于此二维问题,可以找到最优解:
其搜索空间为
图中黑点为随机搜索的点,红色三角为最优点。