AO天鹰优化算法|含源码(元启发式算法)

news2025/1/17 21:59:48

-----------------------往期目录------------------

1、灰狼优化算法


文章目录

  • 天鹰优化器
    • 一、第一种搜索方法
    • 二、第二种搜素方法
    • 三、第三种搜素方法
    • 四、第四种搜索方法
  • 代码实现


天鹰优化器

Aquila Optimizer(AO),灵感来自Aquila在捕捉猎物过程中的自然界行为。因此,所提出的AO算法的优化过程分为四种方法:用垂直弯腰的高腾空选择搜索空间,用轮廓飞行和短滑翔攻击在发散搜索空间内探索,用低飞行和慢下降攻击在收敛搜索空间内利用,以及用步行和抓取猎物俯冲。为了验证新的优化器为不同优化问题找到最优解的能力,进行了一系列实验。


提示:以下是本篇文章正文内容,下面案例可供参考

一、第一种搜索方法

Aquila识别猎物区域,并通过垂直弯腰的高飞选择最佳狩猎区域。在这里,天鹰从高飞广泛探索者来确定170°搜索空间的区域,猎物在哪里。图1显示了Aquila高飞垂直弯腰的行为。这种行为在数学上表现为下列等式。
图1:Aquila高飞垂直弯腰的行为
图1:Aquila高飞垂直弯腰的行为
X 1 ( t + 1 ) = X b e s t ( t ) × ( 1 − t T ) + ( X M ( t ) − X b e s t ( t ) ∗ r a n d ) X_{1}(t+1)=X_{b e s t}(t)\times\left(1-{\frac{t}{T}}\right)+(X_{M}(t)-X_{b e s t}(t)*r a n d) 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 , . . . , D i m X_{M}(t)={\frac{1}{N}}\sum_{i=1}^{N}X_{i}(t),\forall j=1,2,...,D i m XM(t)=N1i=1NXi(t),j=1,2,...,Dim
其中, X 1 ( t + 1 ) X_{1}(t+1) X1(t+1)是t的下一次迭代的解,由第一种搜索方法( X 1 X_{1} X1)生成。 X b e s t ( t ) X_{b e s t}(t) Xbest(t)是直到第t次迭代的最佳获得解,这反映了猎物的近似位置。这个方程 1 − t T 1-{\frac{t}{T}} 1Tt用于控制通过迭代的扩展搜索(探索)。 X M ( t ) X_M(t) XM(t)表示在第t次迭代时连接的当前解的位置平均值, r a n d ∈ [ 0 , 1 ] rand∈[0,1] rand[0,1].

二、第二种搜素方法

图2:短滑翔攻击下Aquila等高线飞行的行为

X 2 ( t + 1 ) = X b e s t ( t ) × L e v y ( D ) + X R ( t ) + ( y − x ) ∗ r a n d , X_{2}(t+1)=X_{b e s t}(t)\times L e v y(D)+X_{R}(t)+(y-x)*r a n d, X2(t+1)=Xbest(t)×Levy(D)+XR(t)+(yx)rand,
其中 X 2 ( t + 1 ) X_2(t+1) X2(t+1) t t t 的下一次迭代的解,由第二种搜索方法 X 2 X_2 X2生成, D D D是维数空间, L e v y ( D ) Levy(D) Levy(D) l e v y levy levy飞行分布函数,使用公式计算, X R ( t ) X_R(t) XR(t)是第 t t t 次迭代时在 [ 1 , N ] [1,N] [1,N]范围内取的随机解.
L e v y ( D ) = s × u × σ ∣ v ∣ 1 β L e v y(D)=s\times{\frac{u\times\sigma}{|v|^{\frac{1}{β}}}} Levy(D)=s×vβ1u×σ
其中s是固定为0.01的常量值, u u u v v v 0 0 0到1之间的随机数, σ σ σ 使用下列等式计算:
σ = Γ ( 1 + β ) × sin ⁡ ( π β 2 ) Γ ( 1 + β 2 ) × β × 2 β − 1 2 \sigma={\frac{\Gamma(1+\beta)\times\sin\left({\frac{\pi\beta}{2}}\right)}{\Gamma\left({\frac{1+\beta}{2}}\right)\times\beta\times2^{\frac{\beta-1}{2}}}} σ=Γ(21+β)×β×22β1Γ(1+β)×sin(2πβ)
其中β是固定为1.5的常数值.
r = r 1 + U × D 1 θ = − ω × D 1 + θ 1 θ 1 = 3 × π 2 \begin{array}{c}{{r=r_{1}+U\times D_{1}}}\\ {{}}\\ {{\theta=-\omega\times D_{1}+\theta_{1}}}\\ {{}}\\ {{\theta_{1}=\frac{3\times\pi}{2}}}\end{array} r=r1+U×D1θ=ω×D1+θ1θ1=23×π
R 1 ∈ [ 1 , 20 ] R_1∈[1,20] R1[1,20],用于固定搜索周期数, U U U是一个固定为0.00565的小值。 D 1 D_1 D1是从1到搜索空间长度(Dim)的整数, ω \omega ω是一个固定为0.005的小值。以螺旋形状显示了AO的行为
x = r × s i n ( θ ) y = r × cos ⁡ ( θ ) r = − 0.005 × D 1 + 3 × π 2 \begin{array}{c}{{x=r\times s\mathrm{in}(\theta)}}\\ {{y=r\times\cos(\theta)}}\\ {{r=-0.005\times D_{1}+\frac{3\times\pi}{2}}}\end{array} x=r×sin(θ)y=r×cos(θ)r=0.005×D1+23×π

三、第三种搜素方法

在第三种方法(X3)中,当准确指定猎物区域,并且天鹰准备着陆和攻击时,天鹰垂直下降,进行初步攻击以发现猎物反应。
在这里插入图片描述
称为慢速下降攻击的低空飞行。在这里,AO利用目标的选定区域接近猎物并进行攻击。图显示了Aquila低空飞行慢速下降攻击的行为
X 3 ( t + 1 ) = ( X b e s t ( t ) − X M ( t ) ) × α − r a n d + ( ( U B − L B ) × r a n d + L B ) × δ X_{3}(t+1)=(X_{b e s t}(t)-X_{M}(t))\times\alpha-r a n d+((U B-L B)\times r a n d+L B)\times\delta X3(t+1)=(Xbest(t)XM(t))×αrand+((UBLB)×rand+LB)×δ
X 3 ( t + 1 ) X_3(t+1) X3(t+1)是由第三种搜索方法 X 3 X_3 X3生成的t的下一次迭代的解。 X B e s t ( t ) X_Best(t) XBest(t)是指第i次迭代前猎物的近似位置(最佳获得的解), X M ( t ) X_M(t) XM(t)是第t次迭代时当前解的平均值,使用等式计算。rand是0到1之间的随机值。 α \alpha α δ \delta δ是本文固定为小值(0.1)的开发调整参数。 L B L_B LB表示给定问题的下界, U B U_B UB表示200的上界.

四、第四种搜索方法

接近猎物时,Aquila根据猎物的随机运动在陆地上攻击猎物。这种方法称为步行并抓住猎物。这里,最后,AO在最后一个位置攻击猎物。图显示了Aquila步行并抓住猎物的行为。
在这里插入图片描述
X 4 ( t + 1 ) = Q F × X b e x ( t ) − ( G 1 × X ( t ) × r a n d ) − G 2 × L e ν y ( D ) + r a n d × G 1 \begin{array}{c}{{X_{4}(t+1)=Q F\times X_{b e x}(t)-(G_{1}\times X(t)\times r a n d)-G_{2}\times L e\nu y(D)+r a n d×G_1}}\\{{}}\end{array} X4(t+1)=QF×Xbex(t)(G1×X(t)×rand)G2×Leνy(D)+rand×G1
Q F ( t ) = t r a n d − 1 ( 1 − T ) 2 Q F(t)=t^{\frac{rand-1}{(1-T)^{2}}} QF(t)=t(1T)2rand1
G 1 = 2 × r a n d − 1 G 2 = 2 × ( 1 − t T ) \begin{array}{c}{{G_{1}=2\times r a n d-1}}\\ {{}}\\ {{G_{2}=2\times\left(1-\frac{t}{T}\right)}}\end{array} G1=2×rand1G2=2×(1Tt)
Q F ( t ) QF(t) QF(t)是第 i t h i^{th} ith次迭代时的质量函数值, r a n d rand rand是0到1之间的随机值。t和T分别表示当前迭代和最大迭代次数。 L e v y ( D ) Levy(D) Levy(D)是使用方程计算的 l e v y levy levy飞行分布函数


代码实现

完整代码请私信领取:

function [Best_FF,Best_P,conv]=AO(N,T,LB,UB,Dim,F_obj)
Best_P=zeros(1,Dim);
Best_FF=inf;


X=initialization(N,Dim,UB,LB);
Xnew=X;
Ffun=zeros(1,size(X,1));
Ffun_new=zeros(1,size(Xnew,1));

t=1;


alpha=0.1;
delta=0.1;

while t<T+1
    for i=1:size(X,1)
        F_UB=X(i,:)>UB;
        F_LB=X(i,:)<LB;
        X(i,:)=(X(i,:).*(~(F_UB+F_LB)))+UB.*F_UB+LB.*F_LB;
        Ffun(1,i)=F_obj(X(i,:));
        if Ffun(1,i)<Best_FF
            Best_FF=Ffun(1,i);
            Best_P=X(i,:);
        end
    end
    
    
    G2=2*rand()-1; % Eq. (16)
    G1=2*(1-(t/T));  % Eq. (17)
    to = 1:Dim;
    u = .0265;
    r0 = 10;
    r = r0 +u*to;
    omega = .005;
    phi0 = 3*pi/2;
    phi = -omega*to+phi0;
    x = r .* sin(phi);  % Eq. (9)
    y = r .* cos(phi); % Eq. (10)
    QF=t^((2*rand()-1)/(1-T)^2); % Eq. (15)
        %-------------------------------------------------------------------------------------
    for i=1:size(X,1)
        %-------------------------------------------------------------------------------------
        if t<=(2/3)*T
            if rand <0.5
                Xnew(i,:)=Best_P(1,:)*(1-t/T)+(mean(X(i,:))-Best_P(1,:))*rand(); % Eq. (3) and Eq. (4)
                Ffun_new(1,i)=F_obj(Xnew(i,:));
                if Ffun_new(1,i)<Ffun(1,i)
                    X(i,:)=Xnew(i,:);
                    Ffun(1,i)=Ffun_new(1,i);
                end
            else
                %-------------------------------------------------------------------------------------
                Xnew(i,:)=Best_P(1,:).*Levy(Dim)+X((floor(N*rand()+1)),:)+(y-x)*rand;       % Eq. (5)
                Ffun_new(1,i)=F_obj(Xnew(i,:));
                if Ffun_new(1,i)<Ffun(1,i)
                    X(i,:)=Xnew(i,:);
                    Ffun(1,i)=Ffun_new(1,i);
                end
            end
            %-------------------------------------------------------------------------------------
        else
            if rand<0.5
                Xnew(i,:)=(Best_P(1,:)-mean(X))*alpha-rand+((UB-LB)*rand+LB)*delta;   % Eq. (13)
                Ffun_new(1,i)=F_obj(Xnew(i,:));
                if Ffun_new(1,i)<Ffun(1,i)
                    X(i,:)=Xnew(i,:);
                    Ffun(1,i)=Ffun_new(1,i);
                end
            else
                %-------------------------------------------------------------------------------------
                Xnew(i,:)=QF*Best_P(1,:)-(G2*X(i,:)*rand)-G1.*Levy(Dim)+rand*G2; % Eq. (14)
                Ffun_new(1,i)=F_obj(Xnew(i,:));
                if Ffun_new(1,i)<Ffun(1,i)
                    X(i,:)=Xnew(i,:);
                    Ffun(1,i)=Ffun_new(1,i);
                end
            end
        end
    end
    %-------------------------------------------------------------------------------------
    if mod(t,100)==0
        display(['At iteration ', num2str(t), ' the best solution fitness is ', num2str(Best_FF)]);
    end
    conv(t)=Best_FF;
    t=t+1;
end

end
function o=Levy(d)
	beta=1.5;
	sigma=(gamma(1+beta)*sin(pi*beta/2)/(gamma((1+beta)/2)*beta*2^((beta-1)/2)))^(1/beta);
	u=randn(1,d)*sigma;v=randn(1,d);step=u./abs(v).^(1/beta);
	o=step;
end

Abualigah, L., Yousri, D., Elaziz, M.A., Ewees, A.A., A. Al-qaness, M.A., Gandomi, A.H., Aquila Optimizer: A novel meta-heuristic optimization Algorithm, Computers & Industrial Engineering (2021), doi: https://doi.org/10.1016/j.cie.2021.107250

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1016096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql001:(库和表)操作SQL语句

目录&#xff1a; 》SQL通用规则说明 SQL分类&#xff1a; 》DDL&#xff08;数据定义&#xff1a;用于操作数据库、表、字段&#xff09; 》DML&#xff08;数据编辑&#xff1a;用于对表中的数据进行增删改&#xff09; 》DQL&#xff08;数据查询&#xff1a;用于对表中的数…

开源日报 0825 | 简化开发过程,提升Swift应用性能的扩展工具库

OpenZeppelin/openzeppelin-contracts Stars: 22.8k License: MIT OpenZeppelin Contracts 是一个用于安全智能合约开发的库。它建立在社区验证过的代码基础上&#xff0c;具有以下主要功能&#xff1a; 实现了 ERC20 和 ERC721 等标准。灵活的基于角色的权限控制方案。可重…

数据结构-leetcode-环形链表

解题图解&#xff1a; 代码如下&#xff1a; bool hasCycle(struct ListNode *head) {struct ListNode * fasthead;//在这里fast是快指针//head作为low指针//因为这个题不需要做修改也只需返回true或false//就少开辟一个空间while(fast!NULL&&fast->next!NULL){hea…

Css实现右上角飘带效果

效果图&#xff1a; 源码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style type"text/css">*{margin: 0 auto;padding: 0;}.wrap {/* 设置宽高 */width: 350px;height: …

多分类中混淆矩阵的TP,TN,FN,FP计算

关于混淆矩阵&#xff0c;各位可以在这里了解&#xff1a;混淆矩阵细致理解_夏天是冰红茶的博客-CSDN博客 上一篇中我们了解了混淆矩阵&#xff0c;并且进行了类定义&#xff0c;那么在这一节中我们将要对其进行扩展&#xff0c;在多分类中&#xff0c;如何去计算TP&#xff0…

1_图神经网络GNN基础知识学习

文章目录 安装PyTorch Geometric安装工具包 在KarateClub数据集上使用图卷积网络 (GCN) 进行节点分类两个画图函数Graph Neural Networks数据集&#xff1a;Zacharys karate club network.PyTorch Geometric数据集介绍 edge_index使用networkx可视化展示 Graph Neural Networks…

cenos自动启动tomcat

首先创建一个脚本 关闭tomcat 等待2分钟 启动tomcat 并且把日志输出在 /usr/local/tomcat/tomcatchognqi.log #!/bin/bashexport JAVA_HOME/usr/local/jdk/jdk1.8.0_211 export JRE_HOME$JAVA_HOME/jre# 日志文件路径和文件名 LOG_FILE"/usr/local/tomcat/tomcatchognqi.…

Ubuntu20.4搭建基于iRedMail的邮件服务器

iRedMail 是一个基于 Linux/BSD 系统的零成本、功能完备、成熟的邮件服务器解决方案。基于ubuntu20.4搭建基于iRedMail的邮件服务器包括环境配置&#xff0c;iRedMail安装与配置&#xff0c;iRedMail调整邮件附件大小等3个小节进行描述。具体如下详细描述。 1 环境配置 1.设置…

企业架构LNMP学习笔记56

MongoDB数据类型操作&#xff1a;CURD 1、添加数据&#xff1a; mongodb里存储数据的格式文档形式&#xff0c;以bson格式的文档形式。 创建数据库&#xff1a; > use tp5shop switched to db tp5shop > db.getName() tp5shop使用切换库&#xff0c;不存在自动创建&am…

Jmeter 自动化性能测试常见问题汇总

一、request 请求超时设置 timeout 超时时间是可以手动设置的&#xff0c;新建一个 http 请求&#xff0c;在“高级”设置中找到“超时”设置&#xff0c;设置连接、响应时间为2000ms。 1. 请求连接超时&#xff0c;连不上服务器。 现象&#xff1a; Jmeter表现形式为&…

计算机竞赛 机器视觉人体跌倒检测系统 - opencv python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 机器视觉人体跌倒检测系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&…

【AIGC】Stable Diffusion Prompt 每日一练0915

一、前言 1.1 写在前面 本文是一个系列&#xff0c;有点类似随笔&#xff0c;每天一次更新&#xff0c;重点就Stable Diffusion Prompt进行专项训练&#xff0c;本文是第一篇《Stable Diffusion Prompt 每日一练0915》。 1.2 项目背景 stable diffusion提示词(prompt)是用于…

[vue问题]开发中问题集合

“TypeError: Cannot read property ‘Request’ of undefined” 这是测试文件的报错&#xff0c;最后发现是因为项目启动的时候就报错了&#xff0c;是其它错误导致的&#xff0c;所以测试文件才会提示这种错误&#xff0c;当启动报错修复后&#xff0c;该问题没有了 热加载…

Acwing算法心得——猜测短跑队员的速度(重写比较器)

大家好&#xff0c;我是晴天学长&#xff0c;今天的算法题用到了比较器的知识&#xff0c;是经常会用到的一个知识点&#xff0c;常见与同种数据的排序&#xff0c;需要的小伙伴请自取哦&#xff01;如果觉得写的不错的话&#xff0c;可以点个关注哦&#xff0c;后续会继续更新…

什么是函数式编程(functional programming)?在JavaScript中如何实现函数式编程的概念?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 函数式编程&#xff08;Functional Programming&#xff09;⭐ 纯函数&#xff08;Pure Functions&#xff09;⭐ 不可变性&#xff08;Immutability&#xff09;⭐ 高阶函数&#xff08;Higher-Order Functions&#xff09;⭐ 函数组合&…

jq命令安装与使用

目录 一、简介二、下载及安装1.Linux 安装2.Windows 安装3.测试安装结果 三、jq用法1.基本语法2.常见用法1&#xff09;格式化 JSON2&#xff09;获取属性3&#xff09;属性不存在情况处理4&#xff09;数组遍历、截取、展开5&#xff09;管道、逗号、加号6&#xff09;数据构造…

长话短说 CopyOnWrite 思想及其应用场景

长话短说 CopyOnWrite 思想及其应用场景。 CopyOnWrite(写入时复制)思想 CopyOnWrite(简称COW,中文意思是:写入时复制)就是在进行写操作时,先复制要改变的对象,对副本进行写操作,完成对副本的操作后,把原有对象的引用指向副本对象。 CopyOnWrite采用了读写分离的思想…

Day45:Element-Plus

Vue生态中包含了大量优秀的组件库&#xff0c;经过快速的学习&#xff0c;我们就能把这些现成的组件应用到自己的项目中了 1.常见组件库 UI组件库需要基于JS框架来实现&#xff0c;也就是说我们现在学习的是Vue3&#xff0c;也需要选择适配的组件库&#xff0c;在Vue生态中&a…

C++QT day6

1> 将之前定义的栈类和队列类都实现成模板类 栈&#xff1a; #include <iostream> #define MAX 128 using namespace std; template<typename T> class Stack_s { private:T *pnew T[MAX];//栈的数组int top;//记录栈顶的变量 public://构造函数Stack_s(int t…

数据结构--平衡二叉树

目录 平衡二叉树定义 平衡二叉树的插入 调整最小不平衡子树 LL型 RR型 LR型​编辑 RL型​编辑 练习 查找效率分析​编辑 回顾知识点 平衡二叉树的删除 例1 ​编辑 例2​编辑 例3 例4​编辑 ​编辑 平衡二叉树的删除回顾​编辑 定义插入操作插入新结点后如何调…