蜣螂优化算法(dung beetle optimizer,DBO)是JiankaXue 和Bo Shen在2022 年提出的一种新型群体智能优化算法[1],其灵感来自于蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为。该算法同时考虑了全局探索和局部开发,从而具有收敛速度快和准确率高的特点,可以有效地解决复杂的寻优问题。本文将对该算法进行原理讲解及程序实现。
1 蜣螂优化算法原理
2 代码目录
3 算法性能
4 总结
自然界中,蜣螂的特点是将粪便滚成球,利用天体线索导航,从而使球沿直线滚动。然而,没有任何光源,屎壳郎的路径就不再是直线了。此外,许多自然因素也会导致屎壳郎偏离原来的方向。再者,屎壳郎可以通过舞蹈来重新确立自己的方向。粪球还可以作为虫卵的繁殖地。除此之外,还有一种偷窃行为,一些蜣螂会把食物作为自己的食物来竞争。
在DBO中,每只蜣螂的位置对应一个解。蜣螂觅食时的行为有五种:滚球,即把粪便滚成一个球,利用天体线索进行导航,从而把球滚成一条直线;跳舞,这让蜣螂重新定位自己;觅食,一些成年蜣螂会从地下钻出来寻找食物;偷窃,一些被称为小偷的蜣螂会从其他蜣螂那里偷取粪球;繁殖,在自然界中,蜣螂会把粪球滚到安全的地方,藏起来进行繁殖。
因此算法中蜣螂种群分为四个部分,分别为滚球蜣螂、育雏球、小蜣螂和小偷蜣螂。滚球蜣螂受各种自然环境影响决更新其运行方向,初步寻找可以安全觅食的位置,育雏球会被产在已知的安全区域内,成长为成虫的蜣螂被称为小蜣螂,小蜣螂会在最佳觅食区觅食,小偷蜣螂也会根据其他蜣螂的位置和最佳觅食区寻找食物。
四种蜣螂位置更新方式如下:
(1)滚球蜣螂
滚球蜣螂以太阳为导航以保证粪球在直线路径上滚动,光源强度、风等自然因素会影响滚球蜣螂的行进路线,
图源文献[1]
式中,代表当前迭代次数,()表示第次迭代时第只蜣螂的位置信息,α 是一个自然系数,表示是否偏离原来方向,根据概率法分配为−1或1, ∈ (0,0.2)表示偏转系数, ∈ (0,1)表示常数,和分别设定为0.1和0.3,表示全局最差位置,Δ用于模拟光强变化。
当蜣螂遇到障碍物而不能前进时,它需要通过跳舞来调整自己的方向,滚球蜣螂跳舞更新位置的公式定义如下:
式中θ ∈ [0, ]表示偏转角,在θ等于0、/2或时,蜣螂的位置不会更新。
(2)育雏球
育雏球采用边界选择策略模拟雌性蜣螂产卵区域,产卵区域的定义为:
式中,∗表示当前的局部最佳位置,∗和∗分别表示产卵区的下限和上限, = 1 −/,表示最大迭代数,和分别代表优化问题的下限和上限。
式中,()是第次迭代时第个育雏球的位置信息,1和2代表两个大小为1×D 的独立随机向量,D 表示优化问题的维度。
(3)小蜣螂
需要建立一个最优觅食区域,指导幼体蜣螂寻找食物并模拟其觅食行为,其中最优觅食区域定义为:
式中,b表示当前的局部最佳位置,b和b分别表示最佳觅食区的下限和上限
式中,()是第次迭代时第只小蜣螂的位置信息,1表示遵循正态分布的随机数,2 ∈(0,1)表示随机向量。
(4)小偷蜣螂
Xb是食物竞争的最佳位置,因此小偷蜣螂位置更新方式如下:
式中,()第只小偷蜣螂在第次迭代的位置信息,g 表示一个遵循正态分布的大小为1×D的随机向量,S表示一个常数值。
综上所述,DBO 算法主要分为六个步骤。
1)初始化蜣螂种群和DBO 算法的参数;
2)根据目标函数计算所有蜣螂位置的适度值;
3)更新所有蜣螂的位置;
4)判断每个更新后的蜣螂是否出了边界;
5)更新当前最优解及其适度值;
6)重复上述步骤,在达到最大迭代次数后,输出全局最优值及其最优解。[2]
代码获取方式见文末
采用CEC的一个测试函数来初步检验其寻优性能,得到结果如下:
本文介绍了蜣螂优化算法的原理及其MATLAB实现,蜣螂优化算法虽然具有寻优能力强,收敛速度快的特点,但同时也存在全局探索和局部开发能力不平衡,容易陷入局部最优,且全局探索能力较弱的缺点,因此作者将在后面的文章中继续介绍其改进方法。
参考文献
[1] Xue Jiankai, Shen Bo. Dung beetle optimizer: a new meta-heuristic algorithm for global optimization[J]. Journal of Supercomputing, 2023,79(7):7305-7336.
[2]潘志远,卜凡亮.基于蜣螂算法优化的DV-Hop定位算法[J/OL].电子测量与仪器学报:1-10[2023-08-16].http://43.138.60.40/kcms/detail/11.2488.TN.20230803.1820.026.html
代码在作者微信公众号 KAU的云实验台 回复: DBO (大写字母) 获取
另:如果有伙伴有待解决的优化问题(各种领域都可),可以发我,我会选择性的更新利用优化算法解决这些问题的文章。
如果这篇文章对你有帮助或启发,可以点击右下角的赞(ง•̀_•́)ง(不点也行)