改进的䲟鱼优化算法(Modified Remora Optimization Algorithm,MROA)(原文作者)

一、算法灵感

  䲟鱼优化算法(Remora Optimization Algorithm, ROA)是2021年提出的一种元启发式优化算法,其灵感来自于海洋中䲟鱼的寄生行为。作为海洋中最聪明的鱼,为了免受敌人的入侵,同时也为了节省体力,䲟鱼会寄生在旗鱼、鲸鱼或其他生物上觅食。算法以䲟鱼寄生在旗鱼(Swordfish Optimization Algorithm, SFO)和鲸鱼(Whale Optimization Algorithm, WOA)身上为例。因此,ROA借鉴了SFO和WOA的部分更新公式,进行全局和局部的位置更新。此外,为了确定是否需要更换宿主,䲟鱼会在宿主周围进行小范围移动,即经验积累,若不需要更换宿主,则进行宿主边觅食。图1展示了䲟鱼捕食的详细过程。
SFO 策略

图1 䲟鱼捕食过程

二、算法介绍

2.1 初始化阶段

  在ROA中,初始化䲟鱼种群位置的计算公式如下:
X i = l b + r a n d × ( u b − l b ) (1) {X_i} = lb + rand \times (ub - lb) \tag{1} Xi=lb+rand×(ublb)(1)式中, X i {X_i} Xi 为个体 i {i} i 的位置, l b {lb} lb u b {ub} ub 是搜索空间的下界和上界, r a n d {rand} rand 0 0 0 1 1 1 之间的随机数。

2.2 吸附跟随(探索阶段)

2.2.1 SFO 策略

  当䲟鱼吸附在旗鱼身上时,䲟鱼会跟随旗鱼移动。基于SFO算法的精英策略,对SFO算法的公式进行了改进,得到了以下公式:
X i t + 1 = X B e s t t − ( r a n d × ( X B e s t t + X r a n d t 2 ) − X r a n d t ) (2) {X_i}^{t + 1} = {X^t_{Best}} - { {(rand}} \times { {(}}{ { {X^t_{Best}} + {X^t_{rand}}} \over 2}{ {)}} - {X^t_{rand}}{ {)}} \tag{2} Xit+1=XBestt(rand×(2XBestt+Xrandt)Xrandt)(2)其中, t {t} t 为当前迭代次数, X B e s t t {X^t_{Best}} XBestt 为当前最优䲟鱼个体, X r a n d t {X^t_{rand}} Xrandt 为当前随机䲟鱼个体。

2.2.2 经验积累

  当䲟鱼吸附宿主身上时,会根据上一代䲟鱼的位置与当前宿主的位置,在宿主周围进行小范围移动,判断是否需要更换宿主,该过程类似经验上的积累,其数学计算公式如下:
X a t t = X i t + ( X i t − X p r e ) × r a n d n (3) {X_{att}} = {X_i}^t + { {(}}{ { {X}}_i}^t - {X_{pre}}{ {)}} \times {randn} \tag{3} Xatt=Xit+(XitXpre)×randn(3)其中, X a t t X_{att} Xatt 是䲟鱼的一次试探性移动, X p r e {X_{pre}} Xpre 表示上一代䲟鱼的位置,可以看做是一种经验, r a n d n randn randn 0 0 0 1 1 1 之间正态分布的随机数。
  经过小范围移动之后,䲟鱼根会公式(4)判断是否需要切换宿主,切换宿主的公式如公式(5)所示:
f ( X i t ) > f ( X a t t ) (4) f(X_i^t) > f({X_{att}}) \tag{4} f(Xit)>f(Xatt)(4) H ( i ) = r o u n d ( r a n d ) (5) H(i) = { {round}}({rand}) \tag{5} H(i)=round(rand)(5)其中, H ( i ) H(i) H(i) 决定䲟鱼寄生的宿主,初始值为0或1,若 H ( i ) H(i) H(i) 等于0,则吸附鲸鱼,若 H ( i ) H(i) H(i) 等于1,则吸附旗鱼,round为四舍五入的函数, f ( X i t ) f(X_i^t) f(Xit) f ( X a t t ) f({X_{att}}) f(Xatt) 分别为 X i t X_i^t Xit X a t t X_{att} Xatt 的适应度值。

2.3 为吃着想(开发阶段)

2.3.1 WOA 策略

  当宿主为鲸鱼时,䲟鱼会跟随鲸鱼同步移动,其计算公式如下:
X i t + 1 = D × e k × cos ⁡ ( 2 π a ) + X i t (6) {X_i}^{t + 1} = D \times {e^k} \times \cos { {(}}2\pi a{ {)}} + {X_i}^t \tag{6} Xit+1=D×ek×cos(2πa)+Xit(6) D = ∣ X B e s t t − X i t ∣ (7) D = \left| { {X_{Best}}^t - {X_i}^t} \right| \tag{7} D= XBesttXit (7) k = r a n d × ( a − 1 ) + 1 (8) k = {rand} \times { {(}}a - 1{ {)}} + 1 \tag{8} k=rand×(a1)+1(8) a = − ( 1 + t T ) (9) a = - { {(}}1 + {t \over T}{ {)}} \tag{9} a=(1+Tt)(9)其中, D D D 表示更新前最优位置与当前位置之间的距离, k k k − 1 -1 1 1 1 1 之间的随机数, a a a 在迭代中会在 [ − 2 , 1 ] [-2,1] [2,1] 之间线性递减, T T T 为最大迭代次数。

2.3.2 宿主边觅食

  宿主边觅食阶段是开发阶段的进一步细分,搜索范围减小,䲟鱼会在宿主周围寻找食物,不再考虑吸附,其数学计算公式如下:
X i t + 1 = X i t + A (10) {X_i}^{t + 1} = {X_i}^t + A \tag{10} Xit+1=Xit+A(10) A = B × ( X i t − C × X B e s t ) (11) A = B \times { {(}}X_i^t - C \times {X_{Best}}{ {)}} \tag{11} A=B×(XitC×XBest)(11) B = 2 × V × r a n d − V (12) B = 2 \times V \times { {rand}} - V \tag{12} B=2×V×randV(12) V = 2 ∗ ( 1 − t T ) (13) V = 2*{ {(}}1 - {t \over T}{ {)}} \tag{13} V=2(1Tt)(13)其中, A A A 为䲟鱼移动的距离,其与䲟鱼和宿主体积有关,䲟鱼因子 C C C 用于限制䲟鱼的位置,其值为 0.1 0.1 0.1 B B B 用于模拟宿主的体积, V V V 用于模拟䲟鱼的体积。

三、改进的䲟鱼优化算法

3.1 宿主切换机制

  ROA通过对比经验攻击前后位置的适应度值判断是否需要更换宿主。经验攻击与上一代䲟鱼的位置和当前的宿主相关,但䲟鱼主要依靠宿主获取食物,自身觅食的能力差,通过经验攻击切换宿主容易造成探索阶段与开发阶段失衡。因此本文提出了一种新的宿主切换机制,根据公式(14)对宿主周围环境进行新一次评估,根据公式(18)判断是否需要切换宿主。新的宿主切换机制降低了䲟鱼自身觅食能力的影响,提高了算法的性能。
X n e w = X i t + k × s t e p (14) {X_{new}} = {X_i}^t + k \times step \tag{14} Xnew=Xit+k×step(14) k = β × ( 1 − r a n d ) + r a n d (15) k = \beta \times { {(}}1 - { {rand)}} + { {rand}} \tag{15} k=β×(1rand)+rand(15) s t e p = X r 1 t − X r 2 t (16) step = {X_{r1}}^t - {X_{r2}}^t \tag{16} step=Xr1tXr2t(16) P = 0.5 ( 2 − t / T ) (17) P = 0.5{ {(}}2 - t/T{ {)}} \tag{17} P=0.5(2t/T)(17) f ( X n e w ) < f ( X i t ) (18) f({X_{new}}) < f(X_i^t) \tag{18} f(Xnew)<f(Xit)(18)其中, X n e w X_{new} Xnew 为宿主周围的一个新位置, k k k 是一个随机移动因子, β β β 为用来控制移动因子,本文选用 0.2 0.2 0.2,用来限制评估的范围, s t e p step step 表示移动的步长, X r 1 t X_{r1}^t Xr1t X r 2 t X_{r2}^t Xr2t 为随机两个鮣鱼个体的位置, f ( X n e w ) f(X_{new}) f(Xnew) X n e w X_{new} Xnew 的适应度值。 P P P 线性递减,因为䲟鱼在迭代前期由于所处区域食物匮乏,为了生存会频繁的对宿主周围进行评估,判断是否需要切换宿主;迭代后期进入食物丰富的区域后,由于食物充足,䲟鱼也会减少对切换宿主的需要,这样的改进就更加符合䲟鱼的生活习性。

3.2 联合反向学习

  联合反向学习结合了选择性反向和动态反向的优点,进一步平衡了算法的探索与开发的能力,同时又增强了算法的全局性,提高了算法的寻优能力。

3.2.1 选择性领先反向(Selective Leading Opposition,SLO)

  SLO是由选择性反向(SO)拓展而来,通过计算当前个体与最优个体之间每个维度的距离,并与一个阈值做比较,大于阈值的为远距离维度,小于阈值的为近距离维度。同时还需要计算当前个体与最优个体之间的斯皮尔曼等级相关系数,对相关性小于 0 0 0 的个体进行选择性领先反向学习。
在这里插入图片描述

图2 选择性领先反向的二维示意图

  以二维问题为例,如图2,假设 P 1 P_1 P1 P 2 P_2 P2 P 3 P_3 P3 代表䲟鱼的位置, G G G 为最好的位置。假设阈值为 3 3 3 P 1 P_1 P1 G G G 第一维度之间的距离为 5 5 5,第二维度之间的距离为 1 1 1,只有第二维度之间的距离小于阈值。在此情况下,仅将SLO策略应用于第二维度。同理,对于个体 P 2 P_2 P2,仅对第一维度进行选择性领先反向;而对于个体 P 3 P_3 P3,第一维度与第二维度都需要进行选择性领先反向。
  SLO的计算公式如下:
X i , d c ‾ = l b + u b − X i , d c   , i f   s r c < 0   a n d   s i z e ( d c ) > s i z e ( d f ) (19) \overline { {X_{i,}}_{ {d_c}}} = lb + ub - {X_{i,{d_c}}}{ { \ ,}}if{ {\ }}src{ { < 0\ and\ size(}}{d_c}{ {) > size(}}{d_f}{ {)}} \tag{19} Xi,dc=lb+ubXi,dc ,if src<0 and size(dc)>size(df)(19) s r c = 1 − 6 × ∑ j = 1 d i m ( d d i , j ) 2 n × ( n 2 − 1 ) (20) src = 1 - { {6 \times \sum\limits_{j = 1}^{dim} { { {(d{d_{i,j}})}^2}} } \over {n \times ({n^2} - 1)}} \tag{20} src=1n×(n21)6×j=1dim(ddi,j)2(20)其中, 为当前个体的近距离维度,为近距离维度的反向位置, s r c src src 为斯皮尔曼等级相关系数, s i z e ( d c ) size(d_c) size(dc) s i z e ( d f ) size(d_f) size(df)分别为为个体近距离维度( d c d_c dc)和远距离维度( d f d_f df)的数量。通过公式(19)计算当前个体与最优个体之间每个维度之间的距离,小于阈值的为 d c d_c dc,反之为 d f df df,通过公式(20)计算阈值。
d d i , j t = ∣ X b e s t , j t − X i , j t ∣ (21) d{d_{i,j}^t}= \left| { {X_{best,j}^t} - {X_{i,j}^t}} \right| \tag{21} ddi,jt= Xbest,jtXi,jt (21) t h r e s h o l d = 2 − 2 t T (22) threshold = { {2 - }}{ {2t} \over T} \tag{22} threshold=2T2t(22)

3.2.2 动态反向(Dynamic opposite,SLO)

  动态反向学习融合了准反射学习与准反射学习,其优点在于能够动态地搜索空间,在搜索空间不对称地移动,有助于算法跳出局部最优,其计算公式如下。
X i ‾ = l b + u b − X i (23) \overline { {X_i}} = lb + ub - {X_i} \tag{23} Xi=lb+ubXi(23) X r = r a n d × X i ‾ (24) {X_r} = { {rand}} \times \overline { {X_i}} \tag{24} Xr=rand×Xi(24) X ‾ d o = X i + r a n d × ( X r − X i )   , i f   r a n d < j r (25) {\overline X _{do}} = {X_i} + { {rand}} \times ({X_r} - {X_i}){ { \ ,}}if{ {\ rand}} < jr \tag{25} Xdo=Xi+rand×(XrXi) ,if rand<jr(25)式中, X i ‾ \overline { {X_i}} Xi 为个体的反向, X i {X_i} Xi 为随机反向解, X r {X_r} Xr 为动态反向解, j r jr jr 为跳跃率,即进行动态反向的概率,文 j r jr jr 值为 0.25 0.25 0.25 时效果最优。

3.3 重启策略

  重启策略一般用来帮助较差的个体跳出局部最优,摆脱停滞状态。Zhang等使用一个试验向量 t r i a l ( i ) trial(i) trial(i)记录个体停滞在局部最优的时间,若个体的位置长时间没有得到改善, t r i a l ( i ) trial(i) trial(i) 就会加 1 1 1,否则 t r i a l ( i ) trial(i) trial(i) 会重置为 0 0 0。当个体停滞的时间到达一个界限(即 l i m i t limit limit)时,会通过公式(24)和公式(25)生产一个两个新位置 T 1 T_1 T1 T 2 T_2 T2,若 T 2 T_2 T2 超出边界,则通过公式(26)拉回边界,在 T 1 T_1 T1 T 2 T_2 T2 中选择一个较优的位置替换当前个体的位置。本文的 l i m i t limit limit 设为 l n t ln^t lnt ,前期探索阶段 l i m i t limit limit 小一些有助于增强算法的全局性,后期开发阶段若 l i m i t limit limit 值过小可能会导致算法远离最优解。
T 1 = ( u b − l b ) × r a n d + l b (26) {T_1} = (ub - lb) \times { {rand}} + lb \tag{26} T1=(ublb)×rand+lb(26) T 2 = ( u b + l b ) × r a n d − X i (27) {T_2} = (ub + lb) \times { {rand}} - {X_i} \tag{27} T2=(ub+lb)×randXi(27) T 2 = ( u b − l b ) × r a n d + l b   , i f   T 2 > u b   ∣ ∣   T 2 < l b (28) {T_2} = (ub - lb) \times rand + lb{ {\ ,if\ }}{T_2} > ub\ ||\ {T_2} < lb \tag{28} T2=(ublb)×rand+lb ,if T2>ub ∣∣ T2<lb(28)

3.4 MROA的伪代码

  1. 初始化䲟鱼数量 N N N 和最大迭代次数 T T T
  2. 初始化种群: X i ( i = 1 , 2 , . . . , N ) X_i(i=1,2,...,N) Xi(i=1,2,...,N)
  3. While t < T t<T t<T do
  4.   检查是否有䲟鱼超出了搜索空间并进行修改
  5.   计算每条䲟鱼的饥饿值(适应度值),并找到吃的最饱的䲟鱼 X b e s t X_{best} Xbest
  6.   通过公式(19)进行选择性领先反向
  7.   For i = 1 i=1 i=1 to N N N do
  8.     If H ( i ) H(i) H(i)==0 then
  9.       使用公式 (6) 更新被鲸鱼带到的位置
  10.     Else If H ( i ) H(i) H(i)==1 then
  11.       使用公式 (2) 更新被旗鱼带到的位置
  12.     End If
  13.     通过公式(3)进行经验积累,并判断是否更换宿主
  14.     使用公式(17)更新 P P P
  15.     If r a n d < P rand<P rand<P then
  16.       使用公式(14)对宿主周围环境进行一次评估
  17.       If f ( X i t ) > f ( X a t t ) f(X_i^t)>f({X_{att}}) f(Xit)>f(Xatt) then
  18.         使用公式 (5) 切换宿主
  19.       End If
  20.     End If
  21.     使用公式(10)进行宿主边觅食
  22.     通过公式(23)进行联合反向学习
  23.     更新每个搜索代理的 t r i a l ( i ) trial(i) trial(i)
  24.     If t r i a l ( i ) > l i m i t trial(i)>limit trial(i)>limit then
  25.       通过公式(24)和(25)生成两个位置
  26.       保留饥饿值更小的䲟鱼
  27.     End If
  28.   End For
  29.    t = t + 1 t=t+1 t=t+1
  30. End While
  31. 返回吃的最饱的鱼(最优解) X b e s t X_{best} Xbest

四、实验结果

  MROA和ROA在23个经典测试函数(设置维度 d i m = 30 dim=30 dim=30)的F2、F5、F6中的收敛曲线,测试函数公式如下:

函数 公式 理论值
F2 F 2 ( x ) = ∑ i = 1 n ∣ x i ∣ + ∏ i = 1 n ∣ x i ∣ {F_2}(x) = \sum\nolimits_{i = 1}^n {\left| { {x_i}} \right|} + \prod _{i = 1}^n\left| { {x_i}} \right| F2(x)=i=1nxi+i=1nxi 0.00 0.00 0.00
F5 F 5 ( x ) = ∑ i = 1 d − 1 [ 100 ( x i + 1 − x i 2 ) 2 + ( x i − 1 ) 2 ] {F_5}(x) = \sum\nolimits_{i = 1}^{d - 1} {[100{ {({x_{i + 1}} - x_i^2)}^2} + { {({x_i} - 1)}^2}]} F5(x)=i=1d1[100(xi+1xi2)2+(xi1)2] 0.00 0.00 0.00
F6 F 6 ( x ) = ∑ i = 1 d ( x i + 5 ) 2 {F_6}(x) = {\sum\nolimits_{i = 1}^d {({x_i} + 5)} ^2} F6(x)=i=1d(xi+5)2 0.00 0.00 0.00

4. 1 F2收敛曲线

在这里插入图片描述

4. 1 F5收敛曲线

在这里插入图片描述

4. 1 F6收敛曲线

在这里插入图片描述

五、参考文献

[1] Wen C, Jia H, Wu D, et al. Modified remora optimization algorithm with multistrategies for global optimization problem[J]. Mathematics, 2022, 10(19), 3604.

猜你喜欢

转载自blog.csdn.net/jiaheming1983/article/details/129382917