前言
蜉蝣算法(Mayfly Algorithm,MA)是由Konstantinos Zervoudakis于2020年提出的一种新型智能优化算法,该算法模拟了蜉蝣的飞行行为和交配过程,综合了群体智能和进化算法的优势。

截止到 2023 年,算法引用趋势
1. 蜉蝣相关的生物群行为
蜉蝣是蜉蝣目昆虫,在从卵中孵化出来后,蜉蝣幼虫肉眼可见,它们要花几年的时间作为水生若虫生长,直到成年后才可以上升到水面。成年蜉蝣在完成繁殖的最终目标前只能存活几天时间。为了吸引雌性,大多数成年雄性会聚集在水面上方几米的地方,通过特有的上下运动模式来表演一种婚礼舞蹈>雌性飞入这些种群中以与空中的雄性交配。交配可能只持续几秒钟,当交配完成后,雌性把卵排到水面上,以延续下一代。
蜉蝣算法就是受上述启发而提出的一种新型优化算法, 其可以认为是粒子群优化算法的一种改进,综合了粒子群PSO、遗传算法GA和萤火虫算法FA的各大优势。
假设:
- 蜉蝣从卵中孵化出来就已经是成虫,无论活多久,最适应的蜉蝣都能存活下来;
- 每只蜉蝣在搜索空间中的位置代表了问题的一个可行解;
- 初始时,随机生成两个蜉蝣种群,分别代表雄性和雌性种群,即每只蜉蝣作为一个候选解被随机置于问题空间中,该候选解可通过一个 d d d维向量 x = ( x 1 , ⋯ , x d ) x = ( x_1 , ⋯ , x_d) x=(x1,⋯ ,xd))来表达,且其性能可根据预定义的目标函数 f ( x ) f(x) f(x)评估得到;
- 蜉蝣的速度定义为其位置的变化,飞行方向是个体和社会飞行经验的动态交互。特别地,蜉蝣会根据当前的个体最优位置( pbest \text{pbest} pbest)以及当前种群的最优位置( gbest \text{gbest} gbest)调整其轨迹。
2. 算法仿生设计
2.1 雄性蜉蝣的移动
雄蜉蝣的群居,意味着每只雄蜉蝣的位置是根据自己的经验和邻居的经验调整的。假设
x
i
t
x_i^t
xit是在第
t
t
t次迭代,蜉蝣
i
i
i在搜索空间中的当前位置,通过在当前位置上添加一个速度
v
i
t
+
1
v_i^{t + 1}
vit+1
x
i
t
+
1
=
x
i
t
+
v
i
t
+
1
(6)
x_i^{t+1} = x_i^{t} + v_i^{t + 1} \tag{6}
xit+1=xit+vit+1(6)
考虑到雄性蜉蝣总是在靠近水面的地方斗舞,所以飞行速度并不会很快,且它们是不断移动的,所以雄蜉蝣的速度可以计算为:
v
i
j
t
+
1
=
v
i
j
t
+
a
1
e
−
β
r
p
2
(
p
b
e
s
t
i
j
−
x
i
j
t
)
+
a
2
e
−
β
r
g
2
(
g
b
e
s
t
i
j
−
x
i
j
t
)
(7)
v_{ij}^{t+ 1} = v_{ij}^{t} + a_1e^{- \beta r_p^2}(pbest_{ij} - x_{ij}^t) + a_2e^{- \beta r_g^2}(gbest_{ij} - x_{ij}^t) \tag{7}
vijt+1=vijt+a1e−βrp2(pbestij−xijt)+a2e−βrg2(gbestij−xijt)(7)
式中 v i j t v_{ij}^t vijt是第 t t t此迭代,蜉蝣 i i i在维度 j = 1 , . . . , n j = 1 , . . . , n j=1,...,n上的速度, x i j t x_{ij}^t xijt是是第 t t t此迭代, 蜉蝣 i i i在维度 j j j上的位置, a 1 a_1 a1和 a 2 a_2 a2是正吸引常数,分别用于缩放认知和社会部分的贡献,通俗来讲就是当前个体及最优个体对当前飞行速度的影响程度。 p b e s t i pbest_i pbesti 是蜉蝣 i i i访问过的最优位置(历史最优位置), g b e s t gbest gbest为群体最优个体位置。考虑最小化问题,下一时间步 t + 1 t+1 t+1的个体最优位置 p b e s t i j pbest_{ij} pbestij可计算为:
其中
f
:
R
n
→
R
f: \Bbb{R}^n \to \Bbb{R}
f:Rn→R 为目标函数,第
t
t
t的全局最优位置
g
b
e
s
t
gbest
gbest定义为:
g
b
e
s
t
∈
{
p
b
e
s
t
1
,
p
b
e
s
t
2
,
.
.
.
,
p
b
e
s
t
N
∣
f
(
g
b
e
s
t
)
}
=
m
i
n
{
f
(
p
b
e
s
t
1
)
,
f
(
p
b
e
s
t
2
)
,
.
.
.
,
f
(
p
b
e
s
t
N
)
}
(4)
gbest \in \{pbest_1, pbest_2, ..., pbest_N | f(gbest)\} = min\{f(pbest_1), f(pbest_2), ..., f(pbest_N)\} \tag{4}
gbest∈{pbest1,pbest2,...,pbestN∣f(gbest)}=min{f(pbest1),f(pbest2),...,f(pbestN)}(4)
其中
N
N
N是种群中雄性蜉蝣总数。
β
β
β是固定的可见度系数,用于限制蜉蝣的可见度,而
r
p
r_p
rp和
r
g
r_g
rg分别是
x
i
x_i
xi与
p
b
e
s
t
i
pbest_i
pbesti,
x
i
x_i
xi与
g
b
e
s
t
gbest
gbest之间的笛卡尔距离:
∣
∣
x
i
−
X
i
∣
∣
=
∑
j
=
1
n
(
x
i
j
−
X
i
j
)
2
(5)
||x_i - X_i|| = \sqrt{\sum_{j=1}^n(x_{ij} - X_{ij})^2} \tag{5}
∣∣xi−Xi∣∣=j=1∑n(xij−Xij)2(5)
其中 x i j x_{ij} xij为蜉蝣 i i i的第 j j j个元素, X i X_i Xi对应 p b e s t i pbest_i pbesti或 g b e s t gbest gbest.
种群中最优蜉蝣继续表演它们特有的上下婚礼舞蹈,这对算法的功能是很重要的。因此,最优蜉蝣必须不断改变它们的速度:
v
i
j
t
+
1
=
v
i
j
t
+
d
∗
r
(6)
v_{ij}^{t+1} = v_{ij}^t +d *r \tag{6}
vijt+1=vijt+d∗r(6)
其中 d d d为婚舞距离系数, r r r 为[-1,1]范围内的随机数。通过这种上下移动就为算法引入了随机元素。
2.2 雌性蜉蝣的移动
不同于雄性蜉蝣,雌性蜉蝣并不会成群结队,而是飞向雄性以进行繁殖。假设
y
i
t
y_i^t
yit,是在
t
t
t次迭代,雌性蜉蝣
i
i
i在搜索空间中的当前位置,那在当前位置上增加一个速度
v
i
t
+
1
v_i^{t + 1}
vit+1就可以改变这个位置,即:
y
i
t
+
1
=
y
i
t
+
v
i
t
+
1
(6)
y_i^{t+1} = y_i^{t} + v_i^{t + 1} \tag{6}
yit+1=yit+vit+1(6)
尽管吸引过程是随机的,但为了简便可以将其视为确定过程,也就是说,可以根据其适应度值,最优雄性吸引最优雌性,第二优雄性吸引第二有雌性,以此类推。那么考虑最小化问题时,其速度按如下计算:
v
i
j
t
+
1
=
{
v
i
j
t
+
a
2
e
−
β
r
m
f
2
(
x
i
j
−
y
i
j
t
)
,
if
f
(
y
i
)
>
f
(
x
i
)
v
i
j
t
+
f
l
∗
r
,
if
f
(
y
i
)
≤
f
(
x
i
)
v_{ij}^{t+ 1} = \begin{cases} v_{ij}^{t} + a_2e^{- \beta r_{mf}^2}(x_{ij} - y_{ij}^t), & \text{if $f(y_i) \gt f(x_i)$} \\ v_{ij}^{t} + fl * r, & \text{if $f(y_i) \leq f(x_i)$} \\ \end{cases}
vijt+1={vijt+a2e−βrmf2(xij−yijt),vijt+fl∗r,if f(yi)>f(xi)if f(yi)≤f(xi)
其中,
v
i
j
t
v_{ij}^{t}
vijt是第
t
t
t次迭代,雌性蜉蝣
i
i
i在维度
j
=
1
,
.
.
.
,
n
j = 1 , . . . , n
j=1,...,n上的速度,
y
i
j
t
y_{ij}^t
yijt是第
t
t
t次迭代,雌性蜉蝣
i
i
i在维度
j
j
j上的位置,
a
2
a_2
a2 是正吸引常数,
β
β
β是固定可见度常数,
r
m
f
r_{mf}
rmf 是雄性和雌性之间的笛卡尔距离,
f
l
fl
fl是随机游走系数, 当雌性没有被雄性吸引时使用,此时雌性随机飞行,且
r
r
r是
[
−
1
,
1
]
[-1,1]
[−1,1]范围内的随机值。
2.3 蜉蝣交配
交叉算法表达了两只蜉蝣之间的交配过程:从雄性种群和雌性种群中分别选择一个父代,选择方式同雄性吸引雌性的方式相同。特别地,选择可以是随机的也可以是基于适应度值的,如果是后者,则最优雌性与最优雄性交配,第二优之间交配,以此类推。交叉的结果就是生成如下两个子代:
o f f s p r i n g 1 = L ∗ m a l e + ( 1 + L ) ∗ f e m a l e o f f s p r i n g 2 = L ∗ f e m a l e + ( 1 − L ) ∗ m a l e \begin{align*} offspring1 = L * male + (1 + L)*female\\ offspring2 = L * female + (1 - L) * male \end{align*} offspring1=L∗male+(1+L)∗femaleoffspring2=L∗female+(1−L)∗male
其中 m a l e male male是雄性父代, f e m a l e female female是雌性父代 , L L L是特定范围内的随机值,子代初始速度为0。
3. 算法流程
蜉蝣算法流程如下:
Step1. 初始化雌性蜉蝣,雄性蜉蝣,设定参数。
Step2. 计算适应度值,并且排序,获取pbest和gbest。
Step3. 依次跟新雄性蜉蝣,雌性蜉蝣位置,并且交配。
Step4. 计算适应度,并更新pbest和gbest
Step5. 是否满足停止条件,如果满足则退出,输出结果,否则重复执行Step3-5。

更细节的流程为:
目标函数
f
(
x
)
,
x
=
(
x
1
,
.
.
.
,
x
d
)
T
f(x), x = (x_1, ..., x_d)^T
f(x),x=(x1,...,xd)T
初始化雄性蜉蝣种群 x i ( i = 1 , 2 , . . . , N ) x_i(i = 1, 2, ..., N) xi(i=1,2,...,N) 及速度 v m i v_{mi} vmi
初始化雄性蜉蝣种群 y i ( i = 1 , 2 , . . . , M ) y_i(i = 1, 2, ..., M) yi(i=1,2,...,M) 及速度 v f i v_{fi} vfi
评估各蜉蝣适应度值
找到全局最优解 g b e s t gbest gbest
Do while 未满足终止准则
~~~~ 更新雄性和雌性的速度和解
~~~~ 评估解
~~~~ 蜉蝣交配
~~~~ 评估子代
~~~~ 随机将子代分为雄性和雌性
~~~~ 更新 pbest 和 gbest
end while
4. 算法特点
总体而言,MA算法的结构与粒子群算法有些相似,不过作者将部分参数设置为自适应,这就在处理复杂问题时很吃香。虽然MA算法性能优异,但不得不说,每经过一次迭代,适应度的计算次数过多,所以当以适应度计算次数为评价标准时,MA算法不一定能表现得很优异。值得一提的是,代码中额外引入了一个惯性权重,这是在原文中没有的。
References
[1] Zervoudakis K, Tsafarakis S. A mayfly optimization algorithm[J]. Computers & Industrial Engineering, 2020, 145: 106559.
[2] 智能优化算法(源码)-蜉蝣算法(Mayfly Algorithm,MA)
[3] 第三十九弹——蜉蝣算法