智能优化算法(源码)-蜉蝣算法(Mayfly Algorithm,MA)
获取更多资讯,赶快关注上面的公众号吧!
文章目录
- 雄性蜉蝣的移动
- 雌性蜉蝣的移动
- 蜉蝣交配
- 伪代码
蜉蝣算法(Mayfly Algorithm,MA)是由Konstantinos Zervoudakis于2020年提出的一种新型智能优化算法,该算法模拟了蜉蝣的飞行行为和交配过程,综合了群体智能和进化算法的优势。本文将带来该算法的原理介绍,扫码关注公众号,后台回复“蜉蝣”可以获取Matlab代码。
蜉蝣是蜉蝣目昆虫,在从卵中孵化出来后,蜉蝣幼虫肉眼可见,它们要花几年的时间作为水生若虫生长,直到成年后才可以上升到水面。成年蜉蝣在完成繁殖的最终目标前只能存活几天时间。为了吸引雌性,大多数成年雄性会聚集在水面上方几米的地方,通过特有的上下运动模式来表演一种婚礼舞蹈>雌性飞入这些种群中以与空中的雄性交配。交配可能只持续几秒钟,当交配完成后,雌性把卵排到水面上,以延续下一代。
蜉蝣算法就是受上述启发而提出的一种新型优化算法, 其可以认为是粒子群优化算法()的一种改进,综合了粒子群PSO、遗传算法GA和萤火虫算法FA的各大优势。
假设:
- 蜉蝣从卵中孵化出来就已经是成虫,无论活多久,最适应的蜉蝣都能存活下来;
- 每只蜉蝣在搜索空间中的位置代表了问题的一个可行解;
- 初始时,随机生成两个蜉蝣种群,分别代表雄性和雌性种群,即每只蜉蝣作为一个候选解被随机置于问题空间中,该候选解可通过一个d维向量x=(x1,⋯,xd)\mathbf{x}=\left(x_{1}, \cdots, x_{d}\right)x=(x1,⋯,xd)来表达,且其性能可根据预定义的目标函数f(x)f(\mathbf{x})f(x)评估得到;
- 蜉蝣的速度定义为其位置的变化,飞行方向是个体和社会飞行经验的动态交互。特别地,蜉蝣会根据当前的个体最优位置(pbestpbestpbest)以及当前种群的最优位置(gbestgbestgbest)调整其轨迹。
雄性蜉蝣的移动
雄蜉蝣的群居,意味着每只雄蜉蝣的位置是根据自己的经验和邻居的经验调整的。假设xitx_i^txit是时间步ttt蜉蝣iii在搜索空间中的当前位置,通过在当前位置上添加一个速度vii+1v_i^{i+1}vii+1来改变位置:
xit+1=xit+vit+1(1)x_i^{t+1}=x_i^{t}+v_i^{t+1}\tag{1}xit+1=xit+vit+1(1)
其中xi0∈U(xmin,xmax)x_i^0\in U(x_{min},x_{max})xi0∈U(xmin,xmax)
考虑到雄蜉蝣通常是在水面以上几米的位置跳舞,可以假设它们不会有太大的速度,且它们是不断移动的,所以雄蜉蝣的速度可以计算为:
vijt+1=vijt+a1e−βrp2(pbestij−xijt)+a2e−βrg2(gbestj−xijt)(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(pbestij−xijt)+a2e−βrg2(gbestj−xijt)(2)
其中vijtv_{i j}^{t}vijt是时间步ttt蜉蝣iii在维度j=1,...,nj=1,...,nj=1,...,n上的速度,xijtx_{i j}^{t}xijt是时间步ttt蜉蝣iii在维度jjj上的位置,a1a_1a1和a2a_2a2是正吸引常数,分别用于缩放认知和社会部分的贡献。pbestipbest_ipbesti是蜉蝣iii访问过的最优位置,考虑最小化问题,下一时间步t+1t+1t+1的个体最优位置pbestijpbest_{ij}pbestij可计算为:
KaTeX parse error: Unknown column alignment: * at position 37: …{\begin{array}{*̲{20}{c}} {lx_i^…
其中f:Rn→Rf: \mathbb{R}^{n} \rightarrow \mathbb{R}f:Rn→R为目标函数,时间步ttt的全局最优位置gbestgbestgbest定义为:
gbest∈{pbest1,pbest2,⋯,pbestN∣f(cbest)}=min{f(pbest1),f(pbest2),⋯,f(pbestN)}(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,⋯,pbestN∣f(cbest)}=min{f(pbest1),f(pbest2),⋯,f(pbestN)}(4)
其中NNN是种群中雄性蜉蝣总数。β\betaβ是固定的可见度系数,用于限制蜉蝣的可见度,而rpr_{p}rp和rgr_grg分别是是xix_ixi与pbestipbest_ipbesti,xix_ixi与gbestgbestgbest之间的笛卡尔距离:
∥xi−Xi∥=∑j=1n(xij−Xij)2(5)\left\|x_{i}-X_{i}\right\|=\sqrt{\sum_{j=1}^{n}\left(x_{i j}-X_{i j}\right)^{2}}\tag{5} ∥xi−Xi∥=j=1∑n(xij−Xij)2(5)
其中xijx_{ij}xij为蜉蝣iii的第jjj个元素,XiX_iXi对应pbestipbest_ipbesti或gbestgbestgbest。
种群中最优蜉蝣继续表演它们特有的上下婚礼舞蹈,这对算法的功能是很重要的。因此,最优蜉蝣必须不断改变它们的速度:
vijt+1=vijt+d∗r(6)v_{i j}^{t+1}=v_{i j}^{t}+d * r\tag{6} vijt+1=vijt+d∗r(6)
其中ddd为婚舞距离系数,rrr为[-1,1]范围内的随机数。通过这种上下移动就为算法引入了随机元素。
雌性蜉蝣的移动
不同于雄性蜉蝣,雌性蜉蝣并不会成群结队,而是飞向雄性以进行繁殖。假设yity_i^tyit是时间步ttt雌性蜉蝣iii在搜索空间中的当前位置,那在当前位置上增加一个速度vit+1v_i^{t+1}vit+1就可以改变这个位置,即:
yit+1=yit+vit+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(ymin,ymax)U(y_{min},y_{max})U(ymin,ymax)。
尽管吸引过程是随机的,但为了简便可以将其视为确定过程,也就是说,可以根据其适应度值,最优雄性吸引最优雌性,第二优雄性吸引第二有雌性,以此类推。那么考虑最小化问题时,其速度按如下计算:
vijt+1={vijt+a2e−βrmf2(xijt−yijt),if f(yi)>f(xi)vijt+fl∗r,if f(yi)≤f(xi)(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(xijt−yijt), if f(yi)>f(xi)vijt+fl∗r, if f(yi)≤f(xi)(8)
其中,vijtv_{i j}^{t}vijt是时间步ttt雌性蜉蝣iii在维度j=1,...,nj=1,...,nj=1,...,n上的速度,yijty_{i j}^{t}yijt是时间步ttt雌性蜉蝣iii在维度jjj上的位置,a2a_{2}a2是正吸引常数,β\betaβ是固定可见度常数,rmfr_{m f}rmf是雄性和雌性之间的笛卡尔距离,flflfl是随机游走系数,当雌性没有被雄性吸引时使用,此时雌性随机飞行,且rrr是[-1,1]范围内的随机值。
蜉蝣交配
交叉算法表达了两只蜉蝣之间的交配过程:从雄性种群和雌性种群中分别选择一个父代,选择方式同雄性吸引雌性的方式相同。特别地,选择可以是随机的也可以是基于适应度值的,如果是后者,则最优雌性与最优雄性交配,第二优之间交配,以此类推。交叉的结果就是生成如下两个子代:
offspring1=L∗male+(1−L)∗femaleoffspring2=L∗female+(1−L)∗male(9)\begin{aligned} \ { offspring } 1 &=L * \ { male }+(1-L) * \ { female } \\ \ { offspring2 } &=L * \ { female }+(1-L) * \ { male } \end{aligned}\tag{9} offspring1 offspring2=L∗ male+(1−L)∗ female=L∗ female+(1−L)∗ male(9)
其中malemalemale是雄性父代,#female是雌性父代,是雌性父代,是雌性父代,L$是特定范围内的随机值,子代初始速度为0。
伪代码
目标函数f(x),x=(x1,…,xd)Tf(\mathbf{x}), \mathbf{x}=\left(x_{1}, \ldots, x_{d}\right)^{T}f(x),x=(x1,…,xd)T
初始化雄性蜉蝣种群xi(i=1,2,…,N)x_{i}(i=1,2, \ldots, N)xi(i=1,2,…,N)及速度vmiv_{mi}vmi
初始化雌性蜉蝣种群yi(i=1,2,…,M)y_{i}(i=1,2, \ldots, M)yi(i=1,2,…,M)及速度vfiv_{fi}vfi
评估各蜉蝣适应度值
找到全局最优解gbestgbestgbest
Do While 未满足终止准则
更新雄性和雌性的速度和解
评估解
蜉蝣排序
蜉蝣交配
评估子代
随机将子代分为雄性和雌性
更新pbestpbestpbest和gbestgbestgbest
end while
结果后处理及可视化。
智能优化算法(源码)-蜉蝣算法(Mayfly Algorithm,MA)相关推荐
- 【老生谈算法】matlab实现census算法源码——census算法
census算法matlab程序 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]census算法matlab程序.docx ...
- linux页面算法源码,LRU算法原理解析
LRU是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的. 现代操作系统提供了一种对主存的抽象概念虚拟内存,来对主存进行更好地管理.他将主存 ...
- 【老生谈算法】matlab实现AHP算法源码——AHP算法
用Matlab实现AHP的算法 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]用Matlab实现AHP的算法.doc 2.算 ...
- 【老生谈算法】matlab实现匈牙利算法源码——匈牙利算法
matlab匈牙利算法代码实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]matlab匈牙利算法.doc 2.算法详解: ...
- 【老生谈算法】matlab实现LMS算法源码——LMS算法
matlab的LMS算法详解 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]matlab的LMS算法.doc 2.算法详解: ...
- 【老生谈算法】matlab实现最短路径算法源码——最短路径算法
每对顶点之间的最短路径 matlab程序 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]最短路径的Floyd算法的Matla ...
- 【老生谈算法】matlabAP近邻传播聚类算法源码——聚类算法
AP近邻传播聚类算法原理及Matlab实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]AP近邻传播聚类算法原理及Matl ...
- 【老生谈算法】matlab实现RSA算法源码——RSA算法
RSA算法的matlab实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]RSA算法的matlab实现-doc 2.算法详 ...
- 【老生谈算法】matlab实现K-means算法源码——K-means算法
K-means算法matlab是实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]K-means算法matlab是实现.d ...
- Metis异常检测算法源码概要
Metis异常检测算法源码概要 算法源码目录 算法层目录 基于指数移动平均算法(EWMA) 孤立森林 xgboost gbdt 3-Sigma 多项式回归 特征层目录 拟合特征 分类特征 统计特征 其 ...
最新文章
- 急招 Golang 熟手,来做 5G 事业。
- 和jwt_秒懂 JWT
- boost::histogram::histogram::fill用法的测试程序
- 【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡 期望DP+高斯消元
- android 进制转换
- 【BootStrap】初步教程
- BZOJ5020: [THUWC 2017]在美妙的数学王国中畅游(LCT,泰勒展开,二项式定理)
- java 内存分布_一图看懂JVM内存分布,永久记住!
- python processpoolexector 释放内存_python之ThreadPoolExecutor
- gradle入门(1-7)eclipse和gradle集成插件的安装和使用
- AI+教育落地,百度大脑如何让校园更智能?
- ENVI实验教程(6)实验六、遥感图像分类
- 廖雪峰Python基础练习作业
- 【win10专业版】ultraiso如何制作光盘启动盘
- 当初我要是这么学习计算机网络就好了「附图文解析」
- 如何设置通过PMU的gpio来唤醒系统
- 七、最短路径——弗洛伊德(Floyd)算法
- c语言中以追加只写方式打开文本文件,C语言文本方式和二进制方式打开文件区别...
- 软件包下载地址(一)
- Java面试题(外包公司)
热门文章
- 阿里沈询直播 分布式事务一
- 【Flink源码篇】Flink 1.15.0源码编译
- 洛谷 最大食物链计数 python题解
- Mac系统解决ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘方法
- 【Python技巧】(虚拟环境报错、pycharm)无法加载文件 ...\venv\Scripts\activate.ps1,因为在此系统上禁止运行脚本。
- 关于代码复制到IDEA上空格变成`NBSP`的解决办法
- 全新的Nuke 13 mac版来啦!nuke13全新功能 (支持big sur)
- PostgreSQL 11 1000亿 tpcb、1000W tpcc 性能测试 - on 阿里云ECS + ESSD (含quorum based 0丢失多副本配置与性能测试)...
- java swt课程设计_Java-SWT怎么做图片水印和文字水印?
- 逗号算命系统 v1.02