蚁狮优化算法( Ant Lion Optimizer,ALO)-Matlab源码

240 阅读8分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

获取更多资讯,赶快关注公众号(名称:智能制造与智能调度,公众号:deeprlscheduler)吧!

蚁狮优化器Ant Lion Optimizer (ALO)

2015年,Seyedali Mirjalili提出了一种新型的受自然启发的算法——蚁狮优化算法(Ant Lion Optimizer ,ALO),该算法模模仿了自然界中蚁狮在捕猎蚂蚁时的智能行为。==关注公众号后发送“蚁狮”或“ALO”获取Matlab源码下载链接!==

启发

蚁狮属于蚁蛉科,为脉翅目类昆虫。蚁狮的生命周期包括两个主要阶段:幼虫和成虫,自然总寿命可达3年,主要发生在幼虫(成年期为3-5周)。

它们的名字源于它们独特的捕猎行为和它们最喜爱的猎物。一只蚁狮幼虫沿着一条圆形的路径在沙子里挖出一个圆锥形的坑,并用它巨大的下颚把沙子扔出去。图1(a)显示了几个不同大小的锥状坑。挖好陷阱后,幼虫藏在圆锥体的底部(作为一个坐等捕食者),等待昆虫(最好是蚂蚁)被困在坑里,如拖1(b)所示。锥的边缘很急剧,昆虫可以很容易地掉到陷阱的底部。一旦蚁狮意识到猎物在陷阱里,它就会试图抓住它。然而,昆虫通常不会立即被捕捉,它们会试图逃离陷阱。在这种情况下,蚁群会聪明地将沙子扔向洞穴边缘,将猎物滑入洞穴底部。当猎物被抓住时,它会被拉到土壤下面被吃掉。吃掉猎物后,蚁狮会把剩下的猎物扔到坑外,并修复坑为下次捕猎做准备。

在这里插入图片描述

图1 左(a),右(b)。锥状陷阱和蚁狮的捕猎行为

另一个观察到的关于蚁狮生活方式的有趣行为是陷阱的大小和两件事的相关性:饥饿程度月亮形状。当蚁狮感到饥饿或者月圆时,往往会挖出更大的陷阱。它们已经进化并适应了这种方式来提高它们的生存机会。人们还发现,安狮子不会直接通过观察月亮的形状来决定陷阱的大小,但它有一个内部的月球时钟来做出这样的决定。

ALO算子

ALO算法模拟了蚁狮和陷阱中的蚂蚁之间的交互,为了模拟这种交互作用,蚂蚁需要在搜索空间中移动,而蚁狮则可以捕猎它们。由于蚂蚁在自然界中寻找食物时是随机移动的,因此通过选择一个==随机行走==来模拟蚂蚁的运动:

X(t)=[0, cumsum (2r(t1)1), cumsum (2r(t2)1),, cumsum (2r(tn)1)](1)X(t)=\left[0, \text { cumsum }\left(2 r\left(t_{1}\right)-1\right), \text { cumsum }\left(2 r\left(t_{2}\right)-1\right), \ldots, \text { cumsum }\left(2 r\left(t_{n}\right)-1\right)\right]\tag{1}

其中cumsum\text {cumsum}计算了累积和,nn为最大迭代次数,tt表示随机游走的步数(即迭代),r(t)r(t)通过以下定义的随机函数:

r(t)={1 if rand >0.50 if rand 0.5(2)r(t)=\left\{\begin{array}{ll} 1 & \text { if rand }>0.5 \\ 0 & \text { if rand } \leqslant 0.5 \end{array}\right.\tag{2}

其中randrand为[0,1]内服从均匀分布的随机数。

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

MAnt=[A1,1A1,2A1,dA2,1A2,2A2,d:::::::An,1An,2An,d](3)M_{A n t}=\left[\begin{array}{ccccc} A_{1,1} & A_{1,2} & \ldots & \ldots & A_{1, d} \\ A_{2,1} & A_{2,2} & \ldots & \ldots & A_{2, d} \\ : & : & : & : & \vdots \\ : & \vdots & : & : & \vdots \\ A_{n, 1} & A_{n, 2} & \ldots & \ldots & A_{n, d} \end{array}\right]\tag{3}

其中MAntM_{A n t}为用于存储每只蚂蚁位置的矩阵,Ai,jA_{i,j}为第ii只蚂蚁的第jj个变量(维度)的值,nn为蚂蚁数量,dd为变量个数。这里的蚂蚁有点类似于PSO中的粒子,矩阵MAntM_{A n t}中保存了所有蚂蚁的位置(所有解的变量)。

采用如下的适应度函数评估每只蚂蚁的目标值:

MOA=[f([A1,1,A1,2,,A1,d])f([A2,1,A2,2,,A2,d])f([An,1,An,2,,An,d])](4)M_{O A}=\left[\begin{array}{c} f\left(\left[A_{1,1}, A_{1,2}, \ldots, A_{1, d}\right]\right) \\ f\left(\left[A_{2,1}, A_{2,2}, \ldots, A_{2, d}\right]\right) \\ \vdots \\ \vdots \\ f\left(\left[A_{n, 1}, A_{n, 2}, \ldots, A_{n, d}\right]\right) \end{array}\right]\tag{4}

其中MOAM_{O A}中保存了每只蚂蚁的适应度值,ff为目标函数。

除了蚂蚁,我们认为蚁狮也隐藏在搜索空间的某个地方,同样它也有对应的位置矩阵和适应度值矩阵:

MAntlion=[AL1,1AL1,2AL1,dAL2,1AL2,2AL2,d:::::ALn,1ALn,2ALn,d](5)M_{\text {Antlion}}=\left[\begin{array}{ccccc} A L_{1,1} & A L_{1,2} & \ldots & \ldots & A L_{1, d} \\ A L_{2,1} & A L_{2,2} & \ldots & \ldots & A L_{2, d} \\ : & : & \vdots & : & : \\ \vdots & \vdots & \vdots & : & \vdots \\ A L_{n, 1} & A L_{n, 2} & \ldots & \ldots & A L_{n, d} \end{array}\right]\tag{5}

其中MAntlionM_{\text {Antlion}}为每只蚁狮的位置矩阵,ALi,jA L_{i,j}为第ii只蚁狮的第jj个维度的值,nn为蚁狮数量,dd为变量个数(维度)。

M0AL=[f([AL1,1,AL1,2,,AL1,d])f([AL2,1,AL2,2,,AL2,d])f([ALn,1,ALn,2,,ALn,d])](6)M_{0 A L}=\left[\begin{array}{c} f\left(\left[A L_{1,1}, A L_{1,2}, \ldots, A L_{1, d}\right]\right) \\ f\left(\left[A L_{2,1}, A L_{2,2}, \ldots, A L_{2, d}\right]\right) \\ \vdots \\ \vdots \\ f\left(\left[A L_{n, 1}, A L_{n, 2}, \ldots, A L_{n, d}\right]\right) \end{array}\right]\tag{6}

M0ALM_{0 A L}为保存每只蚁狮适应度值的矩阵,ff为目标函数。

优化时需要满足以下条件:

  • 蚂蚁使用不同的随机游走在搜索空间中移动。
  • 随机游走应用于蚂蚁的所有维数。
  • 随机游走受到蚁狮陷阱的影响。
  • 蚁狮可以建立与适合度成比例的坑(适合度越高,坑越大)。
  • 坑大的蚁狮更容易捉到蚂蚁。
  • 每只蚂蚁都可以在每次迭代中被一只蚁狮和精英(最优的蚁狮)捕获。
  • 自适应地减小随机游走范围来模拟蚂蚁滑向蚁狮。
  • 如果蚂蚁优于蚁狮,这意味着它会被蚁狮抓住并拖到沙子下面。
  • 蚁狮会根据最近捕获的猎物重新定位,并筑起一个坑来改善每次捕猎后捕获另一个猎物的变化。

随机游走

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

Xit=(Xitai)×(dicit)(ditai)+ci(7)X_{i}^{t}=\frac{\left(X_{i}^{t}-a_{i}\right) \times\left(d_{i}-c_{i}^{t}\right)}{\left(d_{i}^{t}-a_{i}\right)}+c_{i}\tag{7}

其中aia_{i}为第ii个变量随机游走的最小值,did_i是最大值。citc_{i}^{t}是第tt次迭代中第ii个变量的最小值,ditd_{i}^{t}是第tt次迭代中第ii个变量的最大值。

在每次迭代中都需要使用式(7),以保证搜索空间内出现随机游走。

困于蚁狮坑

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

cit=Antlionjt+ct(8)c_{i}^{t}=\text {Antlion}_{j}^{t}+c^{t}\tag{8}
dit=Antlionjt+dt(9)d_{i}^{t}=\text {Antlion}_{j}^{t}+d^{t}\tag{9}

其中ctc^{t}为第tt次迭代中所有变量的最小值,dtd^{t}为第tt次迭代中所有变量的最大值,citc_{i}^{t}为第ii只蚂蚁所有变量的最小值,ditd_{i}^{t}为第ii只蚂蚁所有变量的最大值,Antlionjt\text {Antlion}_{j}^{t}表示第tt次迭代中选择的第jj只蚁狮的位置。

式(8)和(9)表达了由向量ccdd所定义的超球面中所选择的蚁狮附近的蚂蚁随机游走,如图3所示。

在这里插入图片描述

图3 蚂蚁在蚁狮陷阱内的随机游走

构造陷阱

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

蚂蚁滑向蚁狮

根据目前提出的机制,蚁狮可以根据自身的适合度设置陷阱,而且蚂蚁需要随机移动。然而,一旦蚁狮意识到有一只蚂蚁被困在陷阱里,它们就会把沙子从洞中央往外喷。这种行为可以将试图逃跑的被困蚂蚁滑选。通过自适应地减小蚁群随机游走超球面半径,建立了蚁群随机游走超球面的数学模型:

ct=ctI(10)c^{t}=\frac{c^{t}}{I}\tag{10}
dt=dtI(11)d^{t}=\frac{d^{t}}{I}\tag{11}

其中II为比率,其中ctc^{t}为第tt次迭代中所有变量的最小值,dtd^{t}为第tt次迭代中所有变量的最大值。

在式(10)和(11)中,I=10wtTI=10^{w} \frac{t}{T},其中tt为当前迭代,TT为最大迭代次数,ww是根据当前迭代定义的常量(==t>0.1Tt>0.1Tw=2w=2t>0.5Tt>0.5Tw=3w=3t>0.75Tt>0.75Tw=4w=4t>0.9Tt>0.9Tw=5w=5t>0.95Tt>0.95Tw=6w=6==)。ww可以调整利用的精度水平,如图4所示。该方程缩小了蚂蚁位置的更新半径,模拟了蚂蚁在坑内的滑动过程,从而保证了在搜索空间内进行利用。

在这里插入图片描述

图4 自适应的上下界

捕捉猎物和重建坑

捕猎的最后阶段是当一只蚂蚁到达洞穴底部时被蚁狮的下巴夹住。过了这个阶段,蚁狮就把蚂蚁拉进沙子里并吃掉它的身体。为了模拟这个过程,==假设当蚂蚁比对应的蚁狮更适应(进入沙子里)时,捕获猎物就会出现==。然后,蚁狮需要将自己的位置更新到被猎杀蚂蚁的最新位置,以增加它捕捉新猎物的机会。对此有如下公式:

 Antlion jt=Antit if f(Antit)>f(Antlionjt)(12)\text { Antlion }_{j}^{t}=A n t_{i}^{t} \quad \text { if } f\left(A n t_{i}^{t}\right)>f\left(\text {Antlion}_{j}^{t}\right)\tag{12}

 Antlion jt\text { Antlion }_{j}^{t}表示第tt次迭代中第jj只蚁狮的位置, Ant it\text { Ant }_{i}^{t}表示第tt次迭代中第ii只蚂蚁的位置

精英

精英主义是进化算法的一个重要特征,它使进化算法能够在优化过程的任何阶段保持获得的最佳解。在本研究中,保存到目前为止在每个迭代中获得的==最佳蚁狮==,并将其视为一个精英。因为精英是最适合的蚁狮,它应该能够在迭代过程中影响所有蚂蚁的运动。因此,假设每只蚂蚁同时围绕通过轮盘赌随机选择的蚁狮和精英进行随机游走,有如下:

Antit=RAt+REt2(13)A n t_{i}^{t}=\frac{R_{A}^{t}+R_{E}^{t}}{2}\tag{13}

其中RAtR_{A}^{t}为在第tt次迭代中围绕根据轮盘赌选择的蚁狮的随机游走,REtR_{E}^{t}为在第tt次迭代中围绕精英的随机游走,AntitA n t_{i}^{t}表示第tt次迭代中第ii只蚂蚁的位置。

ALO算法

根据上述提出的算子,现在可以定义ALO优化算法。该算法被定义为一个三元组函数,用于逼近优化问题的全局最优,如下所示: ALO(A,B,C)\tag{14}

其中AA用于生成随机初始解,BB用于对初始解进行操作,当满足终止条件时CC返回true。函数A,B,CA,B,C的定义如下:

A{MAnt,MOA,MAntlion,MOAL}(15)\emptyset \stackrel{A}{\longrightarrow}\left\{M_{A n t}, M_{O A}, M_{A n t l i o n}, M_{O A L}\right\}\tag{15}
{MAnt,MAntlion}B{MAnt,MAntlion}(16)\left\{M_{A n t}, M_{A n t l i o n}\right\} \stackrel{B}{\rightarrow}\left\{M_{A n t}, M_{A n t l i o n}\right\}\tag{16}
{MAnt,MAntlion}C{true, false}(17)\left\{M_{A n t}, M_{\text {Antlion}}\right\} \stackrel{C}{\rightarrow}\{\text {true, false}\}\tag{17}

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

在这里插入图片描述

图5 ALO算法伪代码