声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~
目录
今天为大家介绍一下性能非常优异的算法——蜣螂优化算法(Dung beetle optimizer, DBO),这个算法灵感来源于蜣螂的生物行为,该算法由Jiankai Xue等人于2023年发表于SCI期刊《The Journal of Supercomputing》上!
这个算法深受大家欢迎,性能非常不错,同时改进空间也非常大。因此,对它改进的学者也非常多,很多改进它的算法甚至都发到了SCI一区期刊上!
谷歌学术上显示,该算法仅发表1年多,就已经被引560次,妥妥的高被引算法!
原理简介
灵感:众所周知,屎壳郎是自然界中一种常见的昆虫,以动物的粪便为食。请注意,蜣螂在世界上大部分地区都有发现,它们在自然界中扮演着分解者的角色,这意味着它们在生态系统中至关重要。研究表明,蜣螂有一个有趣的习惯,就是把粪便揉成一个球,然后把它滚出去,如下图所示。
一、滚球蜣螂
(一)无障碍物时:太阳定位
为了模拟滚球行为,蜣螂需要在整个搜索空间中沿着给定的方向移动。屎壳郎的飞行轨迹如下图所示。在这张图中,我们可以看到蜣螂利用太阳来导航,其中红色箭头表示滚动方向。在本文中,我们假设光源的强度也会影响蜣螂的路径。在滚动过程中,滚球蜣螂的位置被更新,可以表示为:
式中,t表示当前迭代次数,xi (t)表示第i只蜣螂在第t次迭代时的位置信息,k∈(0,0.2]表示一个常数,该常数表示偏转系数,b表示一个属于(0,1)的常数,α是一个自然系数,赋值为-1或1,Xw表示全局最差位置,Δx用于模拟光强的变化。
为了模拟现实世界的复杂环境,本文采用概率法将α设为1或-1(见算法1)。同样,Δx值越高,表示光源越弱。另外,k和b分别设为0.1和0.3。Δx可以促进滚球蜣螂具有以下两个优点:1)在优化过程中尽可能彻底地探索整个问题空间;2)追求更强的搜索性能,减少陷入局部最优的可能性。因此,Xw更适合控制Δx的值来扩展搜索范围。
(二)有障碍物时:跳舞
当屎壳郎遇到障碍物无法前进时,它需要通过跳舞来重新定位自己,目的是获得一条新的路线。值得注意的是,舞蹈行为在滚球的蜣螂中起着重要作用。为了模拟舞蹈行为,我们使用正切函数来获得新的滚动方向。需要说明的是,我们只需要考虑在区间[0,π]上定义的切函数的值,如图3所示。一旦蜣螂成功地确定了一个新的方向,它应该继续向后滚动球。因此,将滚球蜣螂的位置更新定义如下:
式中θ为属于[0,π]的偏转角。
其中,∣xi(t)−xi(t−1)∣为第i只蜣螂在第n次迭代时的位置与在第t−1次迭代时的位置之差。因此,滚球蜣螂的位置更新与当前和历史信息密切相关。请注意,如果θ等于0、π/2或π,则蜣螂的位置不会更新(参见算法2)。
二、产卵行为
一旦确定了产卵区域,雌性蜣螂就会选择这个区域的卵球产卵。需要说明的是,对于DBO算法,每只雌性蜣螂在每次迭代中只产生一个卵。此外,由(3)可以清楚地看出,产卵区的边界范围是动态变化的,这主要是由R值决定的。因此,孵化球的位置在迭代过程中也是动态的,定义为:
式中,Bi (t)为第i个育雏球在第n次迭代时的位置信息,b1和b2表示大小为1 × D的两个独立随机向量,D表示优化问题的维数。注意孵蛋球的位置被严格限制在一定范围内,即产卵区域(见算法3)。
三、觅食蜣螂
一些已经长大成人的蜣螂会从地下钻出来寻找食物(见下图)。在本文中,我们称它们为小蜣螂。此外,我们还需要建立最佳觅食区域来指导甲虫的觅食,并进行模拟这些屎壳郎在自然界的觅食过程。其中,最优觅食区域的边界定义为:
其中Xb为全局最佳位置,Lbb和Ubb分别为最优觅食区域的下界和上界。
因此,小屎壳郎的位置更新如下:
式中,xi (t)表示第i只小蜣螂在第n次迭代时的位置信息,C1表示服从正态分布的随机数,C2表示属于(0,1)的随机向量。
四、偷窃蜣螂
另一方面,有些屎壳郎,被称为小偷,会从其他屎壳郎身上偷粪球。需要指出的是,这是自然界中很常见的现象。由(5)可知,Xb是最优食物源。因此,我们可以假设周围的Xb表示争夺食物的最佳地点。在迭代过程中,小偷的位置信息更新,可以描述为:
式中xi (t)表示第i个贼在第n次迭代时的位置信息,g是大小为1 × D的随机向量,服从正态分布,S表示一个常数。
算法伪代码
为了使大家更好地理解,这边给出作者算法的伪代码,非常清晰!
需要注意的是,每个蜣螂群由四个不同的个体组成,即滚球蜣螂、孵球蜣螂、觅食小蜣螂和小偷蜣螂。更具体地说,在DBO算法中,蜣螂种群包括N个代理,其中每个个体i代表一个候选解决方案。
第i个agent在第n次迭代时的位置向量表示为xi (t)=(xi1(t), xi2(t),…,xiD(t)),其中D为搜索空间的维数。它们的分布比例没有规定,可以根据实际应用问题进行设置。例如,如图8所示,蜣螂群的大小为N = 30。滚球屎壳郎、窝球屎壳郎、小屎壳郎、贼屎壳郎的数量分别为6、6、7、11只。应该注意的是,他们的人数之和应该与设定为30的总人数相同。
如果实在看不懂,不用担心,可以看下源代码,再结合上文公式理解就一目了然了!
性能测评
原文作者在23个基准函数和29个CEC2017测试函数来评估DBO算法的搜索能力。从原文作者的结果可以看出,DBO算法在收敛速度、解精度和稳定性方面与最先进的优化方法具有很大的竞争力。
这边为了方便大家对比与理解,采用23个标准测试函数,即CEC2005,设置种群数量为30,迭代次数为1000,并与性能优异的阿基米德优化算法AOA进行对比!这边展示其中5个测试函数的图,其余十几个测试函数大家可以自行切换尝试!
可以看到,这个算法性能确实不错,在大部分函数上均超越了其他性能同样优异的AOA算法,强烈建议大家应用到各类预测、优化问题中~
参考文献
[1]Xue J, Shen B. Dung beetle optimizer: A new meta-heuristic algorithm for global optimization[J]. The Journal of Supercomputing, 2023, 79(7): 7305-7336.
完整代码
如果需要免费获得图中的完整测试代码,只需点击下方小卡片,再后台回复关键字,不区分大小写:
DBO
也可后台回复个人需求(比如DBO-BP)定制以下DBO算法优化模型(看到秒回):
1.回归/时序/分类预测类:SVM、RVM、LSSVM、ELM、KELM、HKELM、DELM、RELM、DHKELM、RF、SAE、LSTM、BiLSTM、GRU、BiGRU、PNN、CNN、BP、XGBoost、TCN、BiTCN、ESN等等均可~
2.组合预测类:CNN/TCN/BiTCN/DBN/Adaboost结合SVM、RVM、ELM、LSTM、BiLSTM、GRU、BiGRU、Attention机制类等均可(可任意搭配非常新颖)~
3.分解类:EMD、EEMD、VMD、REMD、FEEMD、TVFEMD、CEEMDAN、ICEEMDAN、SVMD、FMD等分解模型均可~
4.路径规划类:机器人路径规划、无人机三维路径规划、冷链物流路径优化、VRPTW路径优化等等~
5.优化类:光伏电池参数辨识优化、储能容量配置优化、微电网优化、PID参数整定优化、无线传感器覆盖优化、故障诊断等等均可~~
6.原创改进优化算法(适合需要创新的同学):原创改进蜣螂优化算法DBO以及哈里斯鹰算法HHO、麻雀算法SSA等任意优化算法均可,保证测试函数效果!