2024北极海雀优化算法,原理详解,MATLAB代码免费获取

北极海雀优化算法(Arctic puffin optimization,APO)是一种受北极海雀生存和捕食行为启发的元启发式优化算法。APO包括空中飞行(探索)和水下觅食(开发)阶段。在搜索阶段,引入了Levy飞行和速度因子机制,增强了算法跳出局部最优的能力,提高了收敛速度。在开发阶段,采用协同、自适应变化因子等策略,确保算法能有效利用当前最优解,引导搜索方向。此外,APO通过行为转换因子实现了勘探和开发阶段之间的动态转换,有效地平衡了全局搜索和局部发展。

fbd58c990ef6dd2293e78f526abb46cb.png

该成果于2024年发表在计算机领域二区SCI期刊“Advances in Engineering Software”上。APO方法具有更好的迭代优化性能和出色的鲁棒性。

0afc2645c907e5b5cf08b5f98eeb7b6f.png

1、算法原理

(1)初始化

北极海雀表现出强烈的集体主义,无论是在迁徙期间还是在它们的栖息地,总是成群结队地移动和合作。每一只北极海雀都代表着一个参与优化的潜在解决方案。初始化种群的生成过程由以下方程描述:

其中 表示第i只北极海雀的位置;rand生成一个介于0和1之间的随机数;ub和lb分别表示上界和下界;N是种群中的个体数量。

(2)空中飞行阶段(探索)

北极海雀依靠独特的飞行和觅食策略来驾驭它们具有挑战性的生存。在日常生活中,它们必须在海洋和空气之间灵活适应,满足自己的营养需求,适应不同的环境。如图所示,在空中航行中,海雀使用两种关键策略来应对不同的情况。第一种策略涉及空中搜索,第二种策略涉及俯冲猎物。这两个阶段表现出的不同行为策略证明了北极海雀在不同情况下的适应性,使它们能够成功地生存和繁殖。随后,本文将对这两种策略进行详细的考察,并阐明它们在北极海雀生活中的意义。

3d0d10bb2e9d5212b8cc5bc1c335c18c.png

第一种策略是空中搜索:

北极海雀通常以队形或群体进行协调飞行,这是一种合作行动,可以提高飞行效率和合作狩猎的机会。它们保持相对较低的飞行高度,以便于捕获潜在的水下食物资源。在这一阶段,它们专注于侦察潜在的猎物,同时保持对附近潜在捕食者的警惕。在有利的条件下,或者当捕食者稀少,鱼类种群丰富时,它们会熟练地加速接近水面,以更好地捕获猎物。以下是与该策略相关的位置更新公式。

式中r为1 ~ N - 1之间的随机整数,不包括i; 表示当前i是总体中的候选解; 是从当前总体中随机选择的一个候选解,L(D)为Levy飞行产生的随机数;D是维数;α是符合标准正态分布的随机数。

在空中搜索策略中,北极海雀利用利维飞行系数,类似于它们强大的翅膀,来改变它们的位置。Levy飞行以其独特的远距离跳跃而闻名,使海雀能够有效地探索食物资源。这种飞行搜索策略有助于它们迅速覆盖广阔的海洋区域,持续接近潜在的食物来源,并有效地搜索食物资源。同时,当面对海鸥等空中捕食者时,海雀采用轮换飞行战术来防御对手,这给攻击者寻找突破带来了挑战。因此,在空中搜索海雀的战略中,关键的战略是确定合适的捕捞地点。这一阶段的飞行策略增强了算法的全局搜索能力,使其能够更好地探索问题空间,增加了发现全局最优解的机会。

第二种策略是突袭捕食:

在北极海雀捕食过程中,俯冲是一个至关重要的策略,因为它们迅速改变飞行方向,以加快食物捕获速度。面对其他竞争对手,这种突袭策略至关重要,因为他们必须确保更快、更成功地捕获猎物才能生存。为了模拟这种俯冲行为,APO引入了一个速度系数S来调整海雀在俯冲过程中的位移。以下是位置更新方程。

在这种飞行策略中,北极海雀在第一阶段通过引入速度系数S来调整其位移,其中π是一个数学常数,大约等于3.14.S在调节北极海雀飞行的速度和方向方面发挥了关键作用。在数学上,S是一个速度系数,它允许海雀通过调整飞行速度的大小和方向来灵活地适应不同的摄食需求。有了S这一参数,该算法更接近海雀的空中行为,使其在面对竞争和不确定性时更加灵活,从而适应更复杂的空中环境。此外,引入参数S的分布特性,增加了算法的随机性和多样性,增强了北极海雀的探索能力。因此,猛扑捕食阶段的设置进一步提高了算法在解空间的搜索效率。增强了算法在处理不同上下文时的适应性和搜索能力。

为了在不同的场景中获得最优结果,该算法选择将两个阶段生成的候选位置合并到一个新的解中。然后根据适应度对这些解决方案进行排序,并选择前N个个体来形成新的种群。方程式的描述如下:

其中,sort是根据新总体的适应度值,从小到大进行排序。

(3)水下觅食阶段(开发)

北极海雀的生存策略涉及两个关键方面:空中飞行和水下觅食。水下觅食包括三种主要策略,每一种策略都在特定的环境中使用,以提高捕食效率。如图所示,这三种策略分别是聚集觅食、加强搜索和躲避捕食者。以下章节将详细介绍这些阶段,并探讨它们在北极海雀生活中的关键作用。

faee3b7604e610d3a04c932cd3a13d7a.png

集合觅食是第一个水下策略:

在北极海雀的觅食行为中,它们经常采取集体策略,聚集在水面附近的鱼群周围。这种合作捕食行为提高了捕猎效率和成功率。合作觅食使它们能够有效地合作,集体包围和捕获鱼群,从而增加成功捕食的机会。此外,海雀停留在海面上观察其他成员的行为,以确定潜水热点或食物资源。下面的公式描述了位置更新。

其中F为合作因子,调节北极海雀的捕食行为。变量r1, r2, r3是1到N−1之间的随机整数(不包括i), Xt r1,Xt r2,Xt r3是从当前总体中随机选择的候选解,

加强搜索是第二个水下战略:

随着捕食的进行,北极海雀可能会在一段时间后感觉到它们当前觅食区域的食物资源耗尽或耗尽。为了继续满足它们的营养需求,它们必须改变水下位置,以寻找更多的鱼或其他水下食物来源。该阶段的位置更新公式如下:

其中,T表示迭代的总次数,t表示当前迭代计数,Rand是一个随机数。在增强搜索过程的第二阶段,参数(1+f)起着关键作用,其中f是用于调整北极海雀在水中的位置的自适应因子。这种适应因素的设计灵感来自于海雀在觅食过程中适应环境的灵活性。具体地说,随着迭代次数的增加,参数f会逐渐调整,以便海雀可以根据搜索的进度和随机性来决定是否改变位置,以寻找更丰富的食物资源。

躲避捕食者是第三种水下策略:

这一策略被用来描述北极海雀在发现附近的捕食者时的行为。它们用一种特殊的声音或叫声来警告其他海雀,表明危险的存在。这种叫声是一种危险信号,会引起其他海雀的警觉,促使它们离开危险区域。与此同时,当发现捕食者在附近时,北极海雀会迅速改变位置,迅速沿着一条更大的路径游向安全区域,以躲避危险。以下是该策略使用的位置更新方程:

式中β是0到1之间均匀分布的随机数。在这一策略中,特别是在面对危险情况时,存在一种巧妙的平衡机制。这种机制涉及两种不同的行为模式:一种是逐渐躲避危险,另一种是迅速躲避危险。在算法中,这种双行为策略模拟了在不同情况下如何摆脱局部最优。当rand≥0.5表明捕食者接近时,北极海雀选择立即躲避,更大幅度地改变他们的位置。这是一种利用已知信息增强跳跃能力的方法,帮助算法在可能的局部最优中找到更好的解决方案。

总之,海雀在水下觅食时采用不同的策略,包括收集饲料、密集搜寻和躲避捕食者。在不同的条件下,这些策略可能导致不同的觅食结果。该算法选择将三个不同位置方程中的候选位置合并为一个新的解,以在各种情况下获得最优结果。根据适应度对解进行排序,并选出前N个个体。方程描述如下:

这种综合策略允许模型同时考虑多种觅食场景,最终选择最适合的位置作为最优解。这增强了海雀在面对不同情况时的觅食和生存能力。

APO所对应的算法流程图如下图所示

995e2ca41e30261f6a8739a66d948655.png

APO对应的伪代码过程如下图所示

e229664ad53a303744ee53182061a960.png

2、结果展示

0df130371ffabb1fd5671e8f69684c01.png

6bd3a136ec9e0ec6027adcd9e661fafc.png

d626931ada1e420a5a7561fab083e1c1.png

319588aee5a503473b6e25ed0f568e95.png

703dc1238faa5310f1c71e8715ffac2f.png

3、MATLAB核心代码

%% 淘个代码 %%
% 微信公众号搜索:淘个代码,获取更多代码
% 北极海雀优化算法(Arctic puffin optimization,APO)
function [BestF,BestX,curve]=APO(N,T,lb,ub,dim,fobj)
PopPos=zeros(N,dim);
PopFit=zeros(N,1);
for i=1:N
    PopPos(i,:)=rand(1,dim).*(ub-lb)+lb;
    PopFit(i)=fobj(PopPos(i,:));
end
BestF=inf;
BestX=[];
for i=1:N
    if PopFit(i)<=BestF
        BestF=PopFit(i);
        BestX=PopPos(i,:);
    end
end
curve=zeros(T,1);
%% -------------------Start iteration------------------------------------%
for It=1:T
    for i=1:N
        theta1=(1-It/T);
        B=2*log(1/rand)*theta1;
%% -------------------1.Aerial Flight Stage-------------------%
        if B > 0.5
            while true
                K = [1:i-1, i+1:N];
                RandInd = K(randi([1,N-1]));
                step1 = PopPos(i, :) - PopPos(RandInd, :);
                if norm(step1) ~= 0 && ~isequal(PopPos(i, :), PopPos(RandInd, :))
                    break;
                end
            end
             %% -------------------1.1 Aerial search.-------------------%
            Y=PopPos(i,:) +  Levy(dim) .* step1 +round(0.5*(0.05+rand))*randn;
             %% -------------------1.2 Swooping predation.-------------------%
            R=rand(1,dim);
            step2=(R-0.5)*pi;
            S=tan(step2);
            Z=Y.*S;
            Y = SpaceBound(Y, ub, lb);
            Z = SpaceBound(Z, ub, lb);
            NewPop=[Y;Z];
            NewPopfit=[fobj(Y);fobj(Z)];
            [~,sorted_indexes]=sort(NewPopfit);
            newPopPos=NewPop(sorted_indexes(1),:);
        else
 %% -------------------2.Underwater Foraging Stage-------------------%
            F=0.5;
            K = [1:i - 1, i + 1:N];
            RandInd = K(randi([1, N - 1], 1, 3));
            f=(0.1*(rand-1)*(T-It))/T;
            while true
                RandInd = K(randi([1 N-1], 1, 3));
                step1 = PopPos(RandInd(2), :) - PopPos(RandInd(3), :);
                               
                if norm(step1) ~= 0 && RandInd(2) ~= RandInd(3)
                    break;
                end
            end
            %% -------------------2.1 Gathering foraging-------------------%
            if rand<0.5
                W = PopPos(RandInd(1), :) + F .* step1;
            else
                W = PopPos(RandInd(1), :) + F .*Levy(dim).* step1;
            end
            %% -------------------2.2Intensifying search-------------------%
            Y=(1+f)*  W ;
            %% -------------------2.3Underwater Foraging Stage-------------------%
            while true
                rand_leader_index1 = floor(N * rand() + 1);
                rand_leader_index2 = floor(N * rand() + 1);
                X_rand1 = PopPos(rand_leader_index1, :);
                X_rand2 = PopPos(rand_leader_index2, :);
                step2 = X_rand1 - X_rand2;
                if norm(step2) ~= 0 && ~isequal(X_rand1, X_rand2)
                    break;
                end
            end
            Epsilon = unifrnd(0, 1);
            if rand<0.5
                Z = PopPos(i, :) + Epsilon .* step2; % Eq.(11)4.3
            else
                Z = PopPos(i, :) + F .* Levy(dim) .* step2;
            end
            NewPop=[W;Y;Z];
            NewPopfit=[fobj(W);fobj(Y);fobj(Z)];
            [~,sorted_indexes]=sort(NewPopfit);
            newPopPos=NewPop(sorted_indexes(1),:);
        end
        newPopPos = SpaceBound(newPopPos, ub, lb);
        newPopFit = fobj(newPopPos);
        if newPopFit < PopFit(i)
            PopFit(i) = newPopFit;
            PopPos(i, :) = newPopPos;
        end
    end
    for i=1:N
        if PopFit(i)<BestF
            BestF=PopFit(i);
            BestX=PopPos(i,:);
        end
    end
    curve(It)=BestF;
end
end
function o=Levy(Dim)
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,Dim)*sigma;
v=randn(1,Dim);
step=u./abs(v).^(1/beta);
o=step;
end%
微信公众号搜索:淘个代码,获取更多免费代码
%禁止倒卖转售,违者必究!!!!!
%唯一官方店铺:https://mbd.pub/o/author-amqYmHBs/work
%代码清单:https://docs.qq.com/sheet/DU3NjYkF5TWdFUnpu

参考文献

[1]Wang W, Tian W, Xu D, et al. Arctic puffin optimization: A bio-inspired metaheuristic algorithm for solving engineering design optimization[J]. Advances in Engineering Software, 2024, 195: 103694.

完整代码获取

后台回复关键词:

TGDM835

获取更多代码:

652fb94865e5efe7e82c5860afc16668.png

或者复制链接跳转:
https://docs.qq.com/sheet/DU3NjYkF5TWdFUnpu
  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SAP APO手册是指针对SAP APO(Advanced Planning and Optimization)系统的说明和指导文档。SAP APO是SAP公司提供的一个集成性高、功能强大的供应链规划和优化解决方案。手册中包含了有关SAP APO系统各个模块的详细介绍、配置方法、功能使用指导以及最佳实践等内容。 SAP APO手册通常分为多个章节,涵盖了供应链计划、需求管理、订单处理、生产计划、库存管理等方面的知识。每个章节中都有详细的步骤和截图,以帮助用户了解和操作系统。手册还提供了实际案例和示例,以便读者更好地理解相应的概念和功能。 SAP APO手册的目的是为SAP APO系统的管理员、实施顾问和终端用户提供指导和帮助。管理员可以通过手册了解系统配置和维护的方法;实施顾问可以借助手册指导用户进行系统部署和功能配置;终端用户可以根据手册学习系统的操作方法和使用技巧。 除了基本的功能介绍和使用指导,SAP APO手册也会涉及一些高级功能和定制需求的处理方法。例如,手册可能会介绍如何进行供应链网络设计、如何制定供应计划,并利用系统的优化算法进行库存优化等。这些内容对于实际的供应链管理和优化非常有价值。 总之,SAP APO手册是一个重要的参考文档,为SAP APO系统的学习、部署和使用提供了全面、系统的指导和资料。无论是新手还是有经验的用户,都可以通过阅读手册来更好地理解和应用SAP APO系统,实现供应链规划和优化的目标。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

今天吃饺子

不想刀我的可以选择爱我

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

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

打赏作者

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

抵扣说明:

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

余额充值