䲟鱼优化算法(Remora Optimization Algorithm,ROA)(原文作者)
一、算法灵感
䲟鱼优化算法(Remora Optimization Algorithm, ROA)是2021年提出的一种元启发式优化算法,其灵感来自于海洋中䲟鱼的寄生行为。作为海洋中最聪明的鱼,为了免受敌人的入侵,同时也为了节省体力,䲟鱼会寄生在旗鱼、鲸鱼或其他生物上觅食。算法以䲟鱼寄生在旗鱼(Swordfish Optimization Algorithm, SFO)和鲸鱼(Whale Optimization Algorithm, WOA)身上为例。因此,ROA借鉴了SFO和WOA的部分更新公式,进行全局和局部的位置更新。此外,为了确定是否需要更换宿主,䲟鱼会在宿主周围进行小范围移动,即经验积累,若不需要更换宿主,则进行宿主边觅食。图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×(ub−lb)(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}} - {\rm{(rand}} \times {\rm{(}}{{{X^t_{Best}} + {X^t_{rand}}} \over 2}{\rm{)}} - {X^t_{rand}}{\rm{)}} \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 + {\rm{(}}{{\rm{X}}_i}^t - {X_{pre}}{\rm{)}} \times {randn} \tag{3}
Xatt=Xit+(Xit−Xpre)×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) = {\rm{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 {\rm{(}}2\pi a{\rm{)}} + {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=
XBestt−Xit
(7)
k
=
r
a
n
d
×
(
a
−
1
)
+
1
(8)
k = {rand} \times {\rm{(}}a - 1{\rm{)}} + 1 \tag{8}
k=rand×(a−1)+1(8)
a
=
−
(
1
+
t
T
)
(9)
a = - {\rm{(}}1 + {t \over T}{\rm{)}} \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 {\rm{(}}X_i^t - C \times {X_{Best}}{\rm{)}} \tag{11}
A=B×(Xit−C×XBest)(11)
B
=
2
×
V
×
r
a
n
d
−
V
(12)
B = 2 \times V \times {\rm{rand}} - V \tag{12}
B=2×V×rand−V(12)
V
=
2
∗
(
1
−
t
T
)
(13)
V = 2*{\rm{(}}1 - {t \over T}{\rm{)}} \tag{13}
V=2∗(1−Tt)(13)其中,
A
A
A 为䲟鱼移动的距离,其与䲟鱼和宿主体积有关,䲟鱼因子
C
C
C 用于限制䲟鱼的位置,其值为
0.1
0.1
0.1,
B
B
B 用于模拟宿主的体积,
V
V
V 用于模拟䲟鱼的体积。
2.4 ROA的伪代码
- 初始化䲟鱼数量 N N N 和最大迭代次数 T T T 等
- 初始化种群: X i ( i = 1 , 2 , . . . , N ) X_i(i=1,2,...,N) Xi(i=1,2,...,N)
- While t < T t<T t<T do
- 检查是否有䲟鱼超出了搜索空间并进行修改
- 计算每条䲟鱼的饥饿值(适应度值),并找到吃的最饱的䲟鱼 X b e s t X_{best} Xbest
- For i = 1 i=1 i=1 to N N N do
- If H ( i ) H(i) H(i)==0 then
- 使用公式 (6) 更新被鲸鱼带到的位置
- Else If H ( i ) H(i) H(i)==1 then
- 使用公式 (2) 更新被旗鱼带到的位置
- End If
- 通过公式(3)进行经验积累,并判断是否更换宿主
- If f ( X i t ) > f ( X a t t ) f(X_i^t) > f({X_{att}}) f(Xit)>f(Xatt) then
- 使用公式 (5) 切换宿主
- Else
- 使用公式 (10) 进行宿主边觅食
- End If
- End For
- t = t + 1 t=t+1 t=t+1
- End While
- 返回吃的最饱的鱼(最优解) X b e s t X_{best} Xbest
三、实验结果
ROA在23个经典测试函数(设置维度 d i m = 30 dim=30 dim=30)的F1、F5、F8中的收敛曲线,测试函数公式如下:
函数 | 公式 | 理论值 |
---|---|---|
F1 | F 1 ( x ) = ∑ i = 1 n x i 2 {F_1}(x) = \sum\nolimits_{i = 1}^n {x_i^2} F1(x)=∑i=1nxi2 | 0.00 0.00 0.00 |
F5 | F 5 ( x ) = ∑ i = 1 n − 1 [ 100 ( x i + 1 − x i 2 ) 2 + ( x i − 1 ) 2 ] {F_5}(x) = \sum\nolimits_{i = 1}^{n - 1} {[100{{({x_{i + 1}} - x_i^2)}^2} + {{({x_i} - 1)}^2}]} F5(x)=∑i=1n−1[100(xi+1−xi2)2+(xi−1)2] | 0.00 0.00 0.00 |
F8 | F 8 ( x ) = ∑ i = 1 n − x i sin ( ∣ x i ∣ ) {F_8}(x) = \sum\nolimits_{i = 1}^n { - {x_i}\sin (\sqrt {|{x_i}|} )} F8(x)=∑i=1n−xisin(∣xi∣) | − 418.9829 × d i m -418.9829×dim −418.9829×dim |
3.1 F1收敛曲线
3.2 F5收敛曲线
3.3 F8收敛曲线
四、参考文献
[1] 贾鹤鸣, 智能优化算法及 MATLAB 实现[M], 清华大学出版社, 2024.
[2] Heming Jia, Xiaoxu Peng, Chunbo Lang. Remora optimization algorithm[J]. Expert Systems With Applications. 2021, 185, 115665.