智能优化算法(源码)-蜉蝣算法(Mayfly Algorithm,MA)

在这里插入图片描述

获取更多资讯,赶快关注上面的公众号吧!

蜉蝣算法(Mayfly Algorithm,MA)是由Konstantinos Zervoudakis于2020年提出的一种新型智能优化算法,该算法模拟了蜉蝣的飞行行为和交配过程,综合了群体智能和进化算法的优势。本文将带来该算法的原理介绍,扫码关注公众号,后台回复“蜉蝣”可以获取Matlab代码

在这里插入图片描述

蜉蝣是蜉蝣目昆虫,在从卵中孵化出来后,蜉蝣幼虫肉眼可见,它们要花几年的时间作为水生若虫生长,直到成年后才可以上升到水面。成年蜉蝣在完成繁殖的最终目标前只能存活几天时间。为了吸引雌性,大多数成年雄性会聚集在水面上方几米的地方,通过特有的上下运动模式来表演一种婚礼舞蹈>雌性飞入这些种群中以与空中的雄性交配。交配可能只持续几秒钟,当交配完成后,雌性把卵排到水面上,以延续下一代。

蜉蝣算法就是受上述启发而提出的一种新型优化算法, 其可以认为是粒子群优化算法()的一种改进,综合了粒子群PSO、遗传算法GA和萤火虫算法FA的各大优势。

假设:

  1. 蜉蝣从卵中孵化出来就已经是成虫,无论活多久,最适应的蜉蝣都能存活下来;
  2. 每只蜉蝣在搜索空间中的位置代表了问题的一个可行解;
  3. 初始时,随机生成两个蜉蝣种群,分别代表雄性和雌性种群,即每只蜉蝣作为一个候选解被随机置于问题空间中,该候选解可通过一个d维向量 x = ( x 1 , ⋯   , x d ) \mathbf{x}=\left(x_{1}, \cdots, x_{d}\right) x=(x1,,xd)来表达,且其性能可根据预定义的目标函数 f ( x ) f(\mathbf{x}) f(x)评估得到;
  4. 蜉蝣的速度定义为其位置的变化,飞行方向是个体和社会飞行经验的动态交互。特别地,蜉蝣会根据当前的个体最优位置( p b e s t pbest pbest)以及当前种群的最优位置( g b e s t gbest gbest)调整其轨迹。

雄性蜉蝣的移动

雄蜉蝣的群居,意味着每只雄蜉蝣的位置是根据自己的经验和邻居的经验调整的。假设 x i t x_i^t xit是时间步 t t t蜉蝣 i i i在搜索空间中的当前位置,通过在当前位置上添加一个速度 v i i + 1 v_i^{i+1} vii+1来改变位置:

x i t + 1 = x i t + v i t + 1 (1) x_i^{t+1}=x_i^{t}+v_i^{t+1}\tag{1} xit+1=xit+vit+1(1)

其中 x i 0 ∈ U ( x m i n , x m a x ) x_i^0\in U(x_{min},x_{max}) xi0U(xmin,xmax)

考虑到雄蜉蝣通常是在水面以上几米的位置跳舞,可以假设它们不会有太大的速度,且它们是不断移动的,所以雄蜉蝣的速度可以计算为:
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 j − x i j t ) (2) \left.v_{i j}^{t+1}=v_{i j}^{t}+a_{1} e^{-\beta r_{p}^{2}}\left( pbest_{i j}-x_{i j}^{t}\right)+a_{2} e^{-\beta r_{g}^{2}}\left( gbest _{j}\right.-x_{i j}^{t}\right)\tag{2} vijt+1=vijt+a1eβrp2(pbestijxijt)+a2eβrg2(gbestjxijt)(2)
其中 v i j t v_{i j}^{t} vijt是时间步 t t t蜉蝣 i i i在维度 j = 1 , . . . , n j=1,...,n j=1,...,n上的速度, x i j t x_{i j}^{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访问过的最优位置,考虑最小化问题,下一时间步 t + 1 t+1 t+1的个体最优位置 p b e s t i j pbest_{ij} pbestij可计算为:
KaTeX parse error: Unknown column alignment: * at position 37: …{\begin{array}{*̲{20}{c}} {lx_i^…
其中 f : R n → R f: \mathbb{R}^{n} \rightarrow \mathbb{R} f:RnR为目标函数,时间步 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 ( c b e s t ) } = min ⁡ { f ( p b e s t 1 ) , f ( p b e s t 2 ) , ⋯   , f ( p b e s t N ) } (4) \begin{aligned} & { gbest } \in\left\{ { pbest }_{1}, { pbest }_{2}, \cdots, { pbest }_{N} \mid f( { cbest })\right\} \\ &\quad=\min \left\{f\left(p b e s t_{1}\right), f\left(p b e s t_{2}\right), \cdots, f\left(p b e s t_{N}\right)\right\} \end{aligned}\tag{4} gbest{pbest1,pbest2,,pbestNf(cbest)}=min{f(pbest1),f(pbest2),,f(pbestN)}(4)
其中 N N N是种群中雄性蜉蝣总数。 β \beta β是固定的可见度系数,用于限制蜉蝣的可见度,而 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) \left\|x_{i}-X_{i}\right\|=\sqrt{\sum_{j=1}^{n}\left(x_{i j}-X_{i j}\right)^{2}}\tag{5} xiXi=j=1n(xijXij)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_{i j}^{t+1}=v_{i j}^{t}+d * r\tag{6} vijt+1=vijt+dr(6)
其中 d d d为婚舞距离系数, r r r为[-1,1]范围内的随机数。通过这种上下移动就为算法引入了随机元素。

雌性蜉蝣的移动

在这里插入图片描述

不同于雄性蜉蝣,雌性蜉蝣并不会成群结队,而是飞向雄性以进行繁殖。假设 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 (7) y_{i}^{t+1}=y_{i}^{t}+v_{i}^{t+1}\tag{7} yit+1=yit+vit+1(7)
其中y_{i}^{0} ∈ \in U ( y m i n , y m a x ) U(y_{min},y_{max}) U(ymin,ymax)

尽管吸引过程是随机的,但为了简便可以将其视为确定过程,也就是说,可以根据其适应度值,最优雄性吸引最优雌性,第二优雄性吸引第二有雌性,以此类推。那么考虑最小化问题时,其速度按如下计算:
v i j t + 1 = { v i j t + a 2 e − β r m f 2 ( x i j t − 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 ) (8) v_{i j}^{t+1}=\left\{\begin{array}{l} v_{i j}^{t}+a_{2} e^{-\beta r_{m f}^{2}}\left(x_{i j}^{t}-y_{i j}^{t}\right), \text { if } f\left(y_{i}\right)>f\left(x_{i}\right) \\ v_{i j}^{t}+f l * r, \text { if } f\left(y_{i}\right) \leq f\left(x_{i}\right) \end{array}\right.\tag{8} vijt+1={vijt+a2eβrmf2(xijtyijt), if f(yi)>f(xi)vijt+flr, if f(yi)f(xi)(8)
其中, v i j t v_{i j}^{t} vijt是时间步 t t t雌性蜉蝣 i i i在维度 j = 1 , . . . , n j=1,...,n j=1,...,n上的速度, y i j t y_{i j}^{t} yijt是时间步 t t t雌性蜉蝣 i i i在维度 j j j上的位置, a 2 a_{2} a2是正吸引常数, β \beta β是固定可见度常数, r m f r_{m f} rmf是雄性和雌性之间的笛卡尔距离, f l fl fl是随机游走系数,当雌性没有被雄性吸引时使用,此时雌性随机飞行,且 r r r是[-1,1]范围内的随机值。

蜉蝣交配

交叉算法表达了两只蜉蝣之间的交配过程:从雄性种群和雌性种群中分别选择一个父代,选择方式同雄性吸引雌性的方式相同。特别地,选择可以是随机的也可以是基于适应度值的,如果是后者,则最优雌性与最优雄性交配,第二优之间交配,以此类推。交叉的结果就是生成如下两个子代:
  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 (9) \begin{aligned} \ { offspring } 1 &=L * \ { male }+(1-L) * \ { female } \\ \ { offspring2 } &=L * \ { female }+(1-L) * \ { male } \end{aligned}\tag{9}  offspring1 offspring2=L male+(1L) female=L female+(1L) male(9)
其中 m a l e male male是雄性父代,#female 是 雌 性 父 代 , 是雌性父代, L$是特定范围内的随机值,子代初始速度为0。

伪代码

目标函数 f ( x ) , x = ( x 1 , … , x d ) T f(\mathbf{x}), \mathbf{x}=\left(x_{1}, \ldots, x_{d}\right)^{T} f(x),x=(x1,,xd)T

初始化雄性蜉蝣种群 x i ( i = 1 , 2 , … , N ) x_{i}(i=1,2, \ldots, N) xi(i=1,2,,N)及速度 v m i v_{mi} vmi

初始化雌性蜉蝣种群 y i ( i = 1 , 2 , … , M ) y_{i}(i=1,2, \ldots, M) yi(i=1,2,,M)及速度 v f i v_{fi} vfi

评估各蜉蝣适应度值

找到全局最优解 g b e s t gbest gbest

Do While 未满足终止准则

  更新雄性和雌性的速度和解

  评估解

  蜉蝣排序

  蜉蝣交配

  评估子代

  随机将子代分为雄性和雌性

  更新 p b e s t pbest pbest g b e s t gbest gbest

end while

结果后处理及可视化。

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

松间沙路hba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值