1. 简介
粒子群优化算法(Particle Swarm Optimization,PSO)是一种基于鸟类觅食提出来的进化计算技术,由电气工程师Eberhart博士和美国社会心理学家Kennedy博士发明,是一种基于迭代的优化工具。
该算法的基本思想是通过群体中个体之间的协作和信息共享来寻找最优解。由于没有遗传算法的交叉、变异,粒子群算法更容易实现。
2. 基本运算过程
1)参数初始化
需要设置以下几项:
-
迭代次数
-
群体规模N。一般取20-60,复杂问题取100-200。
N过小,容易陷入局部最优; N过大,优化能力很好,但收敛速度慢。 -
最大速度Vm,最小速度-Vm。一般为每一维度变量变化范围的10%-30%。
作用在于维护算法的探索能力与开发能力的平衡。
较大,增强了全局搜索能力,但粒子容易飞过目标区域,导致局部搜索能力下降。
较小,开发能力增强,但会极大地增加全局搜索的时间,容易陷入局部最优。 -
变量取值范围Xm,-Xm。
-
认知常数(学习因子、加速度常数)c1 c2 。c1=c2,取0- 4之间, 通常取2。
c1=0,丧失群体多样性,易陷入局优而无法跳出。
c2=0,由于个体之间没有信息的交流,整个群体相当于多个粒子进行盲目的随机搜索,收敛速度慢,因而得到最优解的可能性小。
一般都不为0,更容易保持收敛速度和搜索效果的均衡;c1=c2个体最优和全局最优占相同权重。 -
随机函数r1、r2。可以是相同类型,也可以是不同类型
2)获取个体最优解与全局最优解
个体极值为每个粒子找到的历史上最优的位置信息,并从这些个体历史最优解中找到一个全局最优解,与历史最优解比较,选出最佳的作为当前的历史最优解。
3)更新粒子速度和位置
d表示维度
3.1)速度更新公式
速度更新公式由三部分构成:
第一部分“惯性”反映微粒的运动“习惯”,代表粒子有维持自己先前速度的趋势。
第二部分“认知”反映粒子对自身历史经验的记忆或回忆,代表粒子有向自身历史最佳位置逼近的趋势。
第三部分“社会”反映粒子间协同合作与知识共享的群体历史经验,代表粒子有向群体历史最佳位置逼近的趋势。
通常在第d维的速度变化范围限定在 [-Vm,Vm] 内,如果 v 超出了范围,则该维的速度被限制为该维边界速度。
3.2)位置更新公式
通常在第d维的位置变化范围限定在 [-Xm,Xm] 内,如果 x 超出了范围,则该维的位置被限制为该维边界位置。
3.3)计算示意图
用平行四边形法则解释如下:
4)循环终止条件
- 最大迭代数
- 可接受的满意解在一个指定的范围内即停止
3.有待改进
1)算法搜索精度不够高。
2)算法不能够绝对保证搜索到全局最优解,容易陷入局部极小解。
3)算法搜索性能对参数具有一定的依赖性。
4.求解多峰函数
推荐一个视频 美赛蚁群粒子群鱼群
致谢 粒子群算法的C++实现