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


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


    摘要:针对粒子群算法易于陷入早熟、收敛速度慢及收敛精度低的问题,提出了加权变异的WVPSO(Weighted Variation Particle Swarm Optimization)粒子群算法。根据自适应惯性权重和自适应学习因子,平衡了全局搜索和局部搜索能力;基于算术交叉的变异和自然选择机制的替换策略,增加了粒子的多样性,提高了算法的收敛精度;最后加入高斯扰动,使粒子产生震荡,更容易跳出局部最优。

    1.粒子群优化算法

    基础粒子群算法的具体原理参考网络资料

    2. 改进粒子群算法

    2.1 自适应权重和自适应学习因子

    在 PSO 算法迭代的过程中, 权重在算法迭代前期需要让粒子的步长变化更快, 从而让粒子尽可能早地 达到全局最优值所在的区域, 而在算法迭代后期则应该减少步长的变化, 让粒子在该区域内作精准的搜索使 之找到全局最优解。对于学习因子, 在算法迭代前期应该自我学习率占比高, 群体学习率占比低; 随着迭代 不断进行, 自我学习比率要逐步降低, 而群体学习比率则逐渐提高。这样既可以加快算法的收玫速度, 又可 以提高算法的收敛精度。基于上述思想, 本文提出了一种自适应权重和自适应学习因子的方法:
    w = 0.8 × exp ⁡ ( − 2.5 i t Max ⁡ I t ) (3) w=0.8 \times \exp \left(\frac{-2.5 i t}{\operatorname{Max} I t}\right) \tag{3} w=0.8×exp(MaxIt2.5it)(3)

    c 1 = c 1up  − rand ⁡ × ( 1 − exp ⁡ ( − Max ⁡ I t Max ⁡ I t − i t ) ) × ( c uup  − c 11  ow  ) (4) c_{1}=c_{\text {1up }}-\operatorname{rand} \times\left(1-\exp \left(\frac{-\operatorname{Max} I t}{\operatorname{Max} I t-i t}\right)\right) \times\left(c_{\text {uup }}-c_{11 \text { ow }}\right) \tag{4} c1=c1up rand×(1exp(MaxItitMaxIt))×(cuup c11 ow )(4)

    c 2 = c 210 w + rand ⁡ × ( 1 − exp ⁡ ( − Max ⁡ I t Max ⁡ I t − i t ) ) × ( c 2  up  − c 21  ow  ) , (5)

    c2=c210w+rand×(1exp(MaxItMaxItit))×(c2 up c21 ow )," role="presentation" style="position: relative;">c2=c210w+rand×(1exp(MaxItMaxItit))×(c2 up c21 ow ),
    \tag{5} c2=c210w+rand×(1exp(MaxItitMaxIt))×(c2 up c21 ow ),(5)
    式 (3) (5) 中, it 和 MaxIt 分别为算法当前的迭代次数和最大的迭代次数; rand 为 0 ∼ 1 0 \sim 1 01 之间的随机数; c 1  lup  , c 11  ov  c_{1 \text { lup }}, c_{11 \text { ov }} c1 lup ,c11 ov  为自我学习因子的上下界; c 2  uup  , c 21  ow  c_{2 \text { uup }}, c_{21 \text { ow }} c2 uup ,c21 ow  为群体学习因子的上下界。式 (3) 中, 权重 w w w 在算法迭代前期尽可能取最大值,从而使算法步长得到更快的变化;随着算法的不断迭代,权重则逐渐减小,以满足算法的自适应权重需求;式(4)在算法进行的过程中是一个递减的函数,式(5)则是一个递增的函数,符合自适应学习因子的思想要求。

    2.2 加权变异

    由于标准 PSO 算法收敛速度比较慢、迭代后期种群多样性降低, 使得算法最后难以搜索到全局最优值。 对此, 本文加入算术交叉和自然选择策略来提高粒子多样性、增强收玫速度与精度。对于变异粒子的比例, 通过以下方式选择:
     [  ∣ P 1 ∣ , ∣ P 2 ∣ , ⋯   , ∣ P N ∣ ] (6) \text { [ } \left.\left|P_{1}\right|,\left|P_{2}\right|, \cdots,\left|P_{N}\right|\right] \tag{6}  [ P1,P2,,PN](6)
    将所有粒子适应值的绝对值从小到大按照式 (6) 方式排列, 并按照式(7) 进行分割, 式(7) 如下:
    [ ∣ P 1 ∣ , ∣ P 2 ∣ , ⋯   , ∣ P N 5 ∣ , ∣ P N 5 + 1 ∣ , ⋯   , ∣ P N 2 ∣ , ∣ P N 2 + 1 ∣ , ⋯   , ∣ P 4 N 5 ∣ , ⋯   , ∣ P N ∣ ] . \left[\left|P_{1}\right|,\left|P_{2}\right|, \cdots,\left|P_{\frac{N}{5}}\right|,\left|P_{\frac{N}{5}+1}\right|, \cdots,\left|P_{\frac{N}{2}}\right|,\left|P_{\frac{N}{2}+1}\right|, \cdots,\left|P_{\frac{4 N}{5}}\right|, \cdots,\left|P_{N}\right|\right] . [P1,P2,, P5N , P5N+1 ,, P2N , P2N+1 ,, P54N ,,PN].
    将式 (6) 中的适应值分成 ξ 1 , ξ 2 , ξ 3 , ξ 4 \xi_{1}, \xi_{2}, \xi_{3}, \xi_{4} ξ1,ξ2,ξ3,ξ4 四个部分, 由于粒子群算法存在的随机性, 因此将粒子的适应值分 为好 ( ξ 1 , ξ 2 ) \left(\xi_{1}, \xi_{2}\right) (ξ1,ξ2) 与不好 ( ξ 3 , ξ 4 ) \left(\xi_{3}, \xi_{4}\right) (ξ3,ξ4) 两个群体。其中 ξ 1 , ξ 4 \xi_{1}, \xi_{4} ξ1,ξ4 各占总体的 20 % ; ξ 2 , ξ 3 20 \% ; \xi_{2}, \xi_{3} 20%;ξ2,ξ3 各占总体的 30 % 30 \% 30% 。这里使用交叉 操作作用于 ξ 2 , ξ 3 \xi_{2}, \xi_{3} ξ2,ξ3, 融合好粒子与差粒子, 不仅能够产生具有多样性的后代, 而且促使差粒子向好粒子移动; 使用自然选择作用于 ξ 1 , ξ 4 \xi_{1}, \xi_{4} ξ1,ξ4, 直接将差粒子 ξ 4 \xi_{4} ξ4 的速度与位置直接替换为好粒子 ξ 1 \xi_{1} ξ1 的速度与位置, 类似于将整 个种群缩小 20 % 20 \% 20%, 从而大大加快粒子的收敛速度。具体策略如下:
    (1)算术交叉: 根据文献 [11] 的交叉公式, 本文改进算术交叉公式如下所示:
    x ξ 3 =  rand  × x ξ 2 + ( 1 −  rand  ) × x ξ 3 (8) x_{\xi_{3}} =\text { rand } \times x_{\xi_{2}}+(1-\text { rand }) \times x_{\xi_{3}} \tag{8} xξ3= rand ×xξ2+(1 rand )×xξ3(8)

    v ξ 3 =  rand  × v ξ 2 + ( 1 −  rand  ) × v ξ 3 . (9)

    vξ3= rand ×vξ2+(1 rand )×vξ3." role="presentation" style="position: relative;">vξ3= rand ×vξ2+(1 rand )×vξ3.
    \tag{9} vξ3= rand ×vξ2+(1 rand )×vξ3.(9)
    x ξ 2 , x ξ 3 x_{\xi 2}, x_{\xi 3} xξ2,xξ3 为式 (7) 中 ξ 2 , ξ 3 \xi_{2}, \xi_{3} ξ2,ξ3 处的粒子位置; v ξ 2 , v ξ 3 v_{\xi 2}, v_{\xi 3} vξ2,vξ3 为式 (7) 中 ξ 2 , ξ 3 \xi_{2}, \xi_{3} ξ2,ξ3 处的粒子速度; rand 为 0 ∼ 1 0 \sim 1 01 之间的随机数。
    (2)自然选择: 通过选择好的粒子来替换差的粒子, 增加粒子的收敛速度, 具体方式如下:
    { x ξ 4 = x ξ 1 v ξ 4 = v ξ 1 . , (10) \left\{
    xξ4=xξ1vξ4=vξ1." role="presentation" style="position: relative;">xξ4=xξ1vξ4=vξ1.
    ,\right. \tag{10}
    {xξ4=xξ1vξ4=vξ1.,(10)

    x ξ 1 , x ξ 4 x_{\xi 1}, x_{\xi^{4}} xξ1,xξ4 为式 (7) 中 ξ 1 , ξ 4 \xi_{1}, \xi_{4} ξ1,ξ4 处的粒子位置; v ξ 1 , v ξ 4 v_{\xi 1}, v_{\xi 4} vξ1,vξ4 为式 (7) 中 ξ 1 , ξ 4 \xi_{1}, \xi_{4} ξ1,ξ4 处的粒子速度。

    2.3 高斯扰动

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

    WVPSO 算法流程如下所示:
    Step1 随机初始化粒子的位置和速度, 设定相关参数;
    Step2 根据式 (3) (5) 计算惯性权重 w w w, 学习因子 c 1 c_{1} c1 c 2 c_{2} c2;
    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代码

  • 相关阅读:
    国产软件Bigemap与国产在线地图源<星图地球数据云>推动国内新GIS应用
    Ts interface 和 type 的区别?
    创新工具 | 如何以3×3增长模型矩阵驱动产品规模化增长
    Hadoop(五)C#操作Hive
    Docker 安装Oracle 11g免费版—无坑小白白版(值得拥有)
    Python-爬虫(Scrapy爬虫框架,爬取豆瓣读书和评分)
    每日一题·AC
    Tomcat,jdk下载配置(发布项目)
    C-内存函数(大量图解,函数实现)
    两大产品上线“粤复用”,赋能大数据智能行业发展
  • 原文地址:https://blog.csdn.net/u011835903/article/details/126676840