粒子群算法最先从观察鸟的捕食行为出发得到的仿生算法,它的原始算法用于求解无约束的多变量优化问题,如二元函数在给定区域内的极值问题,后来被扩展到求解TSP问题,动态优化问题和多目标优化问题。
粒子群算法的基本思想如下。一只鸟出去捕食,它当然是希望找到食物最多的位置。假设这只鸟每隔一段时间(比如1分钟),它就记下自己当前的位置和该位置的食物多少,除此之外,它还能够记录下自己经过的最佳位置(即食物量最多的位置)和鸟群中其他鸟经过的所有位置中的最佳位置。下面的问题是,如何调整鸟的路线,使之能尽快到达食物最多的位置?采用的策略如下:鸟会向着它自己经过的最佳位置和鸟群中其他鸟寻找到的最佳位置飞去,即它的速度会随自身和其它鸟的移动经验进行动态调整。另外,考虑到它还要保持一定的当前飞行方向,加上朝着最佳位置的移动,就给出鸟相应的速度和位置的更新公式。
下面换成粒子群算法的术语:鸟对应于粒子,鸟群对应于粒子群,鸟的数量对应于种群规模,食物量对应于适应度值,鸟自己经过的最佳位置对应于个体极值,鸟群中其他鸟经过的所有位置中的最佳位置对应于群体极值。
剩下的一个问题,刚开始时,鸟即粒子的位置和速度如何设置?随机技术解决,即在可行区域内随机鸟的位置,速度也给一个随机值。另外一个细节问题是,鸟不能飞出可行区域以及要为速度设置一个最大值。
原始的粒子群算法用于求解二元多峰值函数的极值问题(详见chapter 13),取得了很好的效果。下面说一下书中给出的粒子群算法的几个变形和解决的问题。
第一个问题:旅行商(TSP)问题(详见chapter 15)。旅行商问题的最终解显然应该是一个序列,而原始粒子群算法的速度更新算法显然没有办法直接挪用过来,借鉴遗传算法的交叉和变异操作对当前的粒子进行更新,达到粒子向个体极值和群体极值移动的目的。
第二个问题:多目标优化问题(详见chapter 10)。由于目标比较多,常常会出现下列情况,一个特定的解改变后,对一个目标改善了不少,而对另一个目标却变差了,那么这两个解很难区分孰好孰坏,称这样的解为非劣解。用粒子群算法求解多目标优化问题和原始的算法相比,区别在于个体极值和群体极值的优化,如果一个解相对另一个解并不全面占优,那么就可以随机选择其中一个。
第三个问题:动态寻优问题(详见chapter 16)。所谓动态寻优问题,以鸟群捕食为例,如果某个位置的食物量随时间的变化而变化,就称为动态寻优问题。粒子群用于动态寻优问题,要判断当前的环境是否变化,如果发生了变化,那么初始设置的鸟群的适应度函数就应该随之改变。不同的检测环境变化的方法对应不同的算法,比如书中代码给出的敏感粒子方法,以及延伸阅读中的监测全局最优位置和引入蒸发系数使粒子逐渐忘记自身记忆的方法(从教材的叙述来看,这种方法对于复杂的环境适应性较差)。
关于粒子群算法的改进。前面已经提到过,粒子依据个体极值位置和群体极值位置来进行相应的移动,那么,能不能不考虑两个极值只给出一个极值呢?可以。采用的技术叫做正交技术,基本想法是利用很少的计算来以两个极值位置为矩形的区域内寻找一个最佳的或较佳的位置。