粒子群优化算法(Particle Swarm Optimization),缩写为PSO, 是近年来发展起来的一种新的进化算法(Evolutionary Algorithm - EA)。PSO算法属于进化算法的一种,和模拟退火算法相似,它也是从随机解出发,通过迭代寻找最优解,它也是通过适应度来评价解的品质,但它比遗传算法规则更为简单,它没有遗传算法的“交叉”(Crossover)和“变异”(Mutation)操作,它通过追随当前搜索到的最优值来寻找全局最优。这种算法以其实现容易、精度高、收敛快等优点引起了学术界的重视,并且在解决实际问题中展示了其优越性。粒子群算法是一种并行算法。1995年由Eberhart博士和kennedy博士提出,源于对鸟群捕食的行为研究。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。


  在找到这两个最优值时,粒子根据如下两个公式来更新自己的速度和新的位置:

粒子群优化算法PSO python 粒子群优化算法优缺点_优化

粒子群优化算法PSO python 粒子群优化算法优缺点_优化_02


    v[] 是粒子的速度, w是惯性权重,present[] 是当前粒子的位置。rand 是介于0和1之间的随机数。c1, c2 是学习因子。通常 c1 = c2 = 2。

    粒子数: 一般取 20 – 40。 其实对于大部分的问题10个粒子已经足够可以取得好的结果, 不过对于比较难的问题或者特定类别的问题, 粒子数可以取到100 或 200。

    粒子的长度:这是由优化问题决定, 就是问题解的长度。

    粒子的范围:由优化问题决定,每一维可是设定不同的范围。

    Vmax: 最大速度,决定粒子在一个循环中最大的移动距离,通常设定为粒子的范围宽度。

    学习因子: c1 和 c2 通常等于 2。不过在文献中也有其他的取值。 但是一般 c1 等于 c2 并且范围在0和4之间。

    中止条件:最大循环数以及最小错误要求。

    全局PSO和局部PSO: 我们介绍了两种版本的粒子群优化算法: 全局版和局部版。 前者速度快不过有时会陷入局部最优。后者收敛速度慢一点不过很难陷入局部最优。 在实际应用中, 可以先用全局PSO找到大致的结果,再用局部PSO进行搜索。

    惯性权重: Shi 和Eberhart指出(A modified particle swarmoptimizer,1998):当Vmax很小时(对schaffer的f6函数,Vmax<=2),使用接近于1的惯性权重;当Vmax不是很小时(对schaffer的f6函数,Vmax>=3),使用权重w=0.8较好.如果没有Vmax的信息,使用0.8作为权重也是一种很好的选择.惯性权重w很小时偏重于发挥粒子群算法的局部搜索能力;惯性权重很大时将会偏重于发挥粒子群算法的全局搜索能力。