一、粒子群算法简介
这里通过共享信息的鸟群来引出粒子群算法
- 场景:一群鸟在森林随机寻找食物,目标是找到食物量最多的位置
- 关键:鸟群通过叫声交流,随时共享自己的位置和发现的食物量
- 这样鸟群就知道当前在哪个位置食物的量最多
- 每只鸟根据自己的记录和从鸟群获取的信息调整下一步搜索的方向
- 每只鸟都记录自己经过位置的食物量最多的位置--------个体最优解
- 每只鸟都知道整个鸟群记录过的食物量最多的位置--------群体最优解
- 鸟具有惯性,有保持自身原有方向的趋势。但鸟也会学习
- 鸟学习个体经验,有向个体最优解飞行的趋势
- 鸟学习社会经验,有向群体最优解飞行的趋势
- 惯性、个体经验和社会经验是鸟决策需要的信息
迭代
- 决策信息指导下一步飞行→总有鸟更靠近食物→更新信息指导再下一步飞行
- 如此正反馈,整个鸟群始终在不断靠近食物
用其对比于粒子群
鸟群觅食 | 粒子群算法 |
森林 | 解空间 |
鸟的当前位置 | 可行解 |
食物量 | 函数值(适应度) |
食物最多的位置 | 最优解 |
更新鸟群位置 | 更新可行解 |
二、适用赛题
多目标优化问题
- 充电站布局优化(美赛)、系泊系统的设计(国赛)、背包问题
- 当目标函数复杂、变量多(维度高),传统求解方法速度很慢
- 粒子群算法的最大优点:快!(尤其是高维度且目标函数复杂的优化问题)
寻优问题
- 复杂函数寻优、神经网络训练、模式分类、模糊系统控制、TSP问题等
- 直接求解,或为这些问题的模型提供初始值或参数优化
算法优缺点
- 优点:收敛快,简单易实现,几乎任何寻优问题都能用其求解
- 缺点:局部搜索能力较差,搜索精度不够高(如何改进?)
三、模型流程
四、流程分析
这里以一个例题贯穿分析:寻优:非线性方程求解
传统方法的局限性
- 物理学和现实中的数学模型常常归结为求解非线性方程
- 传统Newton法等计算量大,经常求导困难,且收敛性与结果很受与初始值的影响
- 避开传统数学方法,启发式算法可以“遍地撒网,重点捞鱼”
二维复杂函数
- Schaffer函数形式简单但具有很强的复杂性
- 有着无数个极小值点,且强烈震荡
- x1,x2 ∈ [-10, 10]
1.参数初始化
本题显而易见有两个变量x1和x2,空间维度是2。
初始位置和位移是随机的,或作为参数输入
2.变量初始化
①适应度
适应度就是模型的目标函数值
初始时将上一步初始化好的位置带入得到每一个粒子的适应度(函数值)
②最优解
- 最优解对应适应度的最大还是最小值,取决于求解的问题
- 第i只鸟的个体最优解记作pbesti(p表示personal)
- 比较全部鸟的pbest,找出其中最佳的,记作全局最优解gbest(g表示global)
- pbesti:第i只鸟曾经去过的适应度最高的位置,初始时自然为初始值
- Yi:个体最优解对应的适应度
- gbest:每只鸟都有个体最优解,其中对应的适应度Yi最高的解设为全局最优解
- Y:全局最优解对应的适应度
- 适应度最高 = 函数值最优 = 最小化问题求得最小值/最大化问题求得最大值
3.更新粒子速度和位置
①速度
- :第k次迭代中第i只鸟的速度(位移)
- :第k-1次迭代中第i只鸟的当前位置
- :分别表示惯性、个体经验和社会经验的权重
- :第k次迭代前,第i只鸟记录的个体最优解
- :第k次迭代前,鸟群的全局最优解
- 除权重系数外,各量都是向量,本式的本质是向量加减
- 位移 = 速度 * 时间,算法中默认时间为1,因此位移 = 速度
公式分析
- C1 = 0时鸟是盲从的,不学习自身经验
- C2 = 0时鸟是自大的,不学习社会经验
- w偏大时,有利于全局搜索,但收敛性差
- w偏小时,有利于局部搜索,但运算更慢
理想情况
- 前期粒子较为分散,进行全局搜索避免过早收敛陷入局部最优,需要w偏大
- 后期粒子较为集中,进行局部搜索,求解更精确,需要w偏小
- 改进方法:权重线性递减、自适应权重、随机权重等
②位置
当前位置 + 位移量(时间默认为1,所以速度 = 位移)
4.更新粒子适应度
将新位置带入目标函数计算得适应度
5.更新最优解
和2类似,最优解对应适应值的最大还是最小值取决于求解的问题
- :和相比较,取最优
- :所有鸟的和相比较,取最优
6.迭代与终止
重复3到5,直到满足终止条件或最大迭代次数
输出最终解位置和对应的适应度
至此,求解完成