获取更多资讯,赶快关注上面的公众号吧!
海鸥优化算法是印度学者Gaurav Dhiman于2018年提出的一种受生物启发的智能优化算法,该算法的主要灵感来自于自然界中海鸥的迁徙和攻击行为,这些行为经过数学建模和实现,可以在给定搜索空间中进行探索和利用。扫码关注公众号,后台回复“海鸥”或“SOA”可以获取Matlab代码。
生物学泛型
一般来说,海鸥是群居性的,它们用自己的智慧来寻找并攻击猎物。海鸥最重要的是它们的迁徙和攻击行为。迁徙被定义为海鸥从一个地方到另一个地方的季节性迁移,以寻找最丰富食物来源,以提供足够的能量。该行为可描述为:
- 在迁徙过程中,它们成群结队地迁徙。海鸥的初始位置不同,以避免相互碰撞;
- 在一个群体中,海鸥可以朝着最适合生存的海鸥的方向前进;
- 其他海鸥可以根据最适合的海鸥更新它们的初始位置。
海鸥在迁徙过程中,会经常攻击其他候鸟,在攻击过程中,它们可以做出螺旋形的自然运动,如图1所示。
数学模型
迁徙(探索)
在迁移过程中,海鸥优化算法模拟了海鸥群如何向一个位置移动到另一个位置。在这个阶段,海鸥应该满足三个条件:
- 避免碰撞:为了避免与邻居(即其他海鸥)的碰撞,引入了额外的变量
A
A
A,用于计算新搜索代理的位置,如图2所示:
C ⃗ s = A × P ⃗ s ( x ) (5) \vec{C}_{s}=A \times \vec{P}_{s}(x)\tag{5} Cs=A×Ps(x)(5)
其中,
C
⃗
s
\vec{C}_{s}
Cs表示与其他搜索代理不发生碰撞的搜索代理的位置,
P
⃗
s
\vec{P}_{s}
Ps表示搜索代理的当前位置,
x
x
x表示当前迭代次数,
A
A
A表示给定搜索空间中搜索代理的移动行为。
A
=
f
c
−
(
x
×
(
f
c
/
Max
iteration
)
)
(6)
A=f_{c}-\left(x \times\left(f_{c} / \text { Max }_{\text {iteration }}\right)\right)\tag{6}
A=fc−(x×(fc/ Max iteration ))(6)
where:
x
=
0
,
1
,
2
,
…
x=0,1,2, \ldots
x=0,1,2,…, Max
iteration
_{\text {iteration }}
iteration
其中引入
f
c
f_c
fc是为了控制采用变量
A
A
A的频率,使其从
f
c
f_c
fc线性递减至0。
f
c
f_c
fc可以设置为2。
- 朝最优的邻居方向移动:在邻居避免碰撞之后,搜索代理朝着最优邻居的方向移动,如图3所示:
M ⃗ S = B × ( P b s → ( x ) − P ⃗ S ( x ) ) (7) \vec{M}_{S}=B \times\left(\overrightarrow{P_{b s}}(x)-\vec{P}_{S}(x)\right)\tag{7} MS=B×(Pbs(x)−PS(x))(7)
其中
M
⃗
S
\vec{M}_{S}
MS表示搜索代理
P
⃗
S
\vec{P}_{S}
PS与最优搜索代理
P
b
s
→
\overrightarrow{P_{b s}}
Pbs的相对位置。
B
B
B的行为是随机的,这是为了在探索和开发之间取得适当的平衡,
B
B
B的计算公式为:
B
=
2
×
A
2
×
r
d
(8)
B=2 \times A^{2} \times r d\tag{8}
B=2×A2×rd(8)
其中
r
d
rd
rd是[0,1]范围内的随机数。
- 靠近最优搜索代理:最后,搜索代理可以根据最优搜索代理更新自己的位置,如图4所示。
D s ⃗ = ∣ C s ⃗ + M s ⃗ ∣ (9) \vec {D_s}=|\vec {C_s}+\vec {M_s}|\tag{9} Ds=∣Cs+Ms∣(9)
其中 D s ⃗ \vec {D_s} Ds表示搜索代理与最优搜索代理之间的距离。
攻击(利用)
海鸥在迁徙过程中可以不断改变攻击角度和速度,并利用翅膀和重量来保持高度。当攻击猎物时,会在空中形成螺旋运动,如图5所示。
在
x
,
y
,
z
x,y,z
x,y,z平面内的行为可以描述为:
x
′
=
r
×
c
o
s
(
k
)
(10)
x^\prime=r\times cos(k)\tag{10}
x′=r×cos(k)(10)
y ′ = r × s i n ( k ) (11) y^\prime=r\times sin(k)\tag{11} y′=r×sin(k)(11)
z ′ = r × k (12) z^\prime=r\times k\tag{12} z′=r×k(12)
r = u × e k v (13) r=u\times e^{kv}\tag{13} r=u×ekv(13)
其中,
r
r
r为螺旋每一圈的半径,
k
k
k是
[
0
≤
k
≤
2
π
]
[0\le k \le 2\pi]
[0≤k≤2π],
u
u
u和
v
v
v是定义螺旋形状的常量,
e
e
e是自然对数的底。搜索代理更新后的位置计算如下:
P
⃗
s
(
x
)
=
(
D
s
⃗
×
x
′
×
y
′
×
z
′
)
+
P
⃗
b
s
(
x
)
(14)
\vec{P}_s(x)=(\vec{D_s}\times x^\prime \times y^\prime \times z^\prime)+\vec{P}_{bs}(x)\tag{14}
Ps(x)=(Ds×x′×y′×z′)+Pbs(x)(14)
其中 P ⃗ s ( x ) \vec{P}_s(x) Ps(x)保存了最优解并更新其他搜索代理的位置。
提出的SOA首先随机初始化种群,搜索代理在迭代过程中更新其相对于最优搜索代理的位置,完整算法见Algorithm 1。