一种加权变异的粒子群算法


文章目录

  • 一种加权变异的粒子群算法
  • 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 算法迭代的过程中, 权重在算法迭代前期需要让粒子的步长变化更快, 从而让粒子尽可能早地 达到全局最优值所在的区域, 而在算法迭代后期则应该减少步长的变化, 让粒子在该区域内作精准的搜索使 之找到全局最优解。对于学习因子, 在算法迭代前期应该自我学习率占比高, 群体学习率占比低; 随着迭代 不断进行, 自我学习比率要逐步降低, 而群体学习比率则逐渐提高。这样既可以加快算法的收玫速度, 又可 以提高算法的收敛精度。基于上述思想, 本文提出了一种自适应权重和自适应学习因子的方法:
一种加权变异的粒子群算法-附代码_人工智能

一种加权变异的粒子群算法-附代码_迭代_02

一种加权变异的粒子群算法-附代码_机器学习_03
式 (3) (5) 中, it 和 MaxIt 分别为算法当前的迭代次数和最大的迭代次数; rand 为 一种加权变异的粒子群算法-附代码_人工智能_04 之间的随机数; 一种加权变异的粒子群算法-附代码_机器学习_05 为自我学习因子的上下界; 一种加权变异的粒子群算法-附代码_迭代_06 为群体学习因子的上下界。式 (3) 中, 权重 一种加权变异的粒子群算法-附代码_人工智能_07

2.2 加权变异

由于标准 PSO 算法收敛速度比较慢、迭代后期种群多样性降低, 使得算法最后难以搜索到全局最优值。 对此, 本文加入算术交叉和自然选择策略来提高粒子多样性、增强收玫速度与精度。对于变异粒子的比例, 通过以下方式选择:
一种加权变异的粒子群算法-附代码_迭代_08
将所有粒子适应值的绝对值从小到大按照式 (6) 方式排列, 并按照式(7) 进行分割, 式(7) 如下:
一种加权变异的粒子群算法-附代码_迭代_09
将式 (6) 中的适应值分成 一种加权变异的粒子群算法-附代码_算法_10 四个部分, 由于粒子群算法存在的随机性, 因此将粒子的适应值分 为好 一种加权变异的粒子群算法-附代码_迭代_11 与不好 一种加权变异的粒子群算法-附代码_机器学习_12 两个群体。其中 一种加权变异的粒子群算法-附代码_迭代_13 各占总体的 一种加权变异的粒子群算法-附代码_算法_14 各占总体的 一种加权变异的粒子群算法-附代码_Max_15 。这里使用交叉 操作作用于 一种加权变异的粒子群算法-附代码_算法_16, 融合好粒子与差粒子, 不仅能够产生具有多样性的后代, 而且促使差粒子向好粒子移动; 使用自然选择作用于 一种加权变异的粒子群算法-附代码_迭代_13, 直接将差粒子 一种加权变异的粒子群算法-附代码_算法_18 的速度与位置直接替换为好粒子 一种加权变异的粒子群算法-附代码_Max_19 的速度与位置, 类似于将整 个种群缩小 一种加权变异的粒子群算法-附代码_机器学习_20, 从而大大加快粒子的收敛速度。具体策略如下:
(1)算术交叉: 根据文献 [11] 的交叉公式, 本文改进算术交叉公式如下所示:
一种加权变异的粒子群算法-附代码_算法_21

一种加权变异的粒子群算法-附代码_迭代_22
一种加权变异的粒子群算法-附代码_迭代_23 为式 (7) 中 一种加权变异的粒子群算法-附代码_算法_16 处的粒子位置; 一种加权变异的粒子群算法-附代码_Max_25 为式 (7) 中 一种加权变异的粒子群算法-附代码_算法_16 处的粒子速度; rand 为 一种加权变异的粒子群算法-附代码_人工智能_04 之间的随机数。
(2)自然选择: 通过选择好的粒子来替换差的粒子, 增加粒子的收敛速度, 具体方式如下:
一种加权变异的粒子群算法-附代码_机器学习_28
一种加权变异的粒子群算法-附代码_算法_29 为式 (7) 中 一种加权变异的粒子群算法-附代码_迭代_13 处的粒子位置; 一种加权变异的粒子群算法-附代码_Max_31 为式 (7) 中 一种加权变异的粒子群算法-附代码_迭代_13

2.3 高斯扰动

随着算法的迭代,当全局最优值所在的区域远离当前种群的最优值时,粒子容易向错误的方向学习,此时粒子将极易陷入早熟。为了让算法跳出局部最优,在后期迭代时加入高斯扰动。如果当前适应值经过几次迭代后不再发生变化,则判断算法陷入早熟,这时加入高斯扰动,让粒子震荡,使其摆脱局部最优,因此在迭代初期加入高斯扰动策略。

WVPSO 算法流程如下所示:
Step1 随机初始化粒子的位置和速度, 设定相关参数;
Step2 根据式 (3) (5) 计算惯性权重 一种加权变异的粒子群算法-附代码_人工智能_07, 学习因子 一种加权变异的粒子群算法-附代码_机器学习_34一种加权变异的粒子群算法-附代码_Max_35;
Step3 计算粒子群的适应值, 根据适应值的绝对值从小到大按照式 (6) 方式排列, 并使用式 (7) 分割;
Step4 使用算术交叉式 (8) (9) 和自然选择式 (10) 策略将分割后的粒子进行重新替换;
Step5 根据式 (1) (2) 更新粒子速度和位置, 更新每个粒子历史最优位置 pbest 和群体最优值 gbest。 判断是否陷入早熟,如果陷入早熟则加入高斯扰动;
Step6 若满足终止条件, 则输出最优值, 否则转入步骤 (2), 进入下一次寻优。

3.实验结果

一种加权变异的粒子群算法-附代码_迭代_36

4.参考文献

[1]徐灯,傅晶,王文丰,章香,韩龙哲,方宗华,董健华.一种加权变异的粒子群算法[J].南昌工程学院学报,2021,40(01):51-56+82.

5.Matlab代码

6.Python代码