爬行动物优化算法(Reptile Search Algorithm,RSA)(附Matlab代码,完整,免费)
一、算法灵感
爬行动物优化算法(Reptile Search Algorithm, RSA)是2021年提出的一种元启发式优化算法,其灵感来自于鳄鱼的狩猎行为。鳄鱼的狩猎行为主要可以分为围猎(探索)和捕食(开发)两个阶段,通过大步行走(腹部离地行走)或小步行走(腹部贴地行走)进行围猎,通过狩猎协调或狩猎合作进行捕食。
二、算法介绍
2.1 初始化
在RSA中,优化过程从公式(1)中所示的一组候选解
x
x
x 开始,这些候选解是随机生成的,在每次迭代中,获得的最佳解被视为近最优解。
x
(
i
,
j
)
=
r
a
n
d
×
(
U
B
−
L
B
)
+
L
B
,
j
=
1
,
2
,
.
.
.
,
n
(1)
{x_{(i,j)}} = rand \times (UB - LB) + LB,j = 1,2,...,n \tag{1}
x(i,j)=rand×(UB−LB)+LB,j=1,2,...,n(1)其中,
x
(
i
,
j
)
x_{(i,j)}
x(i,j) 表示第
i
i
i 个解的第
j
j
j 个位置,
N
N
N 表示候选解的数量,
n
n
n 表示给定问题的维数。
r
a
n
d
rand
rand 是一个随机值,
L
B
LB
LB 和
U
B
UB
UB 分别表示给定问题的下界和上界。
2.2 围猎(探索阶段)
在本节中,将介绍RSA的围猎行为(探索阶段)。根据围捕行为,鳄鱼在围捕过程中有两种策略,即离地行走和贴地行走。这些行为致力于全局搜索,与开发阶段不同,这些策略(离地和贴地行走)不允许鳄鱼轻易接近猎物,因为它们会受到干扰。但是,这可以使他们探索更多的空间,经过几次探索,也许可以找到猎物密集区。此外,通过广泛的探索也有利于鳄鱼之后的捕猎。探索策略的切换取决于两个条件,离地行走策略以 t ≤ T 4 t \le {T \over 4} t≤4T 为执行条件,贴地行走策略以 t > T 4 t > {T \over 4} t>4T 和 t ≤ T 2 t \le {T \over 2} t≤2T 为执行条件。
2.2.1 离地行走
离地行走策略的数学公式如下:
x
(
i
,
j
)
(
t
+
1
)
=
B
e
s
t
j
(
t
)
×
−
η
(
i
,
j
)
(
t
)
×
β
−
R
(
i
,
j
)
(
t
)
×
r
a
n
d
(2)
{x_{(i,j)}}(t + 1) = Bes{t_j}(t) \times - {\eta _{(i,j)}}(t) \times \beta - {R_{(i,j)}}(t) \times rand \tag{2}
x(i,j)(t+1)=Bestj(t)×−η(i,j)(t)×β−R(i,j)(t)×rand(2)其中
B
e
s
t
j
(
t
)
Best_j(t)
Bestj(t) 是迄今为止获得的最佳解中的第
j
j
j 个位置,
r
a
n
d
rand
rand 表示一个在
0
0
0 和
1
1
1 之间的随机数,
t
t
t 是当前迭代的次数,
T
T
T 是最大迭代次数。
η
(
i
,
j
)
η_{(i,j)}
η(i,j) 表示第
i
i
i 个解中第
j
j
j 个位置的狩猎算符,其使用公式(3)计算。
β
β
β 是一个敏感参数,控制迭代过程中离地行走的勘探精度,值为
0.1
0.1
0.1。缩减函数
R
(
i
,
j
)
R_{(i,j)}
R(i,j) 是用于缩减搜索区域的值,其使用等式(4)计算。
η
(
i
,
j
)
=
B
e
s
t
j
(
t
)
×
P
(
i
,
j
)
(3)
{\eta _{(i,j)}} = Bes{t_j}(t) \times {P_{(i,j)}} \tag{3}
η(i,j)=Bestj(t)×P(i,j)(3)其中,
P
(
i
,
j
)
P_{(i,j)}
P(i,j) 是获得的最佳解的第
j
j
j 个位置与当前解的第
j
j
j 个位置之间的百分比差,使用公式(5)进行计算。
R
(
i
,
j
)
=
B
e
s
t
j
(
t
)
−
x
(
r
1
,
j
)
B
e
s
t
j
(
t
)
+
ε
(4)
{R_{(i,j)}} = {{Bes{t_j}(t) - {x_{(r_1,j)}}} \over {Bes{t_j}(t) + \varepsilon }} \tag{4}
R(i,j)=Bestj(t)+εBestj(t)−x(r1,j)(4)其中,
r
1
r_1
r1 是介于
[
1
,
N
]
[1, N]
[1,N] 之间的随机数,
ε
\varepsilon
ε 为一个极小值用于防止分母为零。
P
(
i
,
j
)
=
α
+
x
(
i
,
j
)
−
M
(
x
i
)
B
e
s
t
j
(
t
)
×
(
U
B
(
j
)
−
L
B
(
j
)
)
+
ε
(5)
{P_{(i,j)}} = \alpha + {{{x_{(i,j)}} - M({x_i})} \over {Bes{t_j}(t) \times (U{B_{(j)}} - L{B_{(j)}}) + \varepsilon}} \tag{5}
P(i,j)=α+Bestj(t)×(UB(j)−LB(j))+εx(i,j)−M(xi)(5)式中,
M
(
x
i
)
M(x_i)
M(xi) 是第
i
i
i 个解的平均位置,其使用等式(6)计算。
U
B
(
j
)
UB_{(j)}
UB(j) 和
L
B
(
j
)
LB_{(j)}
LB(j) 分别是第
j
j
j 个位置的上边界和下边界。
α
α
α 是一个敏感参数,值为
0.1
0.1
0.1。
M
(
x
i
)
=
1
n
∑
j
=
1
n
x
(
i
,
j
)
(6)
M({x_i}) = {1 \over n}\sum\limits_{j = 1}^n {{x_{(i,j)}}} \tag{6}
M(xi)=n1j=1∑nx(i,j)(6)
2.2.2 贴地行走
贴地行走策略的数学公式如下:
x
(
i
,
j
)
(
t
+
1
)
=
B
e
s
t
j
(
t
)
×
x
(
r
2
,
j
)
×
E
S
(
t
)
×
r
a
n
d
(7)
{x_{(i,j)}}(t + 1) = Bes{t_j}(t) \times {x_{(r_2,j)}} \times ES(t) \times rand \tag{7}
x(i,j)(t+1)=Bestj(t)×x(r2,j)×ES(t)×rand(7)进化意义
E
S
(
t
)
ES(t)
ES(t) 是在整个迭代次数内随机取
2
2
2 和
−
2
-2
−2 之间的递减值的概率比,使用公式(8)计算,
r
2
r_2
r2 是介于
[
1
,
N
]
[1,N]
[1,N] 之间的随机数。
E
S
(
t
)
=
2
×
r
3
×
(
1
−
1
T
)
(8)
ES(t) = 2 \times {r_3} \times (1 - {1 \over T}) \tag{8}
ES(t)=2×r3×(1−T1)(8)在等式(8)中,
r
3
r_3
r3 表示介于
−
1
-1
−1 和
1
1
1 之间的随机整数。
2.3 捕食(开发阶段)
在本节中,将介绍RSA的捕食行为(开发阶段)。根据鳄鱼的捕食行为,鳄鱼在捕食过程中有两种策略:狩猎协调和狩猎合作。这些策略用于局部开发,与探索阶段不同,这些策略使鳄鱼更容易接近猎物。因此,开发阶段可能会在几次迭代后发现近似最优的解。此外,开发阶段会在最优解附近进行强化搜索,并加强鳄鱼之间的沟通,其数学公式如等式(9)和(10)所示。当 t > T 2 t > {T \over 2} t>2T 和 t ≤ 3 T 4 t \le {{3T} \over 4} t≤43T 时为狩猎协调,当 t > 3 T 4 t > {3T \over 4} t>43T 和 t ≤ T t \le T t≤T 时为狩猎合作。
2.3.1 狩猎协调
狩猎协调策略的数学公式如下:
x
(
i
,
j
)
(
t
+
1
)
=
B
e
s
t
j
(
t
)
×
P
(
i
,
j
)
(
t
)
×
r
a
n
d
(9)
{x_{(i,j)}}(t + 1) = Bes{t_j}(t) \times {P_{(i,j)}}(t) \times rand \tag{9}
x(i,j)(t+1)=Bestj(t)×P(i,j)(t)×rand(9)
2.3.2 狩猎合作
狩猎合作策略的数学公式如下:
x
(
i
,
j
)
(
t
+
1
)
=
B
e
s
t
j
(
t
)
−
η
(
i
,
j
)
(
t
)
×
ε
−
R
(
i
,
j
)
(
t
)
×
r
a
n
d
(10)
{x_{(i,j)}}(t + 1) = Bes{t_j}(t) - {\eta _{(i,j)}}(t) \times \varepsilon - {R_{(i,j)}}(t) \times rand \tag{10}
x(i,j)(t+1)=Bestj(t)−η(i,j)(t)×ε−R(i,j)(t)×rand(10)
2.4 RSA的伪代码
- 初始化鳄鱼数量 N N N 和最大迭代次数 T T T 等
- 初始化RSA参数 α \alpha α, β \beta β,等
- 随机初始化鳄鱼种群: x i : i = 1 , . . . , N x_i:i=1,...,N xi:i=1,...,N
- While t < T t<T t<T do
- 检查是否有鳄鱼超出了搜索空间并进行修改
- 计算每条鳄鱼的饥饿值(适应度值),并找到吃的最饱的鳄鱼 ( B e s t Best Best)
- 使用公式(8)更新 E S ES ES
- For i = 1 i=1 i=1 to N N N do
- For j = 1 j=1 j=1 to n n n do
- 使用公式(4),(5),(7)更新 η η η, R R R, P P P 的值
- If t ≤ T 4 t \le {T \over 4} t≤4T then
- 使用公式(2)执行离地行走策略
- Else If t > T 4 t > {T \over 4} t>4T and t ≤ T 2 t \le {T \over 2} t≤2T then
- 使用公式(7)执行贴地行走策略
- Else If t > T 2 t > {T \over 2} t>2T and t ≤ 3 T 4 t \le {3T \over 4} t≤43T then
- 使用公式(9)执行狩猎协调策略
- Else
- 使用公式(10)执行狩猎合作策略
- End If
- End For
- End For
- t = t + 1 t=t+1 t=t+1
- End While
- 返回吃的最饱的鳄鱼(最优解) ( B e s t Best Best).
三、实验结果
RSA在23个经典测试函数(设置维度 d i m = 30 dim=30 dim=30)的F1、F11、F23中的收敛曲线,测试函数公式如下:
函数 | 公式 | 理论值 |
---|---|---|
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 |
F11 | F 11 ( x ) = 1 400 ∑ i = 1 n x i 2 − Π i = 1 n cos ( x i i ) + 1 {F_{11}}(x) = {1 \over {400}}\sum\nolimits_{i = 1}^n {x_i^2 - \Pi _{i = 1}^n\cos ({{{x_i}} \over {\sqrt i }}) + 1} F11(x)=4001∑i=1nxi2−Πi=1ncos(ixi)+1 | 0.00 0.00 0.00 |
F23 | F 23 ( x ) = − ∑ i = 1 10 [ ( X − a i ) ( X − a i ) T + c i ] − 1 {F_{23}}(x) = - \sum\nolimits_{i = 1}^{10} {{{[(X - {a_i}){{(X - {a_i})}^T} + {c_i}]}^{ - 1}}} F23(x)=−∑i=110[(X−ai)(X−ai)T+ci]−1 | − 10.5363 -10.5363 −10.5363 |
3.1 F1收敛曲线
3.2 F11收敛曲线
3.3 F23收敛曲线
四、Matlab代码
代码在资源中,可自行免费下载。
快速跳转:RSA源代码
SO源代码
SCSO源代码