一种基于自适应策略的混合鲸鱼优化算法-附代码

一种基于自适应策略的混合鲸鱼优化算法


摘要: 针对鲸鱼优化算法在函数优化时存在收敛速度慢、易陷入局部最优等问题,提出了一种基于自适应策略的混合鲸鱼优化算法。该算法中先利用蝙蝠算法的局部搜索机制对当前鲸鱼算法最优解进行高斯扰动产生局部新解,再把局部新解放入蝙蝠种群中,根据局部新解的位置优劣更新鲸鱼群位置,达到增强种群多样性、避免过早陷入局部最优的目的;然后利用自适应策略改善平衡算法的全局寻优和局部寻优;最后通过优化鲸鱼搜索路径提升搜索精度。

1.鲸鱼优化算法

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

2. 改进鲸鱼优化算法

2.1 自适应权重和收敛因子

从 WOA 的分析可知, 收敛因子 a a a 对于平衡算法的全局探索与局部开发能力至关重要, 种群中个体间
的位置变化也与之有关。但 WOA 中收敛因子 a a a 随着迭代次数的增加线性地从 2 递减到 0 , 这使得算法的
迭代速度较为缓慢; 同时算法在进行局部寻优时, 搜索代理只能靠近局部最优解,而不能进行更好的局部 寻优。针对上述问题,受文献 [ 10 ] { }^{[10]} [10] 的启发,提出了新的自适应调整策略。具体公式如下:
自适应调整收敛因子:
a ⃗ = − cos ⁡ ( π ∗ t M a x iter  + π ) + 1 (5) \quad \vec{a}=-\cos(\pi * \frac{t}{M a x_{\text {iter }}}+\pi)+1 \tag{5} a =cos(πMaxiter t+π)+1(5)
自适应调整权重:
w = k ∗ cos ⁡ ( d ∗ π ∗ t M a x i t e r ) (6) w=k * \cos \left(d * \pi * \frac{t}{M a x_{i t e r}}\right) \tag{6} w=kcos(dπMaxitert)(6)
其中 k 、 d k 、 d kd 为调节系数, M ax iter 为最大迭代次数。因为余弦函数具有周期性从 1 快速递减到-1 的特点,
式(5)与原算法的线性迭代相比, 使收玫因子更快的从 2 非线性的递减到 0 , 同理式(6)使权重从 1 快速的非 线性递减到 0 。自适应调整后的 WOA 在迭代前期以较小的迭代速度维持一个较大的权重, 增强算法的全 局搜索能力; 经过一定迭代后权重迅速下降, 在迭代后期能够提高寻优精度, 从而实现算法全局寻优与局 部寻优能力的平衡。
引入自适应调整策略后的式(2)、式(3)、式(4)更新为:
X ⃗ ( t + 1 ) = w ∗ X ∗ ( t ) − A ⃗ ∙ D ˉ (7) \vec{X}(t+1)=w * X *(t)-\vec{A} \bullet \bar{D} \tag{7} X (t+1)=wX(t)A Dˉ(7)

X ⃗ ( t + 1 ) = w ∗ D ∙ e b l ∙ cos ⁡ ( 2 π l ) + X ∗ ( t ) (8) \vec{X}(t+1)=w * D \bullet e^{b l} \bullet \cos (2 \pi l)+X^{*}(t) \tag{8} X (t+1)=wDeblcos(2πl)+X(t)(8)

X ⃗ ( t + 1 ) = w ∗ X rand  − A ⃗ ∙ D ˉ (9) \vec{X}(t+1)=w * X_{\text {rand }}-\vec{A} \bullet \bar{D} \tag{9} X (t+1)=wXrand A Dˉ(9)

2.2 杂交蝙蝠算法

根据 WOA 的位置更新公式可知, 鲸鱼个体靠近目标猎物时会加快收㪉速度, 导致大量鲸鱼个体聚集 在局部最优从而难以寻找到全局最优解。针对 WOA 的这一问题, 本文引入蝙蝠算法 ( B A T ) [ 16 ] (\mathrm{BAT})^{[16]} (BAT)[16] 的局部搜索 机制, 将 BAT 的最优解随机游动的方法融入到鲸鱼算法的位置更新过程, 对 WOA 的局部最优解进行高斯 扰动产生局部新解来提升种群的多样性, 防止 WOA过早陷入局部最优。
在蝙蝠算法局部搜索机制中, 蝙蝠个体利用回声差异判断猎物之间距离差异, 根据差异动态调整蝙蝠 个体发出的声波脉冲频率和响度, 直到找到猎物为止。即蝙蝠个体在当前最优解附近搜索时, 如果它的位 置更靠近猎物,则将脉冲值调大、响度值调小,然后继续搜寻和定位猎物。公式如下:
最优解附近产生局部新解:
X n e w = X o l d + ε A t (10) X_{n e w}=X_{o l d}+\varepsilon A^{t} \tag{10} Xnew=Xold+εAt(10)
响度更新 :
A i t + 1 = α ∗ A i t (11) A_{i}^{t+1}=\alpha * A_{i}^{t} \tag{11} Ait+1=αAit(11)
脉冲更新:
γ i t + 1 = γ i 0 [ 1 − exp ⁡ ( − Υ ∗ t ) ] (11) \gamma_{i}^{t+1}=\gamma_{i}^{0}[1-\exp (-\Upsilon * t)] \tag{11} γit+1=γi0[1exp(Υt)](11)
式(10)、式(11)、式(12)中 ε \varepsilon ε 为属于 [ − 1 , 1 ] [-1,1] [1,1] 的空间向量, x old  x_{\text {old }} xold  为当前迭代的局部最优解, x n e w x_{n e w} xnew 为新产生 的局部新解 A t , A t A^{t}, A^{t} At,At t t t 时刻中所有蝙蝠的平均响度, α \alpha α Υ \Upsilon Υ 为常数, 对任意的 α ∈ ( 0 , 1 ) , Υ > 0 \alpha \in(0,1), \Upsilon>0 α(0,1),Υ>0, 有 A i t → 0 \mathrm{A}_{i}^{t} \rightarrow 0 Ait0,
γ i t → γ i 0 , t → ∞ ; A i t \gamma_{i}^{t} \rightarrow \gamma_{i}^{0}, t \rightarrow \infty ; A_{i}^{t} γitγi0,t;Ait 为第 i i i 个蝙蝠在 t t t 时刻发出的响度, γ i 0 、 γ i t \gamma_{i}^{0} 、 \gamma_{i}^{t} γi0γit 为蝙蝠在 0 时刻、 t t t 时刻发出的脉冲。 引入 BAT 局部搜索机制后的改进 WOA 最优解描述如下:
i i i 个蝙蝠个体在 t t t 时刻发出的脉冲 γ i t \gamma_{i}^{t} γit 小于随机产生 ( ( ( rand [ 0 , 1 ] ) [0,1]) [0,1]) 的脉冲, 则对全局最优鲸鱼个体 ( X w o A − 8 b e s t ) \left(X_{w o A}{ }_{-8 b e s t}\right) (XwoA8best)
进行高斯扰动 ( randn ⁡ [ 0 , 1 ] ) (\operatorname{randn}[0,1]) (randn[0,1]) 产生一个局部新解, 公式如下:
 If  γ i t < rand ⁡ [ 0 , 1 ] ; X B A T − x ( i ) = X W O − − g b e s t ∗ ( 1 + randn ⁡ [ 0 , 1 ] ) (12) \text { If } \quad \gamma_{i}^{t}<\operatorname{rand}[0,1] ; \quad X_{B A T-x(i)}=X_{W O_{-}-g b e s t} *(1+\operatorname{randn}[0,1])\tag{12}  If γit<rand[0,1];XBATx(i)=XWOgbest(1+randn[0,1])(12)
然后对该蝙蝠个体 ( X B A T − ( i ) ) \left(X_{B A T_{-}(i)}\right) (XBAT(i)) 的位置进行评价:如果该蝙蝠个体位置的适应度值优于鲸鱼种群的第 i i i
个鲸鱼 ( X W O − x ( i ) ) \left(X_{W O_{-} x(i)}\right) (XWOx(i)) 位置的适应度值, 且它产生的响度 ( A i t ) \left(A_{i}^{t}\right) (Ait) 大于随机生成的响度时,则该蝙蝠个体被加入到
鲸鱼种群 ( X W O A − x ) \left(X_{W O A_{-} x}\right) (XWOAx) 中, 并同步更新蝙蝠个体的脉冲和响度。具体公式如下:
 If  A i t > rand ⁡ [ 0 , 1 ] & & f ( X B A T − x ( i ) ) < f ( X W O − x ( i ) ) ; X W O − ( i ) = X B A T − ( i ) (13) \text { If } A_{i}^{t}>\operatorname{rand}[0,1] \& \& f\left(X_{B A T_{-} x(i)}\right)<f\left(X_{W O_{-} x(i)}\right) ; X_{W O_{-}(i)}=X_{B A T_{-}(i)}\tag{13}  If Ait>rand[0,1]&&f(XBATx(i))<f(XWOx(i));XWO(i)=XBAT(i)(13)
如果该蝙蝠个体位置的适应度值优于当前鲸鱼最优个体的适应度值, 则用当前蝙蝠个体来代替全局最 优鲸鱼个体。具体公式如下:
 If  f ( X B A T − x ( i ) ) < f ( X W O A − − b e s t ) ; X W O A − best  = X B A T − ( i ) (14) \text { If } f\left(X_{B A T_{-} x(i)}\right)<f\left(X_{W O A_{-}-b_{e s t}}\right) ; X_{W O A_{-} \text {best }}=X_{B A T_{-}(i)}\tag{14}  If f(XBATx(i))<f(XWOAbest);XWOAbest =XBAT(i)(14)

2.3 优化种群搜索路径

WOA 在螺旋更新位置阶段采用的是对数螺旋搜索路径, 文献 [ 17 ] { }^{[17]} [17] 指出对数螺线搜索存在当搜索代理的 螺距小于对数螺旋的螺距时, 在搜索空间会存在无法遍历的盲点, 使局部解不太完整。由于 WOA 是通过 螺旋曲线的螺距逐渐变化来影响算法的收敛性能, 本文的改进算法将搜索的对数螺线更换为等螺距阿基米 德螺线, 再用参数来进行调整, 从而提升算法的寻优精度。式(8)进一步改进如下:
X ⃗ ( t + 1 ) = w ∗ l ∙ ( D ⃗ ∗ ( l ∙ b ) ) 2 ⋅ cos ⁡ ( 2 π l ) + X ∗ ( t ) (15) \vec{X}(t+1)=w * l \bullet(\vec{D} *(l \bullet b))^{2} \cdot \cos (2 \pi l)+X^{*}(t) \tag{15} X (t+1)=wl(D (lb))2cos(2πl)+X(t)(15)
本文给出的 HWBOA 算法实现描述如下:
Step 1: 初始化算法各项参数, 初始化鲸鱼种群、蝙蝠种群, 计算鲸鱼种群中个体的适应度值, 记录 当前的最优鲸鱼个体;
Step 2:当迭代次数末达到最大迭代值时, 依次进行后续步骤, 否则结束算法运行;
Step 3:根据式子(5)计算收敛因子 a a a 的值;
Step 4: 根据式子(6)计算惯性权重 w w w 的值;
Step 5: 当随机概率值小于 0.5 0.5 0.5 时, 执行 Step 6 或 Step 7;
Step 6: 如果 A A A 的绝对值大于 1, 则根据式(1)更新搜索代理位置, 根据式(7)进行缩小环绕机制, 如果 当前蝙蝠个体发出的脉冲小于随机产生的脉冲,执行式(13)、式(14)、式(11)、式(12)、式(15);

Step 7: 如果 A A A 的绝对值小于 1, 则根据式(9)进行全局搜索, 如果当前蝙蝠个体发出的脉冲小于随机产 生的脉冲, 执行式(13)、式(14)、式(11)、式(12)、式(15);
Step 8: 当随机概率值不小于 0.5 0.5 0.5 时, 执行 Step 9;
Step 9:按照式(16)进行螺旋更新位置。

3.实验结果

请添加图片描述

4.参考文献

[1]王廷元,何先波,贺春林.一种基于自适应策略的混合鲸鱼优化算法[J].西华师范大学学报(自然科学版),2021,42(01):92-99.

5.Matlab代码

6.Python代码

猜你喜欢

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