PSO算法原理
Particle Swarm Optimization(PSO). 最早PSO是模拟鸟群觅食行为的一种基于群体协作的随机搜索算法。一群鸟在空间内自由飞翔,每一只鸟记得自己到过最高的位置,它会随机地靠近这个位置;不同的鸟之间可以相互交流,它们都尽量靠近所有鸟中曾到过最高的位置。这样一来,经过一段时间就能找到近似的最高点。
在PSO算法中,每一个“粒子”表示优化问题的一个解。被优化函数决定了适应度函数,每一个粒子有一个适应度值,适应度值越大越好。每一个粒子有一个速度,速度决定了“飞行”的方向和距离。PSO算法首先初始化一群随机粒子,然后通过迭代找到最优解。在迭代过程中,粒子的位置更新取决于:1)个体极值,即粒子本身找到的最优解;2)全局极值,即整个种群目前找到的最优解。有时也可以用领域极值,所有领域中的极值就是全局极值。
因此使用PSO算法有两个非常重要的步骤:1)将问题编码;2)选择适应度函数
编码:
PSO算法的优势之一就是采用实数编码。例如欲求 的最大值,可以将粒子编码为, 适应度函数为
参数选择:
1)粒子数:一般取20~40.对于较难的问题,可以取到100或200
2)最大速度:决定粒子在一次循环中能移动的最大距离。较大的可以保证全局搜索能力;较小的可以加强局部搜索能力。
3)学习因子:为局部学习因子,为全局学习因子。一般取大一些。通常可以设置为2
4)惯性权重:表示粒子上次飞行速度及方向对本次飞行的影响。较大的惯性权重有利于全局寻优,小的惯性权重有利于局部寻优。很小时,可以取惯性权重为1;不是很小时取0.8。此外,经验表明,惯性权重从0.9随时间线性递减到0.10,算法性能较好。
5)中止条件:最大循环次数或最小误差要求。
算法流程:
1)初始化:设定参数运动范围。设定学习因子。设定最大进化代数G。kg表示当前的进化代数。粒子种群规模为Size。第i个粒子在解空间的位置表示为,速度表示为。个体极值为,全局极值为BestS。初始种群的位置矩阵和速度矩阵是随机值。
2)个体评价(适应度评价):计算各个粒子的位置对应的适应度值,并求出种群最优位置。
3)更新粒子速度和位置,产生新种群,检查粒子的速度和位置是否越界。加入局部自适应变异算子以防陷入局部最优解:(、为0到1的随机数)
4)比较粒子当前适应度值与个体极值,如果当前更优,则更新个体极值,并更新粒子位置。

5)比较粒子当前适应度值与(当前)全局极值,如果当前更优,则更新全局极值。
6)检查结束条件。若满足,则结束。若不满足,则kg自增,跳转到步骤3)。
局部粒子群算法
为了避免陷入局部极小值,可以采用局部粒子群算法。每个粒子速度的更新取决于个体极值和邻域内粒子的局部极值. 选取邻域的方式有很多种,本位介绍环形领域法:

如图,粒子1的邻域为8,1,2. 粒子4的邻域为3,4,5. 以此类推。
更新粒子速度和位置的公式变为:
粒子群优化实例
求Rosenbrock函数的极大值:

运行的结果:
