一种加权变异的粒子群算法
文章目录
- 一种加权变异的粒子群算法
- 1.粒子群优化算法
- 2. 改进粒子群算法
- 2.1 自适应权重和自适应学习因子
- 2.2 加权变异
- 2.3 高斯扰动
- 3.实验结果
- 4.参考文献
- 5.Matlab代码
- 6.Python代码
摘要:针对粒子群算法易于陷入早熟、收敛速度慢及收敛精度低的问题,提出了加权变异的WVPSO(Weighted Variation Particle Swarm Optimization)粒子群算法。根据自适应惯性权重和自适应学习因子,平衡了全局搜索和局部搜索能力;基于算术交叉的变异和自然选择机制的替换策略,增加了粒子的多样性,提高了算法的收敛精度;最后加入高斯扰动,使粒子产生震荡,更容易跳出局部最优。
1.粒子群优化算法
基础粒子群算法的具体原理参考网络资料
2. 改进粒子群算法
2.1 自适应权重和自适应学习因子
在 PSO 算法迭代的过程中, 权重在算法迭代前期需要让粒子的步长变化更快, 从而让粒子尽可能早地 达到全局最优值所在的区域, 而在算法迭代后期则应该减少步长的变化, 让粒子在该区域内作精准的搜索使 之找到全局最优解。对于学习因子, 在算法迭代前期应该自我学习率占比高, 群体学习率占比低; 随着迭代 不断进行, 自我学习比率要逐步降低, 而群体学习比率则逐渐提高。这样既可以加快算法的收玫速度, 又可 以提高算法的收敛精度。基于上述思想, 本文提出了一种自适应权重和自适应学习因子的方法:
式 (3) (5) 中, it 和 MaxIt 分别为算法当前的迭代次数和最大的迭代次数; rand 为 之间的随机数; 为自我学习因子的上下界; 为群体学习因子的上下界。式 (3) 中, 权重
2.2 加权变异
由于标准 PSO 算法收敛速度比较慢、迭代后期种群多样性降低, 使得算法最后难以搜索到全局最优值。 对此, 本文加入算术交叉和自然选择策略来提高粒子多样性、增强收玫速度与精度。对于变异粒子的比例, 通过以下方式选择:
将所有粒子适应值的绝对值从小到大按照式 (6) 方式排列, 并按照式(7) 进行分割, 式(7) 如下:
将式 (6) 中的适应值分成 四个部分, 由于粒子群算法存在的随机性, 因此将粒子的适应值分 为好 与不好 两个群体。其中 各占总体的 各占总体的 。这里使用交叉 操作作用于 , 融合好粒子与差粒子, 不仅能够产生具有多样性的后代, 而且促使差粒子向好粒子移动; 使用自然选择作用于 , 直接将差粒子 的速度与位置直接替换为好粒子 的速度与位置, 类似于将整 个种群缩小 , 从而大大加快粒子的收敛速度。具体策略如下:
(1)算术交叉: 根据文献 [11] 的交叉公式, 本文改进算术交叉公式如下所示:
为式 (7) 中 处的粒子位置; 为式 (7) 中 处的粒子速度; rand 为 之间的随机数。
(2)自然选择: 通过选择好的粒子来替换差的粒子, 增加粒子的收敛速度, 具体方式如下:
为式 (7) 中 处的粒子位置; 为式 (7) 中
2.3 高斯扰动
随着算法的迭代,当全局最优值所在的区域远离当前种群的最优值时,粒子容易向错误的方向学习,此时粒子将极易陷入早熟。为了让算法跳出局部最优,在后期迭代时加入高斯扰动。如果当前适应值经过几次迭代后不再发生变化,则判断算法陷入早熟,这时加入高斯扰动,让粒子震荡,使其摆脱局部最优,因此在迭代初期加入高斯扰动策略。
WVPSO 算法流程如下所示:
Step1 随机初始化粒子的位置和速度, 设定相关参数;
Step2 根据式 (3) (5) 计算惯性权重 , 学习因子 和 ;
Step3 计算粒子群的适应值, 根据适应值的绝对值从小到大按照式 (6) 方式排列, 并使用式 (7) 分割;
Step4 使用算术交叉式 (8) (9) 和自然选择式 (10) 策略将分割后的粒子进行重新替换;
Step5 根据式 (1) (2) 更新粒子速度和位置, 更新每个粒子历史最优位置 pbest 和群体最优值 gbest。 判断是否陷入早熟,如果陷入早熟则加入高斯扰动;
Step6 若满足终止条件, 则输出最优值, 否则转入步骤 (2), 进入下一次寻优。
3.实验结果
4.参考文献
[1]徐灯,傅晶,王文丰,章香,韩龙哲,方宗华,董健华.一种加权变异的粒子群算法[J].南昌工程学院学报,2021,40(01):51-56+82.
5.Matlab代码
6.Python代码