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

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

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-23 06:02:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-23 06:02:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-07-23 06:02:04       82 阅读
  4. Python语言-面向对象

    2024-07-23 06:02:04       91 阅读

热门阅读

  1. 记录贴-VUE相关

    2024-07-23 06:02:04       25 阅读
  2. ios CCUIImage.m

    2024-07-23 06:02:04       22 阅读
  3. unity和安卓的so文件联合使用

    2024-07-23 06:02:04       25 阅读
  4. 智能马桶的工作原理

    2024-07-23 06:02:04       28 阅读
  5. gitlab查询分支API显示不全,只有20个问题

    2024-07-23 06:02:04       21 阅读
  6. Linux Vim教程(四):文本编辑与修改技巧

    2024-07-23 06:02:04       22 阅读
  7. Esxi 上的 CentOS 7.6 系统中搭建本地 Yum 源

    2024-07-23 06:02:04       24 阅读
  8. Android 多用户问题

    2024-07-23 06:02:04       25 阅读
  9. QT 4.8版本的Ubuntu2004编译错误的解决方案

    2024-07-23 06:02:04       19 阅读
  10. 算法1--双指针

    2024-07-23 06:02:04       22 阅读
  11. C++实现排序算法

    2024-07-23 06:02:04       22 阅读