|
引言
本期我们介绍蜉蝣算法(Mayfly Algorithm,MA)。该算法由Konstantinos Zervoudakis等人于2020年提出,主要模拟了蜉蝣的飞行行为及交配过程,因实验效果不错并在Mathworks上广受好评,所以本期介绍给大家。
蜉蝣算法
蜉蝣是属于蜉蝣目的昆虫,也属于古翅目昆虫的一部分。首先未成熟的蜉蝣从卵中孵化出来后,会在水中作为水生若虫生长几年。成年后它们将飞出水面,不过此时成年蜉蝣的寿命只有几天,所以这几天的终极目标就是交配,繁衍后代。正所谓“浮游一生,蜉蝣一世。”
为了吸引雌性,大多数成年雄性聚集在离水面几米的地方,通过独特的运动模式来"表演舞蹈"。在大自然中,这种求偶的行为很常见。受到吸引后,雌性飞向群体内,以便在空中与雄性交配。交配完成后,雌性将卵落在水面上,进而将生命周期继续下去。这种虫子其实很常见,记得之前在南昌航空大学念书时宿舍楼前有很大一块草坪,游走在小道中常常会看到浑身绿色,透明翅翼的蜉蝣~
雄性蜉蝣的运动
在求偶过程中,雄性蜉蝣成群结队地聚集在一起,因此每只雄性蜉蝣的位置更新与邻域个体有关:
其中x、v 分别为个体i 在第t 次迭代时的位置和飞行速度,所以这里很像粒子群算法中的位置更新方式。考虑到雄性蜉蝣总是在靠近水面的地方斗舞,所以飞行速度并不会很快:
式中a1=1、a2=1.5是正吸引常数,分别用于衡量认知成分和社会成分的贡献,通俗来讲就是当前个体及最优个体对当前飞行速度的影响程度。pbest为个体i 的历史最优位置,gbest为最优个体位置。 =2 为蜉蝣的能见度系数,控制着可见范围;rp、rg分别表示pbest、x与gbest、x的间距:
对于当前的舞王(最优个体),它就不能像其他蜉蝣那样更新了,得展现出自己独到的一面:
其中d=5为舞技系数,r 为[-1,1]内一随机值。说道蜉蝣的这种行为,我不禁想起了雨中斗舞的情景:
图1 雨中斗舞
雌性蜉蝣的运动
雌性并不抱团,它们会从男神天团中选出自己"适应度排名"相同的心上人然后杀过去,正所谓"门当户对"。所以简单地讲就是在雄性、雌性群体内按照适应度进行排名,配对时执行一一映射的原则。雌性的位置更新方式与雄性相同:
不过它们的飞行速度更新方式大较为相似(适用于最小化问题):
当f(y)>f(x)时,参数定义与前文相同;相反时,r 为[-1,1]内一随机数,fl 为随机游走系数:
fl=1; % Random flight
fl_damp=0.99;
...
fl=fl*fl_damp;交配行为
一一配对后,交叉产生两个子代:
其中male、female分别为父代、母代的位置,L为特定范围内的随机数:
L=unifrnd(0,1,N);%N为种群规模为了控制种群规模,生成子代后若适应度值较优则替换掉对应的较差个体。注意,子代的初始速度为0。至此,算迭代伪代码为:
性能测试
本期我们将MA算法与往期的白骨顶鸡优化算法(COOT)、阿基米德优化算法(AOA)在部分CEC2017测试函数上进行对比测试,取种群规模为30,维度为30,最大迭代次数为10000,计算结果如下:
图2 三个函数在function3上的对比测试
图3 三个函数在function5上的对比测试
图4 三个函数在function21上的对比测试
图5 三个函数在function25上的对比测试
就迭代情况来看,MA算法的性能确实优异!
总结
总体而言,MA算法的结构与粒子群算法有些相似,不过作者将部分参数设置为自适应,这就在处理复杂问题时很吃香。虽然MA算法性能优异,但不得不说,每经过一次迭代,适应度的计算次数过多,所以当以适应度计算次数为评价标准时,MA算法不一定能表现得很优异。值得一提的是,代码中额外引入了一个惯性权重,这是在原文中没有的。可能是作者忘了?谁知道~若有读者需要代码可三连后私聊哦~ |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|