Snake Optimizer(SO)是一种优化效果良好的新颖算法,但由于自然规律的限制,在探索和开发阶段参数更多是固定值,因此SO算法很快陷入局部优化并慢慢收敛。本文通过引入新颖的基于对立的学习策略和新的动态更新机制(参数动态更新策略、正弦余弦复合扰动因子、帐篷混沌&柯西突变)提出了一种增强型Snake Optimizer(ESO)以实现更好的性能。于2023年发表在中科院1区顶刊Expert Systems with Applications上,
2. 蛇优化器
Snake Optimizer (SO) 是一种受蛇类交配行为启发的优化算法,通过模拟蛇类的交配行为并构建相应的模型来解决优化问题。蛇类的交配过程主要受温度和食物数量的限制。当温度低且食物充足时,蛇可以交配。因此,在SO中,当食物不足时,蛇的主要任务是寻找食物,这被认为是优化算法的探索阶段。当食物充足时,它是优化算法的探索阶段。探索阶段分为两种情况。当温度高时,蛇不能交配,必须等待配偶的到来。当温度低时,蛇进入交配阶段。由于可能存在比雌性更多的雄性,交配阶段具有战斗模式和交配模式。雄性与雌性竞争以获得交配权。当交配行为完成时,雌性产卵并孵化成新蛇,从而完成种群更新。
每种优化方法都必须有一个初始种群。SO的初始种群由随机均匀分布生成,生成规则如下公式(1)所示:
S i = S min + rand i × ( S max − S min ) S_i = S_{\text{min}} + \text{rand}_i \times (S_{\text{max}} - S_{\text{min}}) Si=Smin+randi×(Smax−Smin)
其中, S i S_i Si表示第 i i i次迭代时种群个体的位置, rand d \text{rand}_d randd表示第 i i i次迭代时的随机值,介于(0, 1)之间, S max S_{\text{max}} Smax和 S min S_{\text{min}} Smin表示种群的最大和最小边界。
在获得初始种群后,根据性别分布开始计算雌性和雄性个体的数量。通常,雄性和雌性的数量相等。因此,雌性和雄性个体的数量可以通过公式(2)计算:
N m = N f = N all 2 N_m = N_f = \frac{N_{\text{all}}}{2} Nm=Nf=2Nall
其中 N all N_{\text{all}} Nall是总种群大小, N m N_m Nm和 N f N_f Nf分别表示雄性和雌性蛇的数量。
在SO中,温度和食物数量是影响蛇行为的两个关键因素,可以通过公式(3)和公式(4)定义:
Temp = e − t / T \text{Temp} = e^{-t/T} Temp=e−t/T
F Q = c 1 × e ( t − T ) / T FQ = c_1 \times e^{(t-T)/T} FQ=c1×e(t−T)/T
其中 t t t表示当前迭代次数, T T T表示总迭代次数, c 1 c_1 c1是一个固定常数0.5。
在探索阶段,当 F Q < 0.25 FQ < 0.25 FQ<0.25时,蛇随机寻找食物并更新位置。因此,公式(5)和公式(6)可以模拟探索阶段:
S i m ( t + 1 ) = S i m ( t ) ⊕ c 2 × e − f rand m / f i m × S i = { ( S i m ( t ) + c 2 × e − f rand m / f i m × S i ) ( S i m ( t ) − c 2 × e − f rand m / f i m × S i ) S_i^m(t + 1) = S_i^m(t) \oplus c_2 \times e^{-f_{\text{rand}}^m/f_i^m} \times S_i = \left\{ \begin{array}{ll} (S_i^m(t) + c_2 \times e^{-f_{\text{rand}}^m/f_i^m} \times S_i) \\ (S_i^m(t) - c_2 \times e^{-f_{\text{rand}}^m/f_i^m} \times S_i) \end{array} \right. Sim(t+1)=Sim(t)⊕c2×e−frandm/fim×Si={(Sim(t)+c2×e−frandm/fim×Si)(Sim(t)−c2×e−frandm/fim×Si)
S i f ( t + 1 ) = S i f ( t ) ⊕ c 2 × e − f rand f / f i f × S i = { ( S i f ( t ) + c 2 × e − f rand f / f i f × S i ) ( S i f ( t ) − c 2 × e − f rand f / f i f × S i ) S_i^f(t + 1) = S_i^f(t) \oplus c_2 \times e^{-f_{\text{rand}}^f/f_i^f} \times S_i = \left\{ \begin{array}{ll} (S_i^f(t) + c_2 \times e^{-f_{\text{rand}}^f/f_i^f} \times S_i) \\ (S_i^f(t) - c_2 \times e^{-f_{\text{rand}}^f/f_i^f} \times S_i) \end{array} \right. Sif(t+1)=Sif(t)⊕c2×e−frandf/fif×Si={(Sif(t)+c2×e−frandf/fif×Si)(Sif(t)−c2×e−frandf/fif×Si)
其中 S i m S_i^m Sim表示第 i i i次迭代时雄性蛇的位置, S i f S_i^f Sif表示第 i i i次迭代时雌性蛇的位置, f rand m f_{\text{rand}}^m frandm是第 i i i次迭代时雄性蛇的适应度, f i m f_i^m fim是第 i i i次迭代时雄性蛇的适应度, S i f S_i^f Sif表示第 i i i次迭代时雌性蛇的位置, f rand f f_{\text{rand}}^f frandf是第 i i i次迭代时雌性蛇的适应度, f i f f_i^f fif是第 i i i次迭代时雌性蛇的适应度, c 2 c_2 c2是一个固定常数0.05, ⊕ \oplus ⊕表示求和方向操作符。
在探索阶段,当 F Q > 0.25 FQ > 0.25 FQ>0.25且 Temp > 0.6 \text{Temp} > 0.6 Temp>0.6时,蛇只吃食物而不进行交配。该过程可以用公式(7)表示:
S i m ( t + 1 ) = { S food + c 3 × Temp × rand i × ( S food − S i m ( t ) ) S food − c 3 × Temp × rand i × ( S food − S i m ( t ) ) S_i^m(t + 1) = \left\{ \begin{array}{ll} S_{\text{food}} + c_3 \times \text{Temp} \times \text{rand}_i \times (S_{\text{food}} - S_i^m(t)) & \\ S_{\text{food}} - c_3 \times \text{Temp} \times \text{rand}_i \times (S_{\text{food}} - S_i^m(t)) \end{array} \right. Sim(t+1)={Sfood+c3×Temp×randi×(Sfood−Sim(t))Sfood−c3×Temp×randi×(Sfood−Sim(t))
其中 S i m , f S_i^{m,f} Sim,f是雄性或雌性个体的位置, S food S_{\text{food}} Sfood是最优个体的位置, c 3 c_3 c3是一个固定常数2。
当 F Q > 0.25 FQ > 0.25 FQ>0.25且 Temp ≤ 0.6 \text{Temp} \leq 0.6 Temp≤0.6时,蛇进入交配阶段,因为雄性和雌性个体都想与具有更高适应度的个体交配,因此雄性和雌性个体之间存在竞争。胜利者可以选择交配伙伴,因此交配模式由公式(8)和公式(9)表示:
S i m ( t + 1 ) = S i m ( t ) + c 3 × e − f best m / f i × rand i × ( F Q × S best m − S i m ( t ) ) S_i^m(t + 1) = S_i^m(t) + c_3 \times e^{-f_{\text{best}}^m/f_i} \times \text{rand}_i \times (FQ \times S_{\text{best}}^m - S_i^m(t)) Sim(t+1)=Sim(t)+c3×e−fbestm/fi×randi×(FQ×Sbestm−Sim(t))
S i f ( t + 1 ) = S i f ( t ) + c 3 × e − f best f / f i × rand i × ( F Q × S best f − S i f ( t ) ) S_i^f(t + 1) = S_i^f(t) + c_3 \times e^{-f_{\text{best}}^f/f_i} \times \text{rand}_i \times (FQ \times S_{\text{best}}^f - S_i^f(t)) Sif(t+1)=Sif(t)+c3×e−fbestf/fi×randi×(FQ×Sbestf−Sif(t))
其中 S i m S_i^m Sim表示第 i i i次迭代时雄性蛇的位置, S i f S_i^f Sif表示第 i i i次迭代时雌性蛇的位置, S best m S_{\text{best}}^m Sbestm表示雄性蛇中最优个体的位置, S best f S_{\text{best}}^f Sbestf表示雌性蛇中最优个体的位置, f best m f_{\text{best}}^m fbestm是雄性蛇中最优个体的适应度, f best f f_{\text{best}}^f fbestf是雌性蛇中最优个体的适应度, f i f_i fi是个体的适应度。
交配模式由公式(10)和公式(11)表示:
S i m ( t + 1 ) = S i m ( t ) + c 3 × e − m i f / f i m × rand i × ( F Q × S i f ( t ) − S i m ( t ) ) (10) S_i^m(t + 1) = S_i^m(t) + c_3 \times e^{-m_i^f/f_i^m} \times \text{rand}_i \times \left( FQ \times S_i^f(t) - S_i^m(t) \right) \tag{10} Sim(t+1)=Sim(t)+c3×e−mif/fim×randi×(FQ×Sif(t)−Sim(t))(10)
S i f ( t + 1 ) = S i f ( t ) + c 3 × e − m i m / f i f × rand i × ( F Q × S i m ( t ) − S i f ( t ) ) (11) S_i^f(t + 1) = S_i^f(t) + c_3 \times e^{-m_i^m/f_i^f} \times \text{rand}_i \times \left( FQ \times S_i^m(t) - S_i^f(t) \right) \tag{11} Sif(t+1)=Sif(t)+c3×e−mim/fif×randi×(FQ×Sim(t)−Sif(t))(11)
其中 S i m S_i^m Sim是雄性蛇中第 i i i个个体的位置, S i f S_i^f Sif是雌性蛇中第 i i i个个体的位置, m i m m_i^m mim表示交配模式中第 i i i个雄性个体的适应度, m i f m_i^f mif表示交配模式中第 i i i个雌性个体的适应度。
完成交配行为后,雌性蛇将产卵并孵化新蛇以获得新种群,dep^3表示替换原始种群中最差的雄性/雌性个体并替换为新蛇。替换过程由公式(12)和公式(13)表示:
rand i × ( S max − S min ) \text{rand}_i \times (S_{\text{max}} - S_{\text{min}}) randi×(Smax−Smin)
rand i × ( S max − S min ) \text{rand}_i \times (S_{\text{max}} - S_{\text{min}}) randi×(Smax−Smin)
其中 S worst m S_{\text{worst}}^m Sworstm表示雄性中最差的个体, S worst f S_{\text{worst}}^f Sworstf表示雌性中最差的个体。
3. 提出的ESO
作为一种启发式算法,SO算法在解决优化问题方面取得了良好的效果,但由于其新颖的模仿思想,生物行为的局限性使其仍然存在快速陷入局部最优和精度不足的缺点。本节提出了ESO算法,基于SO的不足提出了四种增强策略。
3.1 新颖的动态更新机制
在SO算法中,食物数量对于决定算法处于探索阶段还是开发阶段至关重要。在公式(4)中, c 1 c_1 c1的值被设置为固定常数0.5,这使得算法在探索阶段缺乏随机游走的能力,因此本文在原始基础上添加了扰动因子,以实现 c 1 c_1 c1的新动态更新。新的 c 1 n e w c_1^{new} c1new根据公式(14)计算:
c 1 n e w = c 1 + 1 10 × cos ( r 1 d × π 2 ) (14) c_1^{new} = c_1 + \frac{1}{10} \times \cos(r_1^d \times \frac{\pi}{2}) \tag{14} c1new=c1+101×cos(r1d×2π)(14)
其中 r 1 r_1 r1是介于(0, 1)之间的随机数。
在探索阶段,位置更新通过公式(5)和公式(6)计算,用于雄性和雌性蛇寻找食物。然而,在上述公式中, c 3 c_3 c3的固定值设置为0.05,这不利于更新蛇的位置,由于固定值设置,无法跳出局部最优,使算法快速陷入局部最优。在本文中,基于原始公式(5)和公式(6),添加扰动因子以获得 c 2 c_2 c2的新动态更新。新的 c 2 n e w c_2^{new} c2new根据公式(15)计算:
c 2 n e w = c 2 + 1 1000 × cos ( r 2 d × π 2 ) (15) c_2^{new} = c_2 + \frac{1}{1000} \times \cos(r_2^d \times \frac{\pi}{2}) \tag{15} c2new=c2+10001×cos(r2d×2π)(15)
其中 r 2 r_2 r2是介于(0, 1)之间的随机数。
在探索阶段,雄性和雌性蛇的位置通过公式(7)-(11)计算。然而,上述公式中 c 3 c_3 c3的值被设置为固定常数2。由于固定值设置,蛇的位置更新缓慢,降低了算法的收敛速度并增加了收敛时间。在本文中,基于原始公式,添加正弦因子以加速算法基于原始的收敛速度。新的动态更新 c 3 c_3 c3获得。新的 c 3 n e w c_3^{new} c3new根据公式(16)计算:
c 3 n e w = c 3 − 2 × sin ( t T ) 4 × π 2 (16) c_3^{new} = c_3 - 2 \times \sin \left( \frac{t}{T} \right)^4 \times \frac{\pi}{2} \tag{16} c3new=c3−2×sin(Tt)4×2π(16)
3.2 基于凸透镜成像的镜像成像策略
对立学习(Tizhoosh, 2005)是一种有效的优化策略,旨在通过计算当前位置的对立解来扩展搜索范围,从而找到更优的解。作为一种对立学习,透镜成像学习策略(Long et al., 2022)起源于凸透镜成像的光学定律,该定律通过凸透镜将物体从凸透镜的一侧反射到另一侧以获得更多凸透镜成像解。受凸透镜成像机制和镜像成像原理(Xu et al., 2014)的启发,本文提出了一种新的基于对立学习的策略,即镜像成像策略。该策略基于镜像成像原理获得新的对立解,从而扩展凸透镜成像的对立解范围,使优化过程更容易跳出局部最优。
基于凸透镜成像的镜像成像策略如图1所示。在二维空间中,解的搜索范围在x轴上是[LB, UB],在y轴上是[UB, LB],y轴的正半轴是凸透镜区域(蓝色)。y轴的负半轴是平面镜区域(黄色)。假设蛇的个体 ( s ) (s) (s)在原始镜像区域中,其投影 ( X ) (X) (X)在x轴和高度 ( X ′ ) (X') (X′)上。可以通过凸透镜获得蛇的个体 ( s ) (s) (s),其投影 ( X ′ ) (X') (X′)在x轴和高度 H ′ H' H′上,从该位置获得对立个体 ( s ∗ ) (s^*) (s∗),然后通过平面镜成像原理,对立个体 ( s ∗ ) (s^*) (s∗)被镜像以获得新的对立个体 ( s ∗ ∗ ) (s^{**}) (s∗∗),其中 ∣ X ∗ ∗ ∣ = ∣ X ∗ ∣ |X * *| = |X *| ∣X∗∗∣=∣X∗∣。最后,通过将 ( X ∗ ∗ ) (X^{**}) (X∗∗)和 H ′ H' H′的投影与原始个体 ( s ) (s) (s)的投影 ( X ) (X) (X)和高度 H H H结合,可以获得对立个体 ( s ∗ ∗ ) (s^{**}) (s∗∗)。
根据凸透镜成像原理,个体 ( s ) (s) (s)以坐标原点(O)为基点获得对立点 ( s ∗ ) (s^*) (s∗),点的坐标可以通过公式(17)计算:
X ∗ = ( U B + L B ) / 2 − X X ∗ − ( U B + L B ) / 2 = H H ∗ (17) X^* = \frac{(UB + LB)/2 - X}{X^* - (UB + LB)/2} = \frac{H}{H^*} \tag{17} X∗=X∗−(UB+LB)/2(UB+LB)/2−X=H∗H(17)
其中 U B UB UB是上限, L B LB LB是下限,令 δ = H H ∗ \delta = \frac{H}{H^*} δ=H∗H。
KaTeX parse error: \tag works only in display equations
在透镜成像中,不同透镜厚度的个体凸透镜成像投影点在x轴上获得。可以通过动态调整凸透镜的厚度(缩放因子 δ \delta δ)获得更多的凸透镜成像解。本文采用非线性动态缩放因子策略。在算法迭代的早期阶段,可以获得较大的值,使算法在不同维度空间中显著搜索并提高种群的多样性。在算法迭代的后期阶段,可以获得较小的值,并在最优个体附近执行精细搜索以提高局部搜索能力。非线性动态缩放因子通过公式(19)计算:
δ = δ max × [ ( δ max − δ min ) − 2 × ( t T ) 2 ] (19) \delta = \delta_{\text{max}} \times \left[ (\delta_{\text{max}} - \delta_{\text{min}}) - 2 \times \left( \frac{t}{T} \right)^2 \right] \tag{19} δ=δmax×[(δmax−δmin)−2×(Tt)2](19)
其中 δ max \delta_{\text{max}} δmax是最大缩放因子, δ min \delta_{\text{min}} δmin是最小缩放因子, T T T是最大迭代次数。这里 δ max = 10 \delta_{\text{max}} = 10 δmax=10, δ min = 9 \delta_{\text{min}} = 9 δmin=9。
将公式(18)扩展到k维空间得到表达式:
X k ∗ = U B k + L B k 2 + U B k + L B k − X k 2 δ (20) X_k^* = \frac{UB_k + LB_k}{2} + \frac{UB_k + LB_k - X_k}{2\delta} \tag{20} Xk∗=2UBk+LBk+2δUBk+LBk−Xk(20)
由于雄性和雌性蛇在蛇优化器中同样重要,因此基于凸透镜成像的镜像成像策略用于两个个体。
3.3 正弦-余弦复合扰动因子
在标准SO算法中,当食物充足且温度低时,蛇将进入交配阶段,因为雄性和雌性个体都希望与具有更高适应度的个体交配,因此雄性和雌性个体之间存在竞争。此外,交配模式和战斗模式都可以选择交配伙伴,因此战斗模式在交配阶段更为重要,这种模式有助于选择最佳个体。然而,这种模式也有一定的缺点,即最优个体位置更新直接决定了算法找到最佳解的效率和准确性。因此,对最优个体的强烈依赖不利于算法跳出局部最优,也不容易找到最佳解。为了解决这一缺点,本文提出了新的扰动因子,利用正弦和余弦的随机扰动,使算法跳出局部最优并提高其优化搜索能力,以避免陷入局部最优。考虑到雄性和雌性蛇的扰动因子不同,定义如公式(21)和公式(22)所示。500次迭代的扰动因子图如图3所示:
λ 1 = 1 + 1 1000 × ( sin ( a × 4 π × t ) + cos ( a × 6 π × t ) ) × e ( − t T ) (21) \lambda_1 = 1 + \frac{1}{1000} \times (\sin(a \times 4\pi \times t) + \cos(a \times 6\pi \times t)) \times e^{\left( -\frac{t}{T} \right)} \tag{21} λ1=1+10001×(sin(a×4π×t)+cos(a×6π×t))×e(−Tt)(21)
λ
2
=
1
+
1
1000
×
(
cos
(
a
×
4
π
×
t
)
+
sin
(
a
×
6
π
×
t
)
)
×
e
(
−
t
T
)
(22)
\lambda_2 = 1 + \frac{1}{1000} \times (\cos(a \times 4\pi \times t) + \sin(a \times 6\pi \times t)) \times e^{\left( -\frac{t}{T} \right)} \tag{22}
λ2=1+10001×(cos(a×4π×t)+sin(a×6π×t))×e(−Tt)(22)
正弦和余弦扰动因子的动态变化不确定性用于以不同程度扰乱雄性和雌性蛇在战斗模式下的位置更新,从而使雄性和雌性蛇具有更全面的区域可搜索性。搜索算法的尺度可以扩展,以提高算法跳出局部极值的能力。添加扰动因子后,雄性和雌性蛇在战斗模式下的位置更新规则如公式(23)、(24)所示:
S i m ( t + 1 ) = λ 1 × S i m ( t ) + c 3 × e − f best m / f i × rand i × ( F Q × S best m − S i m ( t ) ) (23) S_i^{m}(t + 1) = \lambda_1 \times S_i^{m}(t) + c_3 \times e^{-f_{\text{best}}^m/f_i} \times \text{rand}_i \times \left( FQ \times S_{\text{best}}^{m} - S_i^{m}(t) \right) \tag{23} Sim(t+1)=λ1×Sim(t)+c3×e−fbestm/fi×randi×(FQ×Sbestm−Sim(t))(23)
S i f ( t + 1 ) = λ 2 × S i f ( t ) + c 3 × e − f best f / f i × rand i × ( F Q × S best f − S i f ( t ) ) (24) S_i^{f}(t + 1) = \lambda_2 \times S_i^{f}(t) + c_3 \times e^{-f_{\text{best}}^f/f_i} \times \text{rand}_i \times \left( FQ \times S_{\text{best}}^{f} - S_i^{f}(t) \right) \tag{24} Sif(t+1)=λ2×Sif(t)+c3×e−fbestf/fi×randi×(FQ×Sbestf−Sif(t))(24)
3.4 帐篷混沌和柯西突变
在蛇优化器中,经过雄性和雌性蛇的交配行为后,雌性蛇将产卵并孵化出新蛇。新蛇将取代劣质个体以重新填充种群并开始新的迭代周期。在新的迭代中,为了防止算法陷入局部最优并尽可能加快收敛速度,本文引入了帐篷混沌(Bharti and Singh, 2016, Ibrahim et al., 2018, Xu et al., 2014)和柯西突变策略(Li et al., 2017, Wang et al., 2020, Zhao et al., 2022)来提高算法跳出局部的能力。通过比较个体适应度与种群平均适应度,使用帐篷混沌扰动的个体适应度低于平均适应度,使用柯西扰动的个体适应度高于平均适应度。最后,比较突变前后的新旧个体,选择最优个体保留在种群中。
混沌(Vieira & Mosna, 2022)是自然界中常见的非线性现象。由于混沌变量的随机性、遍历性和规律性,它不仅能有效维持种群的多样性,还能帮助算法跳出局部最优并提高全局搜索能力。许多学者已将其应用于优化搜索问题。混沌扰动通过帐篷混沌映射生成混沌变量 Z T Z_T ZT,将混沌变量带入问题求解空间,并最终混沌扰动个体。帐篷混沌映射如公式(25)所示,解空间如公式(26)所示,混沌扰动规则如公式(27)所示:
z i , j = − ( 2 z i ) mod 1 + rand × 1 N T (25) z_{i,j} = -(2z_i) \text{mod} 1 + \text{rand} \times \frac{1}{N_T} \tag{25} zi,j=−(2zi)mod1+rand×NT1(25)
其中 N T N_T NT是混沌序列中的粒子数, rand \text{rand} rand是介于(0, 1)之间的随机数。
Y new d = d min + ( d max − d min ) × Z d (26) Y_{\text{new}}^d = d_{\text{min}} + (d_{\text{max}} - d_{\text{min}}) \times Z_d \tag{26} Ynewd=dmin+(dmax−dmin)×Zd(26)
其中 d min d_{\text{min}} dmin和 d max d_{\text{max}} dmax是d维变量 Y new d Y_{\text{new}}^d Ynewd的最小值和最大值。
Y i , n e w d = Y d + Y new d 2 (27) Y_{i,new}^d = \frac{Y^d + Y_{\text{new}}^d}{2} \tag{27} Yi,newd=2Yd+Ynewd(27)
其中 Y d Y^d Yd是要混沌扰动的个体, Y new d Y_{\text{new}}^d Ynewd是混沌扰动后个体的量, Y i , n e w d Y_{i,new}^d Yi,newd是混沌扰动后的个体。
柯西突变源自柯西分布,其特征是峰值小且从峰值到零值的下降缓慢,这可以使突变范围更均匀。通过将柯西算子引入目标位置更新,增强了柯西算子在目标位置更新中的调整能力。
位置更新中,柯西算子的调整能力如公式(28)所示:
mutation ( m ) = m × ( 1 + tan ( π × ( rand − 0.5 ) ) ) (28) \text{mutation}(m) = m \times (1 + \tan(\pi \times (\text{rand} - 0.5))) \tag{28} mutation(m)=m×(1+tan(π×(rand−0.5)))(28)
其中 m m m是原始个体的位置, mutation ( m ) \text{mutation}(m) mutation(m)是柯西突变后个体的位置, rand \text{rand} rand是介于(0, 1)之间的随机数。
通过将上述提出的策略与原始SO算法相结合,并替换SO算法中的不合理部分和链接,可以有效提高原始SO的优化能力和效率。增强型蛇优化算法的伪代码如算法2所示。