2021年智能优化算法:天鹰优化器AO-附MATLAB代码

1 算法原理简介

天鹰优化器(Aquila Optimizer, AO)是一种新型智能优化算法,由Laith Abualigah等于2021年提出。该算法具有多个探索和开发策略,实验表明,与其他的元启发式算法相比,天鹰优化器算法具有明显的优越性。该算法的灵感源自北美洲Aquila鸟捕食过程中的四个群体行为:1. 通过垂直高翱翔扩大搜寻范围,在飞行中狩猎鸟类;2. 通过短滑翔攻击的轮廓飞行,在靠近地面的低水平空中攻击猎物;3.通过低空飞行和慢下降逐渐攻击猎物;4. 通过俯冲在陆地上行走和抓取猎物。

与其他的动物园优化算法相似,天鹰优化器也是基于群体智能算法,因此在建立数学模型时,需要先随机初始化种群的位置矩阵X:

X = [ x 1 , 1 ⋯ x 1 , j x 1 , Dim ⁡ − 1 x 1 , D i m x 2 , 1 ⋯ x 2 , j ⋯ x 2 , D i m ⋯ ⋯ x i , j ⋯ ⋯ ⋮ ⋮ ⋮ ⋮ ⋮ x N − 1 , 1 ⋯ x N − 1 , j ⋯ x N − 1 , D i m x N , 1 ⋯ x N , j x N , D i m − 1 x N , D i m ] X=\left[\begin{array}{ccccc} x_{1,1} & \cdots & x_{1, j} & x_{1, \operatorname{Dim}-1} & x_{1, D i m} \\ x_{2,1} & \cdots & x_{2, j} & \cdots & x_{2, D i m} \\ \cdots & \cdots & x_{i, j} & \cdots & \cdots \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ x_{N-1,1} & \cdots & x_{N-1, j} & \cdots & x_{N-1, D i m} \\ x_{N, 1} & \cdots & x_{N, j} & x_{N, D i m-1} & x_{N, D i m} \end{array}\right] X=x1,1x2,1xN1,1xN,1x1,jx2,jxi,jxN1,jxN,jx1,Dim1xN,Dim1x1,Dimx2,DimxN1,DimxN,Dim

X i j = rand ⁡ × ( U B j − L B j ) + L B j , i = 1 , 2 , … . . , N j = 1 , 2 , … , Dim ⁡ X_{i j}=\operatorname{rand} \times\left(U B_{j}-L B_{j}\right)+L B_{j}, \quad i=1,2, \ldots . ., N j=1,2, \ldots, \operatorname{Dim} Xij=rand×(UBjLBj)+LBj,i=1,2,..,Nj=1,2,,Dim

式中,N表示种群规模,Dim表示搜索空间的维度。

1.1 扩大探索阶段

在第一阶段中, Aquila鸟群通过垂直高翱翔扩大搜寻范围,在飞行中狩猎鸟类,该部分的数学公式为:
X 1 ( t + 1 ) = X b e s t ( t ) × ( 1 − t T ) + ( X M ( t ) − X b e s t ( t ) ∗  rand  ) X_{1}(t+1)=X_{b e s t}(t) \times\left(1-\frac{t}{T}\right)+\left(X_{M}(t)-X_{b e s t}(t) * \text { rand }\right) X1(t+1)=Xbest(t)×(1Tt)+(XM(t)Xbest(t) rand )

X M ( t ) = 1 N ∑ i = 1 N X i ( t ) , ∀ j = 1 , 2 , … , Dim ⁡ X_{M}(t)=\frac{1}{N} \sum_{i=1}^{N} X_{i}(t), \forall j=1,2, \ldots, \operatorname{Dim} XM(t)=N1i=1NXi(t),j=1,2,,Dim

式中,X(t)和X(t+1)分别表示AO算法在第t次迭代和第t+1次迭代中的个体位置,Xbest(t)表示到第t次迭代为止算法获得的最佳个体为止,Xm(t)表示第t次迭代时的种群平均位置,T表示算法最大的迭代次数。

1.2 缩小探索阶段

在第二阶段中,当Aquila鸟群在高空中发现猎物时,鸟群会在目标猎物上方螺旋绕圈,准备着陆,然后进行攻击,数学公式为:

X 2 ( t + 1 ) = X b e s t ( t ) × Lev ⁡ y ( D ) + X R ( t ) + ( y − x ) ∗  rand  X_{2}(t+1)=X_{b e s t}(t) \times \operatorname{Lev} y(D)+X_{R}(t)+(y-x) * \text { rand } X2(t+1)=Xbest(t)×Levy(D)+XR(t)+(yx) rand 

式中, L e v y ( D ) Levy(D) Levy(D)表示莱维飞行分布策略,s是常数,取0.01,u和v是0到1之间的随机数,

Levy ⁡ ( D ) = s × u × σ ∣ v ∣ 1 β \operatorname{Levy}(D)=s \times \frac{u \times \sigma}{|v|^{\frac{1}{\beta}}} Levy(D)=s×vβ1u×σ

σ = ( Γ ( 1 + β ) × sin ⁡ e ( π β 2 ) Γ ( 1 + β 2 ) × β × 2 ( β − 1 2 ) ) \sigma=\left(\frac{\Gamma(1+\beta) \times \sin e\left(\frac{\pi \beta}{2}\right)}{\Gamma\left(\frac{1+\beta}{2}\right) \times \beta \times 2^{\left(\frac{\beta-1}{2}\right)}}\right) σ=Γ(21+β)×β×2(2β1)Γ(1+β)×sine(2πβ)

x , y x, y x,y表示螺旋飞行的形状,
y = r × cos ⁡ ( θ ) x = r × sin ⁡ ( θ ) r = r 1 + U × D 1 θ = − ω × D 1 + θ 1 θ 1 = 3 × π 2 \begin{gathered} y=r \times \cos (\theta) \\ x=r \times \sin (\theta) \\ r=r_{1}+U \times D_{1} \\ \theta=-\omega \times D_{1}+\theta_{1} \\ \theta 1=\frac{3 \times \pi}{2} \end{gathered} y=r×cos(θ)x=r×sin(θ)r=r1+U×D1θ=ω×D1+θ1θ1=23×π
式中,r是搜索步长,取值范围在1到20之间,U取0.00565,ω取0.005

1.3 扩大开发阶段

在第三个阶段中,当Aquila鸟处于猎物区域,准备好着陆和攻击时,将采取垂直下降的方法进行初步攻击,数学公式为:
X 3 ( t + 1 ) = ( X best  ( t ) − X M ( t ) ) × α −  rand  + ( ( U B − L B ) ×  rand  + L B ) × δ \begin{gathered} X_{3}(t+1)=\left(X_{\text {best }}(t)-X_{M}(t)\right) \times \alpha-\text { rand }+ \\ ((U B-L B) \times \text { rand }+L B) \times \delta \\ \end{gathered} X3(t+1)=(Xbest (t)XM(t))×α rand +((UBLB)× rand +LB)×δ

式中, α 和 δ \alpha {和} \delta αδ表示开发调整参数,取较小值(0.1)

1.4 缩小开发阶段

在这个阶段中,Aquila鸟接近猎物,以及向猎物发起带有一定随机性的攻击,行走和抓取猎物的数学公式为:
X 4 ( t + 1 ) = Q F × X best  ( t ) − ( G 1 × X ( t ) ×  rand  ) − G 2 ×  Levy  ( D ) +  rand  × G 1 \begin{gathered} X_{4}(t+1)=Q F \times X_{\text {best }}(t)-\left(G_{1} \times X(t) \times \text { rand }\right)-G_{2} \times \text { Levy }(D)+\\ \text { rand } \times G_{1} \end{gathered} X4(t+1)=QF×Xbest (t)(G1×X(t)× rand )G2× Levy (D)+ rand ×G1

式中, Q F ( t ) QF(t) QF(t)表示用于平衡搜索策略的质量函数值G1表示在追踪猎物过程中AO的各种运动,G2表示线性递减的飞行斜率值,范围是[0, 2],相关参数的计算公式如下,

Q F ( t ) = t 2 ×  rand  ( ) − 1 ( 1 − T ) 2 G 1 = 2 × rand ⁡ ( ) − 1 G 2 = 2 × ( 1 − t T ) \begin{gathered} Q F(t)=t^{\frac{2 \times \text { rand }()-1}{(1-T)^{2}}} \\ G_{1}=2 \times \operatorname{rand}()-1 \\ G_{2}=2 \times\left(1-\frac{t}{T}\right) \end{gathered} QF(t)=t(1T)22× rand ()1G1=2×rand()1G2=2×(1Tt)

2 算法流程

  1. 初始化算法参数,包括种群规模,最大迭代次数 T T T,探索和开发参数 α 、 δ \alpha、 \delta αδ

  2. 初始化种群位置X,初始的种群适应度,最佳个体

  3. t < T t<T t<T时,AO开始循环:

  4. 扩大探索阶段,计算种群的平均位置,更新种群位置 X 1 ( t + 1 ) X_1(t+1) X1(t+1)

  5. 缩小探索阶段,更新种群位置 X 2 ( t + 1 ) X_2(t+1) X2(t+1)

  6. 扩大开发阶段,更新种群位置 X 3 ( t + 1 ) X_3(t+1) X3(t+1)

  7. 缩小开发阶段,更新种群位置 X 4 ( t + 1 ) X_4(t+1) X4(t+1)

  8. 计算更新种群的适应度,得到当前最佳个体位置和适应度

  9. 比较当前最佳个体与到第 t t t代找到的最佳个体适应度,保留较优的个体位置

  10. 判断满足算法终止条件,如果不满足,则重复执行步骤4-9

  11. 跳出循环,输出最优解和最佳适应度

3 MATLAB代码结果

优化目标(Sphere单峰函数):

f ( x ) = ∑ i = 1 D x i 2 f(x)=\sum_{i=1}^{D} x_{i}^{2} f(x)=i=1Dxi2

优化结果:

在这里插入图片描述

参考资料:Abualigah,L.,Yousri,D.,Elaziz,MA,Ewees,AA,A。Al-qaness,MA,Gandomi, AH,Aquila Optimizer:一种新颖的元启发式优化算法,计算机与工业工程(2021年),doi: https : //doi.org/10.1016/j.cie.2021.107250

源代码可在Researchgate上找到: https : //www.researchgate.net/publication/350411564_Matlab_Code_of_Aquila_Optimizer_A_novel_meta-heuristic_optimization_algorithm

如需获取笔者编写的MATLAB代码,请订阅以下CSDN专栏《最优化方法》的文章:

2021年若干个智能优化算法简介-附MATLAB代码 文章集锦

CSDN《最优化方法》专栏文章地址:https://blog.csdn.net/qq_45955094/category_11224070.html

《最优化方法》专栏内包含天鹰优化器(AO),非洲秃鹫优化算法(AVOA)、蜜獾算法(HBA)、澳洲野狗优化算法(DOA)、材料生成算法(MGA)等2021年优化算法介绍和笔者编写的MATLAB代码,以及粒子群算法(PSO)、哈里斯鹰算法(HHO)、灰狼优化算法(GWO)等经典优化算法介绍与编程

  • 13
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个基于水母优化的机器人路径规划算法的简化示例 MATLAB 代码。请注意,这只是一个简化的示例,实际的算法可能需要更多的细节和参数调整。 ```matlab % 参数设置 MaxIter = 100; % 最大迭代次数 Npop = 50; % 种群数量 % 初始化种群 Population = InitializePopulation(Npop); % 初始化种群 for iter = 1:MaxIter % 评估适应度 Fitness = EvaluateFitness(Population); % 根据目标函数计算适应度 % 选择操作 SelectedPopulation = Selection(Population, Fitness); % 根据适应度选择一部分个体 % 操作1:局部搜索 LocalSearchPopulation = LocalSearch(SelectedPopulation); % 对选择的个体进行局部搜索 % 操作2:水母扩散 JellyfishPopulation = JellyfishDispersion(LocalSearchPopulation); % 对局部搜索的个体进行水母扩散 % 更新种群 Population = JellyfishPopulation; % 更新种群 % 显示当前最优解 [~, bestIdx] = max(Fitness); bestSolution = Population(bestIdx,:); disp(['Iteration:', num2str(iter), ' Best Solution:', num2str(bestSolution)]); end % ------------------ 函数实现 ------------------ % 初始化种群 function Population = InitializePopulation(Npop) % 根据问题需求,随机生成初始种群 % 返回一个 Npop x n 矩阵,每行代表一个个体的解 end % 计算适应度 function Fitness = EvaluateFitness(Population) % 根据目标函数计算适应度 % 返回一个 Npop x 1 的列向量,每个元素为对应个体的适应度值 end % 选择操作 function SelectedPopulation = Selection(Population, Fitness) % 根据适应度值选择一部分个体 % 返回一个 Npop x n 的矩阵,为选择出的个体集合 end % 局部搜索 function LocalSearchPopulation = LocalSearch(SelectedPopulation) % 对选择的个体进行局部搜索操作,例如使用局部优化算法(如遗传算法、模拟退火等) % 返回一个 Npop x n 的矩阵,为局部搜索后的个体集合 end % 水母扩散 function JellyfishPopulation = JellyfishDispersion(LocalSearchPopulation) % 对局部搜索的个体进行水母扩散操作,引入随机性和多样性 % 返回一个 Npop x n 的矩阵,为水母扩散后的个体集合 end ``` 请注意,以上代码仅为示例,并未完整展示所有细节和具体实现。实际使用时,您可能需要根据具体问题进行调整和细化。此外,还需要根据问题的特点和要求,自定义目标函数、选择操作、局部搜索和水母扩散等算子的具体实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Frank,Y

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

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

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

打赏作者

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

抵扣说明:

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

余额充值