融合多向学习的混沌麻雀搜索算法(MSSA)-附代码

融合多向学习的混沌麻雀搜索算法(MSSA)


摘要:对于原始麻雀搜索算法(SSA)在迭代过程中表现出的种群多样性减小,易陷入局部最优等问题,提出一种融合多向学习的混沌麻雀搜索算法(MSSA)。利用Hénon混沌映射初始化种群,增加麻雀种群的多样性,扩大可行解的搜索范围,为全局寻优奠定基础;采用多向学习策略增加麻雀跟随者探索未知领域的机会,平衡算法的局部开发性能和全局搜索能力;当算法陷入局部最优时,引用遗传算法中的变异策略依据动态的变异概率对当前最优个体进行扰动变异;

1.麻雀优化算法

基础麻雀算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/108830958

2. 改进麻雀算法

2.1 Hénon混沌映射策略

因此采用 Hénon 混沌映射对 SSA 算法进行种群初 始化,数学表达式为:
{ y 1 ( t ) = 1 − a ( y 1 ( t − 1 ) ) 2 + y 2 ( t − 1 ) y 2 ( t ) = b y 1 ( t ) (4) \left\{\begin{array}{l} y_1(t)=1-a\left(y_1(t-1)\right)^2+y_2(t-1) \\ y_2(t)=b y_1(t) \end{array}\right.\tag{4} { y1(t)=1a(y1(t1))2+y2(t1)y2(t)=by1(t)(4)
其中, t t t 代表混沌迭代次数。 a = 1.4 , b = 0.3 a=1.4, b=0.3 a=1.4,b=0.3 y 1 ( t ) y_1(t) y1(t) y 2 ( t ) y_2(t) y2(t) 表现出混沌特性, 初始值的微小变化, 会导致后面 混沌序列的很大不同, 使得该混沌序列可以不重复地遍 历整个搜索空间。
z ( t ) = abs ⁡ ( ω y 1 ( t ) ) , i = 1 , 2 , ⋯   , n (5) z(t)=\operatorname{abs}\left(\omega y_1(t)\right), i=1,2, \cdots, n \tag{5} z(t)=abs(ωy1(t)),i=1,2,,n(5)
本文利用 Hénon 混沌序列 y 1 ( t ) y_1(t) y1(t), 根据公式 (5) 将它 从范围 [ − 1.28 , 1.27 ] [-1.28,1.27] [1.28,1.27] 规范到 [ 0 , 1 ] [0,1] [0,1] 内。
x i t = l b i + z ( t ) ( u b i − l b i ) (6) x_i^t=l b_i+z(t)\left(u b_i-l b_i\right) \tag{6} xit=lbi+z(t)(ubilbi)(6)
最后通过公式 (6) 得到初始麻雀的位置,其中 u b i u b_i ubi l b i l b_i lbi 分别是对应解空间中的上、下界。

2.2 多向学习策略

S S A \mathrm{SSA} SSA 算法中, 跟随者每次只选择一个比自身适应度 值高的发现者进行学习, 这种随机学习虽有利于算法在 搜索空间中进行探索, 但种群的多样性骤降, 致使算法 陷入局部极值区的可能性偏大, 最终造成算法寻优能力 的匽乏。为解决这一问题, 对跟随者采用多向学习策略。 如在搜索空间同一维度下存在四个解, 其中 b b b 为局部最优解, p p p 为全局最优解, a 、 c a 、 c ac 为异于 p p p点的随机解。可以看出无论麻雀向 a , b 、 c a, b 、 c a,bc 点移动都无 法到达 p p p 点位置寻得最优解。为了让处于劣势的麻雀 个体拥有更多的机会探测到搜索空间中种群末探测到 的区域, 利用多向学习策略改进的跟随者位置更新公式 如下:
X i , j t + 1 = { Q ⋅ exp ⁡ ( X worst  − X i , j t i 2 ) , i > n / 2 τ a ⋅ X a , j t + τ b ⋅ X b , j t + τ c ⋅ X c , j t τ a + τ b + τ c ,  otherwise  (7) X_{i, j}^{t+1}=\left\{\begin{array}{l} Q \cdot \exp \left(\frac{X_{\text {worst }}-X_{i, j}^t}{i^2}\right), i>n / 2 \\ \frac{\tau_a \cdot X_{a, j}^t+\tau_b \cdot X_{b, j}^t+\tau_c \cdot X_{c, j}^t}{\tau_a+\tau_b+\tau_c}, \text { otherwise } \end{array}\right.\tag{7} Xi,jt+1= Qexp(i2Xworst Xi,jt),i>n/2τa+τb+τcτaXa,jt+τbXb,jt+τcXc,jt, otherwise (7)
其中, τ a 、 τ b 、 τ c \tau_a 、 \tau_b 、 \tau_c τaτbτc 分别表示 a 、 b 、 c a 、 b 、 c abc 点麻雀个体所占权重, 具体表达式为:
{ τ a = f a + f b + f c f a τ b = f a + f b + f c f b τ c = f a + f b + f c f c (8) \left\{\begin{array}{l} \tau_a=\frac{f_a+f_b+f_c}{f_a} \\ \tau_b=\frac{f_a+f_b+f_c}{f_b} \\ \tau_c=\frac{f_a+f_b+f_c}{f_c} \end{array}\right. \tag{8} τa=fafa+fb+fcτb=fbfa+fb+fcτc=fcfa+fb+fc(8)
其中, f a 、 f b 、 f c f_a 、 f_b 、 f_c fafbfc 分别表示位于 a 、 b 、 c a 、 b 、 c abc 点麻雀的适应度 值, 根据适应度值计算分配给三只麻雀的权重, 从而使 得适应度值更优的麻雀占有更大的比重, 适应度值较差 的麻雀所占比重更小。此时的跟随者综合考虑其他三 只麻雀的位置信息, 以更大的概率探测到当前搜索空间 中末探测到的区域,进一步提高种群对搜索空间的勘探 能力。

2.3 遗传算子变异操作

SSA 算法的迭代过程是不断向最优个体的靠笼过 程, 若当前最优个体为局部最优个体, 则 SSA 算法极容 易出现局部最优停滞的情况。为避免这一情形的发生, 在 MSSA 算法中引入遗传算法中的变异算子对麻雀种 群中的最优个体进行变异操作, 提升全局的搜索能力。 在遗传算法中依据变异概率对局部最优个体进行变异 操作。由于变异概率越小,算法收玫的速度越慢,而一 味地加大变异概率存在盲目性, 将丧失变异策略的优 势。为避免算法搜索时间过长, 并突出变异算子的有效 性, 采用变异概率自适应化使得变异概率 P m P_{\mathrm{m}} Pm 随迭代次 数的增加而增大, 有助于麻雀个体在迭代后期免于被局 部最优所困,提高算法收敛精度。
P m = a + b ( c −  iter  max ⁡ − t  iter  max ⁡ ) θ (9) P_{\mathrm{m}}=a+b\left(c-\frac{\text { iter }_{\max }-t}{\text { iter }_{\max }}\right)^\theta \tag{9} Pm=a+b(c iter max iter maxt)θ(9)
其中, a = 0.03 , b = 0.5 , c = 1 , θ = 2 a=0.03, b=0.5, c=1, \theta=2 a=0.03,b=0.5,c=1,θ=2, 如图 3 所示变异概率在 迭代过程中呈非线性变化,并在迭代后期减缓变异概率 的增加, 遟免产生较大的震荡, 使种群趋于收玫。
对于局部最优个体 X i ( x 1 , x 2 , ⋯   , x d ) X_i\left(x_1, x_2, \cdots, x_d\right) Xi(x1,x2,,xd) 随机产生一个 p ∈ [ 0 , 1 ] p \in[0,1] p[0,1],若 p < P m p<P_{\mathrm{m}} p<Pm 对该个体进行变异。
X i ′ = { X i + ω i , i = 1 , 2 , ⋯   , n , p < P m X i , p ⩾ P m (10) X_i{ }^{\prime}=\left\{\begin{array}{l} X_i+\omega_i, i=1,2, \cdots, n, p<P_{\mathrm{m}} \\ X_i, p \geqslant P_{\mathrm{m}} \end{array}\right. \tag{10} Xi={ Xi+ωi,i=1,2,,n,p<PmXi,pPm(10)
其中, ω i \omega_i ωi 是区间 [ l b − X i , u b − X i ] \left[l b-X_i, u b-X_i\right] [lbXi,ubXi] 上均匀分布的随机数, 这样保证了变异后的个体仍在搜索空间内。

3.实验结果

在这里插入图片描述

4.参考文献

[1]柴岩,孙笑笑,任生.融合多向学习的混沌麻雀搜索算法[J].计算机工程与应用,2023,59(06):81-91.

5.Matlab代码

6.Python代码

猜你喜欢

转载自blog.csdn.net/u011835903/article/details/129826115