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

目录

1. 原文

2. 算法灵感来源

3. 数学模型

3.1 蚂蚁的随机游走

3.2 困在蚁狮的坑里

3.3 构建陷阱

3.4 将蚂蚁滑向蚁狮

3.5 捕捉猎物并重建坑

3.6 精英化

4. ALO算法

5. 代码下载

6. 代码运行效果


1. 原文

《The Ant Lion Optimizer》
传送门:http://dx.doi.org/10.1016/j.advengsoft.2015.01.010

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


2. 算法灵感来源

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

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

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

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

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

3. 数学模型

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

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

其中 cumsum 是计算的累积和,n 是最大迭代次数,r(t) 是一个随机函数,定义如下:
r(t)=\left\{\begin{array}{ll} 1 & \text { if rand }>0.5 \\ 0 & \text { if rand } \leqslant 0.5 \end{array}\right.

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

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

M_{\text {Ant }}=\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} \\ : & : & : & : & : \\ : & : & : & : & : \\ A_{n, 1} & A_{n, 2} & \ldots & \ldots & A_{n, d} \end{array}\right]

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

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

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]

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

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

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} \\ : & : & : & : & : \\ : & : & : & : & : \\ A L_{n, 1} & A L_{n, 2} & \ldots & \ldots & A L_{n, d} \end{array}\right]

其中 M_{\text {Antlion }} 是保存每个蚁狮位置的矩阵,A_{Li,j} 表示第 i 个蚁狮的第 j 个维度的值,n 是蚁狮的数量,d 是变量(维度)的数量。

M_{O 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]

其中 M_{O A L} 是保存每个蚁狮适应度的矩阵,A_{Li,j} 表示第 i 个蚁狮的第 j 维值,n 是蚁狮的数量,f 是目标函数。

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

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

3.1 蚂蚁的随机游走

随机游走都是基于公式X(t)=\left[0, \operatorname{cumsum}\left(2 r\left(t_{1}\right)-1\right), \text { cumsum }\left(2 r\left(t_{2}\right)-1\right), \ldots, \operatorname{cumsum}\left(2 r\left(t_{n}\right)-1\right)\right] 。 蚂蚁在优化的每一步都通过随机游走来更新它们的位置。但是,由于每个搜索空间都有一个边界(变量范围),因此,上式不能直接用于更新蚂蚁的位置。为了将随机游走保持在搜索空间内,使用以下等式对它们进行归一化(最小-最大归一化):

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}

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

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

X_{i}^{t}=\frac{\left(X_{i}^{t}-a_{i}\right) \times\left(d_{i}^{t}-c_{i}^{t}\right)}{\left(d_{i}-a_{i}\right)}+c_{i}^{t}

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

3.2 困在蚁狮的坑里

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

\begin{array}{l} c_{i}^{t}=\text { Antlion }_{j}^{t}+c^{t} \\ d_{i}^{t}=\text { Antlion }_{j}^{t}+d^{t} \end{array}

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

3.3 构建陷阱

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

3.4 将蚂蚁滑向蚁狮

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

c^{t}=\frac{c^{t}}{I}

d^{t}=\frac{d^{t}}{I}

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

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

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

3.5 捕捉猎物并重建坑

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

\text { Antlion }_{j}^{t}=Ant_{i}^{t} \quad \text { if } f\left(Ant_{i}^{t}\right)>f\left(\text {Antlion}_{j}^{t}\right)

其中 t 表示当前迭代, {Antlion}_{j}^{t} 表示在第 t 次迭代时选择的第 j 个蚁狮的位置,而 Ant_{i}^{t} 表示在第 t 次迭代时第 i 只蚂蚁的位置。

3.6 精英化

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

Ant_{i}^{t}=\frac{R_{A}^{t}+R_{E}^{t}}{2}

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

4. ALO算法

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

 ALO(A,B,C)

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

 \begin{array}{l} \emptyset \stackrel{A}{\rightarrow}\left\{M_{\text {Ant }}, M_{O A}, M_{\text {Antlion }}, M_{O A L}\right\} \\ \left\{M_{\text {Ant }}, M_{\text {Antlion }}\right\} \stackrel{B}{\rightarrow}\left\{M_{\text {Ant }}, M_{\text {Antlion }}\right\} \\ \left\{M_{\text {Ant }}, M_{\text {Antlion }}\right\} \stackrel{C}{\rightarrow}\{\text { true }, \text { false }\} \end{array}

其中 M_{Ant} 为蚂蚁位置矩阵,M_{Antlion} 包含蚁狮的位置,M_{OA} 包含蚂蚁对应的适应度,M_{OAL} 包含蚁狮的适应度。

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

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

当未满足结束条件时:对于每一只蚂蚁,使用轮盘赌选择一只蚁狮,根据公式 c^{t}=\frac{c^{t}}{I}d^{t}=\frac{d^{t}}{I} 更新 c^td^t,使用公式 X(t)=\left[0, \operatorname{cumsum}\left(2 r\left(t_{1}\right)-1\right), \text { cumsum }\left(2 r\left(t_{2}\right)-1\right), \ldots, \operatorname{cumsum}\left(2 r\left(t_{n}\right)-1\right)\right] 创建一个蚂蚁随机游走的位置信息,并用公式 X_{i}^{t}=\frac{\left(X_{i}^{t}-a_{i}\right) \times\left(d_{i}^{t}-c_{i}^{t}\right)}{\left(d_{i}-a_{i}\right)}+c_{i}^{t} 对其进行归一化,再使用公式 Ant_{i}^{t}=\frac{R_{A}^{t}+R_{E}^{t}}{2} 更新蚂蚁的位置。

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

从理论上讲,由于以下原因,所提出的 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 下载。

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

有朋友私信问为什么运行的时候报错显示少参数,可以直接运行main.m文件哈,就不会有这个问题了。

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 

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
蚁狮算法Antlion Optimizer, ALO)是一种新型的优化算法,其灵感来源于蚂蚁和蚁狮的捕猎行为。该算法通过模拟蚂蚁的觅食行为和蚁狮的捕猎行为,实现全局优化。ALO在许多实际问题中已经得到了成功应用,如神经网络、数据挖掘、图像处理等领域。 以下是蚁狮算法的MATLAB代码示例: ``` function [Best_score,Best_pos,cg_curve]=ALO(N,max_iter,lb,ub,dim,fobj) % 参数说明: % N: 种群数量 % max_iter: 最大迭代次数 % lb: 变量下界 % ub: 变量上界 % dim: 变量维度 % fobj: 目标函数 %% 初始化 % 初始化种群位置和速度 X=initialization(N,dim,ub,lb); V=0.1*X; Best_pos=zeros(1,dim); Best_score=inf; cg_curve=zeros(1,max_iter); % 初始化种群信息素浓度 tau_max=1; tau_min=0.01; tau=tau_max*ones(N,dim); %% 主循环 for t=1:max_iter % 更新信息素浓度 [fitness,idx]=min(fobj(X)); if fitness<Best_score Best_score=fitness; Best_pos=X(idx,:); end if t>1 tau=update_pheromone(tau,X,Best_pos); end % 更新速度和位置 V=V+update_velocity(X,V,Best_pos,tau); X=X+V; % 边界处理 X=X.*(X>=lb & X<=ub)+lb.*(X<lb)+ub.*(X>ub); % 记录迭代过程 cg_curve(t)=Best_score; end end function X=initialization(N,dim,ub,lb) % 种群初始化函数 X=rand(N,dim).*(ub-lb)+lb; end function tau=update_pheromone(tau,X,Best_pos) % 信息素浓度更新函数 N=size(X,1); dim=size(X,2); q0=0.95; % 挥发因子 c_max=1; % 最大信息素浓度 c_min=0.01; % 最小信息素浓度 for i=1:N for j=1:dim if X(i,j)==Best_pos(j) tau(i,j)=q0*tau(i,j)+(1-q0)*c_max; else tau(i,j)=(1-q0)*tau(i,j)+q0*c_min; end end end end function V=update_velocity(X,V,Best_pos,tau) % 速度更新函数 N=size(X,1); dim=size(X,2); w=0.5; % 惯性权重因子 c1=1; % 个体学习因子 c2=2; % 全局学习因子 for i=1:N for j=1:dim r=rand(); % 随机数,用于选择个体或全局最优解进行学习 if r<0.5 % 选择个体最优解进行学习 V(i,j)=w*V(i,j)+c1*rand()*(Best_pos(j)-X(i,j))*tau(i,j); else % 选择全局最优解进行学习 [~,idx]=min(fobj(X)); V(i,j)=w*V(i,j)+c2*rand()*(X(idx,j)-X(i,j))*tau(i,j); end end end end ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不雨_亦潇潇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值