【蚁狮算法】《The Ant Lion Optimizer》原文翻译(附源代码)

简介: 【蚁狮算法】《The Ant Lion Optimizer》原文翻译(附源代码)

1. 原文


《The Ant Lion Optimizer》

传送门:http://dx.doi.org/10.1016/j.advengsoft.2015.01.010


第一次精读英文文献,翻译不是特别准确,还请见谅!部分描述性语言有所修改,背景类陈述句有所删减。



2. 算法灵感来源


蚁狮(Antlions)的生命周期包括两个主要阶段:幼虫和成虫,总寿命可能长达 3 年,主要发生在幼虫阶段中(成年仅 3-5 周)。蚁狮在茧中经历变态成为成年。它们大多在幼虫中捕食,成年期是为了繁殖。


蚁狮幼虫沿着圆形路径移动并用其巨大的下颚将沙子扔出,从而在沙子中挖出一个锥形坑。挖完陷阱后,幼虫隐藏在锥体底部并等待昆虫(蚂蚁)被困在坑中 。锥体的边缘足够锋利,昆虫很容易掉到陷阱底部。一旦蚁狮意识到猎物在陷阱中,它就会试图抓住它。


然而,昆虫通常不会立即被捕获并试图逃离陷阱。在这种情况下,蚁狮会智能地将沙子扔到坑的边缘,以将猎物滑入坑底。当猎物被抓到下巴时,它会被拉到土壤下并被吃掉。吃完猎物后,蚁狮将猎物残骸扔到坑外,并修改坑进行下一次狩猎。


在蚁狮的生活方式中观察到的另一个有趣的行为是陷阱大小和两件事的相关性:饥饿程度和陷阱的形状。当蚁狮越饿或者陷阱变得更加圆时,它们往往会挖出更大的陷阱。它们已经以这种方式进化和适应,以提高它们的生存机会。




锥形陷阱和蚁狮的狩猎行为


3. 数学模型


ALO 算法模拟陷阱中蚁狮和蚂蚁之间的相互作用。为了模拟这种相互作用,蚂蚁需要在搜索空间上移动,并且允许蚁狮猎杀它们并使用陷阱变得更有效。由于蚂蚁在寻找食物时在自然界中是随机移动的,因此选择随机游走来模拟蚂蚁的运动,如下式所示:



其中  是计算的累积和, 是最大迭代次数, 是一个随机函数,定义如下:



其中  表示随机游走的步长(本研究中的迭代), 是在 [0, 1] 区间内均匀分布生成的随机数。


在优化过程中,在以下矩阵中保存蚂蚁的位置:



其中  是保存每只蚂蚁位置的矩阵, 表示第 i 只蚂蚁的第 j 个变量(维度)的值,n 是蚂蚁的数量,d 是变量的数量。蚂蚁的位置是指特定解决方案的参数。 矩阵在优化过程中保存了所有蚂蚁的位置(所有解的变量)。


为了评估每只蚂蚁,在优化过程中使用了一个适应度(目标)函数,下面的矩阵存储了所有蚂蚁的适应度值:



其中  是保存每只蚂蚁适应度的矩阵, 表示第 i 只蚂蚁的第 j 维值,n 是蚂蚁的数量,f 是目标函数。


除了蚂蚁,我们假设蚁狮也隐藏在搜索空间的某个地方。为了保存它们的位置和适应度值,使用了以下矩阵:



其中  是保存每个蚁狮位置的矩阵, 表示第 i 个蚁狮的第 j 个维度的值,n 是蚁狮的数量,d 是变量(维度)的数量。



其中  是保存每个蚁狮适应度的矩阵, 表示第 i 个蚁狮的第 j 维值,n 是蚁狮的数量,f 是目标函数。


在优化期间,应满足以下条件:


蚂蚁使用不同的随机游走在搜索空间中移动;

随机游走应用于蚂蚁的所有维度;

随机游走受到蚁狮陷阱的影响;

蚁狮可以建造与其适应度成比例的坑(适应度越高,坑越大);

坑较大的蚁狮捕获蚂蚁的概率较高;

每只蚂蚁在每次迭代中都可以被一只精英蚁狮捕获;

随机游走的范围自适应减小以模拟蚂蚁向蚁狮滑动;

如果一只蚂蚁比蚁狮的适应度更优,这意味着它被蚁狮抓住并拉到沙子下;

蚁狮会根据最新捕获的猎物重新定位,并建造一个坑以改善每次狩猎后捕获另一个猎物的变化。


3.1 蚂蚁的随机游走


随机游走都是基于公式 。 蚂蚁在优化的每一步都通过随机游走来更新它们的位置。但是,由于每个搜索空间都有一个边界(变量范围),因此,上式不能直接用于更新蚂蚁的位置。为了将随机游走保持在搜索空间内,使用以下等式对它们进行归一化(最小-最大归一化):



其中  是第 i 个变量的随机游走的最小值,  是第 i 个变量中的随机游走的最大值, 是在第 t 次迭代时第 i 个变量的最小值, 表示第 t 次迭代的第 i 个变量的最大值。上式应在每次迭代中应用,以保证在搜索空间内随机游走的发生。


(原文感觉有点问题,我的理解是:



其中  是第 i 个变量的随机游走的最小值,  是第 i 个变量中的随机游走的最大值, 是在第 t 次迭代时第 i 个变量的最小值, 表示第 t 次迭代的第 i 个变量的最大值。)


3.2 困在蚁狮的坑里


如上所述,蚂蚁的随机游走会受到蚁狮陷阱的影响。为了对这一假设进行数学建模,提出了以下等式:



其中  是第 t 次迭代时所有变量的最小值, 表示包含第 t 次迭代时所有变量的最大值的向量, 是第 i 次蚂蚁的所有变量中的最小值, 是第 i 只蚂蚁的所有变量,而  显示了在第 t 次迭代中选定的第 j 只蚂蚁的位置。上式表明蚂蚁在一个由向量 c 和 d 定义的超球面中随机行走,该超球面围绕一个选定的蚁狮。


3.3 构建陷阱


为了模拟蚁狮的狩猎能力,使用了轮盘选择法。假设蚂蚁只被困在一个选定的蚁狮中。 ALO 算法需要利用轮盘选择法在优化过程中根据它们的适应度来选择蚁狮。这种机制为适应度更高的蚁狮捕捉蚂蚁提供了很高的机会。



3.4 将蚂蚁滑向蚁狮


通过目前提出的机制,蚁狮能够建立与其适应度成比例的陷阱,并且蚂蚁需要随机移动。然而,一旦蚁狮意识到有一只蚂蚁在陷阱中,它们就会从坑的中心向外射沙。这种行为会滑下试图逃跑的被困蚂蚁。为了对这种行为进行数学建模,蚂蚁随机游走超球面的半径会自适应地减小。在这方面提出了以下公式:





其中  是一个比率, 是第  次迭代时所有变量的最小值, 表示包含第  次迭代时所有变量的最大值的向量。



(根据后面的代码修改了公式)


其中  是当前迭代次数, 是最大迭代次数, 是基于当前迭代定义的常数(当  > 0.1 时  = 2,当  > 0.5 时 = 3,当  > 0.75 时  = 4,当  > 0.9 时  = 5,当  > 0.95 时  = 6)。基本上,常数  可以调整开发的精度水平。


3.5 捕捉猎物并重建坑


狩猎的最后阶段是当一只蚂蚁到达坑底并被蚁狮的下巴抓住时。在这个阶段之后,蚁狮将蚂蚁拉入沙子并吃掉它的身体。为了模拟这个过程,假设当蚂蚁变得比其相应的蚁狮更健康(进入沙子内)时,就会发生捕捉猎物。然后要求蚁狮将其位置更新为被猎杀蚂蚁的最新位置,以增加其捕捉新猎物的机会。在这方面提出以下公式:



其中  表示当前迭代,  表示在第  次迭代时选择的第  个蚁狮的位置,而  表示在第  次迭代时第  只蚂蚁的位置。


3.6 精英化


精英化是进化算法的一个重要特征,它允许它们保持在优化过程的任何阶段获得的最佳解决方案。在这项研究中,迄今为止在每次迭代中获得的最佳蚁狮被保存并被视为精英。由于精英是最适体的蚁狮,它应该能够在迭代过程中影响所有蚂蚁的运动。因此,假设每只蚂蚁通过轮盘赌和精英同时随机围绕一只选定的蚂蚁走动,如下所示:



其中  是在第 t 次迭代时轮盘选择的蚁狮随机游走, 是第 t 次迭代时围绕精英的随机游走, 表示第  只蚂蚁在第  次迭代的位置。


4. ALO算法


使用前面小节中建议的运算符,现在可以定义 ALO 优化算法。 ALO 算法被定义为一个三元组函数,它近似于优化问题的全局最优值,如下所示:



其中  是生成随机初始解的函数, 操作由函数  提供的初始总体,当满足结束标准时, 返回 true。函数 、 和  定义如下:



其中  为蚂蚁位置矩阵, 包含蚁狮的位置, 包含蚂蚁对应的适应度, 包含蚁狮的适应度。


ALO算法的伪代码定义如下:



随机初始化第一代蚂蚁和蚁狮,计算蚂蚁和蚁狮的适应度,找到最好的蚁狮并假设它是精英(确定最优)。


当未满足结束条件时:对于每一只蚂蚁,使用轮盘赌选择一只蚁狮,根据公式 更新 ,使用公式  创建一个蚂蚁随机游走的位置信息,并用公式  对其进行归一化,再使用公式  更新蚂蚁的位置。


当满足结束条件时:计算所有蚂蚁的适应度,如果蚁狮对应的蚂蚁适应度变得更高,则用相应的蚂蚁替换该蚁狮,如果蚁狮变得比精英适应度更高,则更新精英。


从理论上讲,由于以下原因,所提出的 ALO 算法能够逼近优化问题的全局最优:


蚁狮的随机选择和蚂蚁在它们周围的随机游走保证了对搜索空间的探索;

蚁狮陷阱的自适应收缩边界保证了对搜索空间的利用;

由于使用随机游走和轮盘赌,解决局部最优停滞的可能性很高;

ALO 是一种基于种群的算法,因此局部最优避免本质上很高;

蚂蚁的运动强度在迭代过程中自适应降低,从而保证了 ALO 算法的收敛性;

计算每只蚂蚁和每个维度的随机游走可以促进种群的多样性;

蚁狮在优化过程中重新定位到最佳蚂蚁的位置,因此节省了搜索空间的有希望的区域;

Antlions 将蚂蚁引导到搜索空间的有希望的区域;

保存每次迭代中最好的蚁狮,并与迄今为止获得的最好蚁狮(精英)进行比较;

ALO 算法需要调整的参数很少;

ALO 算法是一种无梯度算法,将问题视为黑盒。


5. 代码下载


附录 A.1-A.3 中提供了 ALO 算法的总体框架以及函数 A 和 B 的 Matlab 代码。在 ALO 算法中,蚁狮和蚂蚁矩阵使用函数 A 随机初始化。在每次迭代中,函数 B 更新每个蚂蚁相对于轮盘赌操作员和精英选择的蚁狮的位置。位置更新的边界首先定义为与当前迭代次数成正比。然后通过围绕选定的蚁狮和精英进行两次随机游走来完成更新位置。当所有蚂蚁随机行走时,通过适应度函数对其进行评估。如果任何蚂蚁变得比任何其他蚁狮适应度更高,它们的位置将被视为下一次迭代中蚁狮的新位置。将最佳蚁狮与优化期间发现的最佳蚁狮(精英)进行比较,并在必要时进行替换。这些步骤迭代,直到函数 C 返回 false。








ALO 算法和工具箱的源代码可以从 Seyedali Mirjalili 或 Seyedali Mirjalili - MATLAB Central 下载。


(原作者已经贴出代码了,大家不用再去其他地方买了,代码亲测可用)


6. 代码运行效果


At iteration 50 the elite fitness is 715.8968
At iteration 100 the elite fitness is 3.8956
At iteration 150 the elite fitness is 2.4028
At iteration 200 the elite fitness is 0.76184
At iteration 250 the elite fitness is 0.31627
At iteration 300 the elite fitness is 0.0020786
At iteration 350 the elite fitness is 0.0014784
At iteration 400 the elite fitness is 5.6721e-05
At iteration 450 the elite fitness is 8.357e-06
At iteration 500 the elite fitness is 3.1738e-09
The best solution obtained by ALO is : -7.714e-06  -3.909e-06  -1.949e-05  1.4619e-05 -3.3613e-05  2.7574e-05 -9.5583e-06 -2.0972e-05   7.966e-06 -4.5451e-06
The best optimal value of the objective funciton found by ALO is : 3.1738e-09


相关文章
|
4月前
|
算法 语音技术 计算机视觉
【MATLAB】ALO蚁狮算法优化的VMD信号分解算法
【MATLAB】ALO蚁狮算法优化的VMD信号分解算法
57 0
【MATLAB】ALO蚁狮算法优化的VMD信号分解算法
|
8月前
|
机器学习/深度学习 传感器 算法
路径规划算法:基于蚁狮优化的机器人路径规划算法- 附matlab代码
路径规划算法:基于蚁狮优化的机器人路径规划算法- 附matlab代码
|
11月前
|
算法 Linux iOS开发
Python 源代码里的算法——如何合并多个有序列表并使得结果依然有序?
Python 源代码里的算法——如何合并多个有序列表并使得结果依然有序?
84 0
|
11月前
|
算法 Python
以为是高性能神仙算法,一看源代码才发现...
以为是高性能神仙算法,一看源代码才发现...
76 0
|
算法 C++ Python
压入弹出堆栈算法-附LeetCode剑指 Offer 31. 栈的压入、弹出序列-题解-python && C++源代码
压入弹出堆栈算法-附LeetCode剑指 Offer 31. 栈的压入、弹出序列-题解-python && C++源代码
压入弹出堆栈算法-附LeetCode剑指 Offer 31. 栈的压入、弹出序列-题解-python && C++源代码
|
机器学习/深度学习 传感器 算法
【优化调度】基于蚁狮算法求解经济调度问题附matlab代码
【优化调度】基于蚁狮算法求解经济调度问题附matlab代码
|
机器学习/深度学习 算法 调度
【经济调度】基于蚁狮算法解决经济调度优化问题附matlab代码
【经济调度】基于蚁狮算法解决经济调度优化问题附matlab代码
【经济调度】基于蚁狮算法解决经济调度优化问题附matlab代码
|
算法 C# 图形学
“对不起,我选择摸鱼”—《扫雷》小游戏开发实战,算法、源代码,基于Unity3D开发
今天又是摸鱼...哦不..工作的一天,今天整一个很经典的Win系统自带游戏——《扫雷》,话说安装Win10之后就找不到《扫雷》游戏了,很难受。 《扫雷》游戏的玩法是,在不触碰到任何地雷的情况下去发现一个雷区。 揭开一个没有地雷的块之后,将会显示一个数字来表示周围地雷的数量。 跟往常一样,会尽量的将步骤详细说明,代码也进行注释,可以让大家都可以理解。
|
人工智能 算法
Ostu算法的Matlab源代码以及程序解析
Ostu算法的Matlab源代码以及程序解析