1 粒子群算法简介
粒子群算法(Particle swarm optimization, PSO)是一种仿生算法,它是一种 在求解空间中寻找最优解 的简单算法。它与其他优化算法的不同之处在于,它只需要 目标函数,不依赖于目标的梯度或任何微分形式。它也有很少的超参数。
粒子群算法是由Kennedy和Eberhart在1995年提出的。正如在最初的论文中提到的,社会生物学家认为一群鱼或一群鸟在一个群体中移动,可以从所有其他成员的经验中获益
。
换句话说,当一只鸟在空中随机寻找食物时,鸟群中的所有鸟都可以 分享 他们的发现,并帮助整个鸟群获得最佳狩猎。
PSO算法将待解决的 优化问题看作是鸟群捕食的过程,其 飞行空间 即为优化问题的解空间,而 捕食空间 中的 1个粒子,即为待解决的 1个解。
具体来说,在某一 D维空间 的目标搜索空间中,有一个种群大小为M
的粒子群,其中第i
个粒子在t时刻的状态由 速度和位置 2个 向量 来描述。
粒子的 速度 可表示为:
式中:
2 算法流程简介
利用这两个简单的方程,PSO例程的基本流程结构如下:
1 初始化:
3 算法思想解释
PSO背后的主要概念(从上面的粒子速度方程可以明显看出)是,在 三个不同的力 对每个粒子的牵引之间存在一个恒定的平衡:
- 惯性部分:由惯性权重和粒子自身速度构成,表示粒子对先前自身运动状态的信任;
- 认知部分:表示粒子本身的思考,即粒子自己经验的部分,可理解为粒子当前位置与自身历史最优位置之间的距离和方向;
- 社会部分:表示粒子之间的信息共享与合作,即来源于群体中其他优秀粒子的经验,可理解为粒子当前位置与群体历史最优位置之间的距离和方向。
可以在上面的例子中看到,粒子惯性和个体最佳的权重超过了群的影响。在这种情况下,粒子将继续探索搜索空间,而不是收敛到群上。下面是另一个例子:
这一次,分配给群体影响的权重超过了迫使它向群体移动的粒子的单个力量。这将导致更快的收敛,但代价是没有充分探索搜索空间以及没有找到更好的解决方案。