• 融合黄金正弦与sigmoid连续化的海鸥优化算法-附代码


    融合黄金正弦与sigmoid连续化的海鸥优化算法


    摘要:针对海鸥算法(SOA)在迭代寻优过程中容易陷入局部最优、收敛速度慢以及寻优精度低等缺陷,提出一种黄金正弦引导与Sigmoid连续化的海鸥优化算法(GSCSOA)。在海鸥迁徙阶段,使用Sigmoid函数作为非线性收敛因子引导海鸥搜寻过程,使得算法前期保持更强的全局寻优能力,后期更快收敛。在海鸥扑食阶段,引入禁忌搜索的思想,使得海鸥始终向着置信度更高的区域移动,并且在一次迭代中最优位置持续变化,从而提高寻优精度。之后使用黄金正弦机制指引种群位置跟新,缩小搜索范围,提高局部寻优能力。

    1.海鸥优化算法

    基础海鸥优化算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/107535864

    2. 改进海鸥优化算法

    2.1 Sigmoid 函数收敛因子

    P s ( x ) = A × Z + P b s ( x ) Z = ∣ P b s ( x ) + 2 × A × r d × ( P b s ( x ) − P b ( x ) ∣ × x × y × z (11) Ps(x)=A×Z+Pbs(x)Z=∣Pbs(x)+2×A×rd×(Pbs(x)Pb(x)×x×y×z\tag{11} Ps(x)=A×Z+Pbs(x)Z=∣Pbs(x)+2×A×rd×(Pbs(x)Pb(x)×x×y×z(11)

    式(11)由式(10)转换而来, 由式(11)可知:当收敛因子 A A A 的值较大时, 全局搜索能力强, 当 A A A 的值小时, 局部寻优能 力强。SOA算法使用线性惯性权重, A A A 的值随着迭代次数增 加从 2 线性下降至 0 。这种线性惯性权重虽然能在一定程度 上平衡全局搜索和局部搜索, 但是实际的搜索过程是一个极 为复杂的非线性过程, 线性权重会降低算法寻优的性能。
    本文提出的 GSCSOA 算法使用 Sigmoid 函数作为非线 性收敛因子 A f A_f Af, 替换原有的收敛因子 A ∘ A f A \circ A_f AAf 的表达式如式(14) 所示, 首先将 x x x 缩放到 ( − 5 , 5 ) , A f (-5,5), A_f (5,5),Af 从接近 2 的值非线性下降至 接近 0 的值, 改进后的位置更新由式(12)计算。
    P s ( x ) = A f × Z + P b s ( x ) ( 12 ) S ( x ) = 2 1 + e − x ( 13 ) A f ( x ) = f c × S ( − x − 1 2 M a x itea  Max ⁡ itea  × 10 ) = f c 1 + exp ⁡ ( x − 1 2 M a x itea  M itea  × 10 ) ( 14 ) Ps(x)=Af×Z+Pbs(x)(12)S(x)=21+ex(13)Af(x)=fc×S(x12Maxitea Maxitea ×10)=fc1+exp(x12Maxitea Mitea ×10)(14) Ps(x)=Af×Z+Pbs(x)S(x)=1+ex2Af(x)=fc×S(Maxitea x21Maxitea ×10)=1+exp(Mitea x21Maxitea ×10)fc(12)(13)(14)
    本文使用 Sigmoid 函数作为收敛因子,在前期保持种群较大的个体自由度,增强全局寻优能力。在后期的个体自由度迅速下降,局部寻优能力加强。相比于线性惯性权重,Sigmoid 函数作为非线性收敛因子来平滑过度迁徙和扑食过程,能更优地平衡全局搜索和局部搜索,使寻优过程变成非线性。因此这种改在进理论上可以提高种群寻优精度,同时加速寻优速度。

    2.2 全局最优更新连续化

    SOA 算法每次迭代中,对于种群更新后的位置全部接受,迭代完成后种群才进行全局最优查找。这样会存在两个缺点:一是种群多样性过早下降。由式(11)可知,SOA 算法更新后的种群分布以上次搜索的全局最优为中心,呈螺旋状形态。随着迭代次数的增加,种群越接近中心,个体多样性锐减。二是全局最优更新非连续。在一次迭代中,全局最优在每个搜索代理位置更新后都有可能产生,SOA 算法是在种群位置更新完成后才更新全局最优位置,这种更新会导致 P s (x)不连续。使的本次迭代与下一次迭代之间不连续,非连续化的更新使得最新产生的全局最优不能及时的用来指导后面的搜索,降低了算法的效率和收敛速度。

    GSCSOA 算法引入贪心策略(15)对每个搜索代理的位置 进行一次篮选, 引导种群向最优位置靠近。这一策略一方面 保留了较大适应度的搜索代理, 使得平均适应度较高, 由式 (1)知搜索代理自身的经验也在寻优中发挥作用, 因此有利于 提高算法整体的寻优性能。另一方面, 抛弃了本次迭代中的 一部分个体, 保留了历代搜索中的一部分较高适应度的个体, 使得每次迭代计算的搜索代理来自不同的搜索历史, 从而种 群的多样性得到丰富, 个体分布较为分散, 避免陷入局部收 敛, 解决了 SOA 遇到的第一个问题。
    为解决第二个问题, GSCSOA 在每个搜索代理位置更新后使用式(16)更新全局最优,在每次迭代中全局最优可以多 次变化。及时地使用最新全局最优来指导后面的更新, 避免 了无效的计算, 提升算法效率。这种机制使 P b s ( x ) P_{b s}(x) Pbs(x) 的更新相对 连续化, 每次迭代之间更加平滑地过度。
    P b s ( x + 1 ) = { P s ( x + 1 ) ,  if fit  ( P s ( x + 1 ) ) ≥ f i t ( P b   s ( x ) ) P b s ( x ) ,  else  (16) P_{\mathrm{bs}}(x+1)=\left\{Ps(x+1), if fit (Ps(x+1))fit(Pb s(x))Pbs(x), else \right. \tag{16} Pbs(x+1)={Ps(x+1), if fit (Ps(x+1))fit(Pb s(x))Pbs(x), else (16)

    2.3 黄金正弦指引机制

    在 GSCSOA 算法中, 通过融合搜索代理自身的历史经验 和种群的全局最优经验对搜索代理的位置进行二次更新, 如 式(17)所示。
    P s ( x ) = x i t ∗ ∣ sin ⁡ ( r 1 ) ∣ + r 2 ∗ sin ⁡ ( r 1 ) ∗ ∣ θ 1 ∗ P b s ( x ) − θ 2 ∗ P s ( x − 1 ) ∣ (17) Ps(x)=xti|sin(r1)|+r2sin(r1)|θ1Pbs(x)θ2Ps(x1)|\tag{17} Ps(x)=xitsin(r1)+r2sin(r1)θ1Pbs(x)θ2Ps(x1)(17)
    其中, r 1 r_1 r1 ( 0 , 2 Π ) (0,2 \Pi) (0,) 中的一个随机数, r 2 r_2 r2 ( 0 , Π ) (0, \Pi) (0,Π) 中的一个随机 数。 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2 是黄金正弦系数, 由式(18)获得, τ \tau τ 是黄金分割比 例, a 、 b a 、 b ab 是参数, 初始值分别为 Π \Pi Π Π \Pi Π, 通过黄金分割算法 [15]更新。
    θ 1 = a ∗ ( 1 − τ ) + b ∗ τ , θ 2 = a ∗ τ + b ∗ ( 1 − τ ) ( 18 ) τ = 1 − 5 2 = 0.618033.. ( 19 ) θ1=a(1τ)+bτ,θ2=aτ+b(1τ)(18)τ=152=0.618033..(19) θ1=a(1τ)+bτ,θ2=aτ+b(1τ)τ=215 =0.618033..(18)(19)
    黄金正弦指引机制通划分种群范围得到最佳搜索区域, 将其用于指导搜索代理的寻优过程, 使得 GSCSOA 算法在两 个方面有较大改善。一是海鸥的迁徙和和扑食操作都在最优 范围内进行, 搜索代理更容易寻找到全局最优位置, 从而提 高种群搜索精度。二是搜索范围以黄金比例缩小, 种群迅速 最佳区域靠近, 从而提高收玫速度。

    结合以上改进方法, 本文改进的海鸥算法伪代码如下:
    算法 1 G S C S O A 1 \mathrm{GSCSOA} 1GSCSOA
    输入:海鸥种群 P s ( s = 1 , 2 … N ) P_s(s=1,2 \ldots N) Ps(s=1,2N)
    输出:全局最优 P b s P_{b s} Pbs
    初始化算法超参数 f c f c fc, 根据种群规模 N N N, 最大迭代次数 T max  T_{\text {max }} Tmax , 搜索空
    间维度 d d d 初始化种群;
    计算种群每个搜索代理的适应度, 寻找种群最优位置 P b s ( x ) P_{b s}(x) Pbs(x);
    While ( t < T max ⁡ ) / / T max ⁡ \left(t(t<Tmax)//Tmax 为最大迭代次数
    For in range ( N ) / / N (N) \quad / / N (N)//N 为搜索代理数量
    使用式 (14) 计算 Sigmoid 收敛因子 A f A_f Af, 并使用式 (12)更新搜索 代理 s s s 的位置 P s ( x ) P_s(x) Ps(x);
    使用式 (15)(16)更新搜索代理 s s s 的位置 P s ( x ) P_s(x) Ps(x) 和全局最优位置 P b s ( x ) P_{b s}(x) Pbs(x);
    End for
    For in range ( N ) (N) (N)
    按式 (17)对所有搜索代理进行位置二次更新; ///黄金正弦引导
    End for
    End while
    输出全局最优 P b s ( x ) P_{b s}(x) Pbs(x);

    3.实验结果

    请添加图片描述

    4.参考文献

    [1]王宁,何庆.融合黄金正弦与sigmoid连续化的海鸥优化算法[J/OL].计算机应用研究:1-8[2021-08-06].https://doi.org/10.19734/j.issn.1001-3695.2021.05.0176.

    5.Matlab代码

    6.Python代码

  • 相关阅读:
    从android源码分析activity的启动流程【三】
    【vscode】Window11环境下vscode使用Fira Code字体【教程】
    PCL RANSAC分割提取多个空间圆
    【ROS2原理9】 QoS - 截止日期、活跃度和寿命
    【正点原子 linux 驱动编程】
    对reduce理解,以及几种常见的应用场景
    A*算法和Dijkstra
    [shell] 判断字符串是否包含子字符串方法([[ 、=~、##、%%)
    【新版】系统架构设计师 - 软件架构设计<新版>
    破解事务性工作瓶颈,君子签电子合同释放HR“源动力”!
  • 原文地址:https://blog.csdn.net/u011835903/article/details/126943126