首页 > 编程语言 >Aquila优化算法(基本原理+matlab源代码)—— 基于Aquila Optimizer原始论文分析

Aquila优化算法(基本原理+matlab源代码)—— 基于Aquila Optimizer原始论文分析

时间:2024-07-23 19:24:57浏览次数:10  
标签:rand Aquila Optimizer 迭代 公式 AO 所示 LB 源代码

Matlab源代码位于: Aquila Optimizer: A meta-heuristic optimization
algorithm - File Exchange - MATLAB Central
(mathworks.cn)

1 Aquila优化算法

AO是一种基于种群优化方法,受启发于Aquila捕获猎物的方式。Aquila捕获猎物的方式主要有四种:(1)有垂直弯曲的高空翱翔(2)用短滑翔攻击的轮廓飞行(3)带缓慢下降的低空飞行(4)走和抓取猎物

对以上四种方法进行建模:

1.1 解决方案的初始化

在给定问题的上界(UB)和下界(LB)使用公式21721625858481

随机生成候选集(X,如公式1所示),获得的最优解被认为是在每次迭代过程中的近似优化解。

1721625907257

在公式2中,候选集(Xij)=随机数(rand)*(给定问题的第j个上界(UBj)-给定问题的第j个下界(LBj))+给定问题的第j个下界(LBj) ,N表示候选集的总数量,Dim表示问题维度的大小。

1.2 AO的数学模型

1.2.1 扩展探索(X1)

扩展搜索的行为示意图如图1所示。被建模为公式3:

1721617493257

在公式3中,第t次迭代的下一次迭代解(X1(t+1)) = 总共的第t次迭代中最好的解(Xbest(t)) × 通过迭代次数去控制探索范围的等式(1-t/T) + 第t次迭代中所有解的均值(Xm(t))(如公式4所示)- 总共的第t次迭代中最好的解(Xbest(t)) × 位于0和1的随机值(rand) ,t代表现在的迭代次数,T代表总共的迭代次数。

1721617825259

1721617393672

1.2.2 缩小探索范围(X2)

缩小探索范围的行为示意图如图2所示。被建模为公式5:
在这里插入图片描述

在公式5中,第t次迭代的下一次迭代解(X2(t+1)) = 总共的第t次迭代中最好的解 (Xbest(t)) × 征费飞行分布函数(Levy(D))(如公式6所示)+ 第i次迭代时在[1 N]范围内取的随机解(XR(t))+(搜索中的螺旋形(y)-搜索中的螺旋形(x))×位于0和1的随机值(rand),x和y如公式8、9所示,图3展示了螺旋计算的示意图:

1721620187470

在公式6中,征费飞行分布函数(Levy(D)) = 固定值0.01(s) ×(位于0和1之间的随机数(rand)× σ (如公式7所示))/ | 位于0和1之间的随机数(v)|的1/β次方,其中β是固定值1.5。

1721620442412

1721620538029

其中

1721620611943

在公式10中,r = 位于1至20的固定搜索周期(r1)+ 0.00565(U) × 从1到搜索空间的长度(Dim) 的整数(D1),在公式11中, ω代表0.05。

1721618164764

1721620854188

1.2.3 扩展开发(X3)

扩展开发的行为示意图如图4所示。被建模为公式13:

1721621126225

在公式13中,第t次迭代的下一次迭代解 (X3(t+1)) =(总共的第t次迭代中最好的解 (Xbest(t)) - 第t次迭代中所有解的均值(Xm(t)))× 较小的开采调整参数0.01(ɑ) - 位于0到1的随机数(rand) +((给定问题的上界(UB) -给定问题的下界(LB))× 位于0到1的随机数(rand) + 给定问题的下界(LB)) × 较小的开采调整参数0.01(ʠ)。

1721621447390

1.2.4 缩小开发范围(X4)

缩小开发范围的行为示意图如图5所示。被建模为公式14:

1721621571901

在公式14中, 第t次迭代的下一次迭代解 (X4(t+1)) = 用于平衡搜索策略的质量函数(QF)(如公式15所示)× 总共的第t次迭代中最好的解 (Xbest(t)) - 在奔跑过程中用来追踪猎物的各种AO运动(G1)(如公式16所示)× 第t次迭代解(X(t)) × 0到1的随机数(rand) - 表示AO在从第一个位置(1)到最后一个位置(t)的私奔过程中用于跟踪猎物的飞行斜率(G2)(如公式17所示)× 征费飞行分布函数(Levy(D))(如公式6所示)+ 0到1的随机数(rand) × 在奔跑过程中用来追踪猎物的各种AO运动(G1)(如公式16所示):

1721622042354

1721621596103

2 matlab代码(部分)

% AO函数
% input:N群体数目,T迭代次数,LB问题最低下限,UB问题最高下限,Dim问题维度,F_obj目标函数的句柄,用于评估解的质量
% output:Best_FF AO算法获得的最佳解,Best_P AO算法找到目标函数的最优值
function [Best_FF,Best_P,conv]=AO(N,T,LB,UB,Dim,F_obj)
Best_P=zeros(1,Dim);
Best_FF=inf; % inf无穷大,全局最优解

% 解决方案的初始化
X=initialization(N,Dim,UB,LB);
Xnew=X;
Ffun=zeros(1,size(X,1));        % 1*N,存储每个解的目标函数值(最优)
Ffun_new=zeros(1,size(Xnew,1)); % 1*N,存储每个解的目标函数值(当前)

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;
        % 修正超过边界的解,超过上界的设为UB,超过下界的设为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)在奔跑过程中用来追踪猎物的各种AO运动
    G1=2*(1-(t/T));  % Eq. (17)表示AO在从第一个位置(1)到最后一个位置(t)的私奔过程中用于跟踪猎物的飞行斜率(G2)
    to = 1:Dim;
    u = .0265;
    r0 = 10;
    r = r0 +u*to;  % Eq. (10)
    omega = .005;  
    phi0 = 3*pi/2;
    phi = -omega*to+phi0;  % Eq. (11)
    x = r .* sin(phi);  % Eq. (9)
    y = r .* cos(phi); % Eq. (10)
    QF=t^((2*rand()-1)/(1-T)^2); % Eq. (15)
        % AO begin-------------------------------------------------------------------------------------
    for i=1:size(X,1)
        % 扩展探索(X1) -------------------------------------------------------------------------------------
        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
                % 缩小探索范围(X2) -------------------------------------------------------------------------------------
                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
            % 扩展开发(X3) -------------------------------------------------------------------------------------
        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
                % 缩小开发范围(X4) -------------------------------------------------------------------------------------
                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
    % AO end-------------------------------------------------------------------------------------
    % 判断是否达到迭代次数100,如果达到则展示结果
    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

运行结果:

1721635837590

参考: https://doi.org/10.1016/j.cie.2021.107250

标签:rand,Aquila,Optimizer,迭代,公式,AO,所示,LB,源代码
From: https://blog.csdn.net/2201_76139143/article/details/140613437

相关文章

  • 【java计算机毕设】在线教学平台MySQL springboot vue HTML maven小组设计项目源代码+
    目录1项目功能2项目介绍3项目地址1项目功能【java计算机毕设】在线教学平台MySQLspringbootvueHTMLmaven小组设计项目源代码+文档寒暑假作业 2项目介绍系统功能:在线教学平台包括管理员、用户、教师三种角色。管理员功能包括个人中心模块用于修改个人信息......
  • Visual Studio 2019使用SVN管理源代码
    原文链接:https://blog.csdn.net/g313105910/article/details/119964508第一章、下载安装VisualSVNforVisualStudio2019https://www.visualsvn.com/CSDN下载地址https://download.csdn.net/download/g313105910/21698281安装 完成 VisualStudio2019中已经包含了A......
  • Aquila优化算法(基本原理+matlab源代码)—— 基于Aquila Optimizer原始论文分析
    Matlab源代码位于:AquilaOptimizer:Ameta-heuristicoptimizationalgorithm-FileExchange-MATLABCentral(mathworks.cn)1Aquila优化算法AO是一种基于种群优化方法,受启发于Aquila捕获猎物的方式。Aquila捕获猎物的方式主要有四种:(1)有垂直弯曲的高空翱翔(2)用短滑翔攻......
  • 0008、基于51单片机protues仿真的双机通信设计(仿真图、源代码、讲解视频)
    0008、基于51单片机protues仿真的双机通信设计(仿真图、源代码、讲解视频)该设计为51单片机protues仿真的双机通信设计,实现双机通信、数据交互等功能;功能实现如下:使用51单片机实现双机通信,T1作为波特率发生器,使用工作模式1,中断实现,在PROTEUS上仿真实现.要求如下:1、单片机1发......
  • 0007、基于51单片机protues仿真的农田自动灌溉系统的设计(仿真图、源代码)
    0007、基于51单片机protues仿真的农田自动灌溉系统的设计(仿真图、源代码)该设计为51单片机protues仿真的农田自动灌溉系统,实现农田自动灌溉;功能实现如下:1、系统使用51单片机为核心控制;2、SHT10温湿度传感器实现温湿度采集;3、LCD12864实现相关信息显示;4、继电器控制电机转......
  • 0006、基于51单片机protues仿真的控制四个伺服电机的采摘机械手(仿真图、源代码)
    0006、基于51单片机protues仿真的控制四个伺服电机的采摘机械手(仿真图、源代码)该设计为51单片机protues仿真的控制四个伺服电机的采摘机械手,实现采摘机械手;功能实现如下:1、使用51单片机为核心控制;2、按键和可调电阻控制电机运动;3、四个伺服电机模拟机械手采摘;4、LED指示......
  • 0005、基于51单片机protues仿真的红外遥控编解码无线系统设计(仿真图、源代码)
    0005、基于51单片机protues仿真的红外遥控编解码无线系统设计(仿真图、源代码)功能介绍如下:   红外线编码是数据传输和家用电器遥控常用的一种通讯方法,其实质是一种脉宽调制的串行通讯。家电遥控中常用的红外线编码电路有μPD6121G型HT622型和7461型等。  这里就以......
  • Python + VS Code 调试器:可视化我的程序当前正在执行的源代码中的位置?
    当我使用VSCodePython调试器时:我可以执行我的程序,以便编辑器将我逐行带到源代码中的任何位置(跳转到相关文件/如果尚未打开则将其打开)目前的执行情况是?是的,VSCode的Python调试器可以让你逐行执行代码,并实时显示当前执行的位置。以下是操作方法:1.设置断点:......
  • 语法错误:源代码字符串不能包含空字节
    我正在尝试运行pythonmanage.pymakemigrations并引发以下异常。请注意-1-我在models.py中有自己的User类2-两个模型类,一个在应用程序内部,另一个文件在应用程序外部。外部models.py是根据我的数据库架构生成的类。我使用以下命令自动生成文件。pythonmana......
  • php在线客服系统|客服系统源码(开源代码+安装教程)
    在线客服系统源码与您的日常客户沟通渠道连接,包括电子邮件、电话、实时聊天、社交媒体集成、消息应用程序,甚至客户服务门户。当客户通过任何这些渠道联系您的企业时,系统会自动创建票证。例如,如果客户使用实时渠道(例如电话或实时聊天),系统会自动开始响铃以提醒在线支持......