25年新算法!基于猛禽的优化算法(BPBO):一种元启发式优化算法,附完整免费MATLAB代码

1 简介

优化是跨越多个工程和科学学科的关键挑战。本文介绍了一种独特的基于猛禽的优化(BPBO)算法,该算法受到捕食性鸟类精明狩猎技术的影响。该方法利用个体和群体狩猎技术,同时选择性地针对较弱的鸟类,以有效地平衡探索和开发策略。通过结合动态迁移策略来获取更合适的猎物,该方法增强了种群多样性,并降低了过早收敛的风险。鉴于持续的动态变化,这些策略的集成使BPBO算法能够有效地解决广泛的问题。

2 基于猛禽的优化(BPBO)算法

本文旨在人工智能及其应用领域提出一种创新且高效的元启发式算法。该算法基于一种新颖的建模和搜索方法,其灵感来源于猛禽的协同狩猎和捕食行为。在简要概述了几种主要猛禽的框架及提出该方法的动机后,我们组建了一个研究小组,具体如下所述。

2.1 最佳猛禽

某些鸟类被称为食鸟者,例如食雀鹰,以其他鸟类为食。鼠类捕食者则专门捕食啮齿动物等小型动物。某些捕食爬行动物的个体本身就是爬行动物,例如蛇鹫。某些物种,如秃鹫,被归类为食腐动物。当然,这是一种广义的分类,其食性可能因季节性迁徙和栖息地变化而有所不同。在鸟类学中,“猛禽”一词指代任何具有锐利爪子、卓越视力以及强大弯曲喙的鸟类,其喙能够撕裂动物肉体[11]。这些鸟类的体型可以通过多种因素确定,包括全身长度、翅膀宽度、“双翼展开时翼尖之间的距离”或其体重。

2.2 提出的算法

本文介绍了一种受猛禽多样化捕食策略启发的新算法。我们提出,捕食性鸟类既会独立狩猎,也会协同行动,同时承认这些猎手也可能成为其他捕食者的猎物。此外,可能会出现捕食鸟未能捕获目标的情况,此时它会继续搜索和探索。BPBO算法直接受到猛禽捕食习性的启发,将其适应方法巧妙地融入优化过程中。该过程分为四个主要阶段,每个阶段反映了自然界中的特定捕食行为:

  • 自我适应(独立狩猎):如鹰和隼等猛禽依赖速度和敏捷性独立捕猎。
    算法的这一部分包括个体探索和增强。当每个代理根据其发现的最佳解决方案调整位置时,它模拟了鸟类优化其觅食路径的过程。

  • 协同狩猎(集体搜索与攻击):某些物种,如鸢和鹰,通过同步攻击进行协作捕猎。
    BPBO算法通过基于群体的修改实现这一点,其中搜索代理根据群体的中心趋势增强其运动,从而增加搜索多样性。

  • 竞争阶段(捕食弱小猎物):在自然界中,更强壮的鸟类偶尔会捕食较弱或较小的鸟类以获取食物。
    BPBO算法通过允许优质解决方案替代劣质解决方案来体现这一原则,从而增强探索并避免陷入局部最优。

  • 持续搜索(规避局部最优):当猎物缺失时,鸟类会迁移到其他地点。
    BPBO算法采用重新定位机制,使搜索代理能够移动到有潜力的区域,从而维持全局搜索的持续性。

这种猛禽捕食技术与算法功能的系统性关联提高了BPBO在开发和探索之间的平衡,从而增强了优化效果。BPBO算法的每个阶段将根据表2中描述的细节进行启发、开发和模拟,具体如下:

表2 猛禽启发式数值优化方法概述

完整尺寸表格 >

步骤1. 生成BPBO启发式算法的种群。
与之前的元启发式算法类似,该方法从问题域(或捕猎区域)中的NNN个初始种群开始,最佳解决方案(GbestG_{best}Gbest或猎物)作为猎物XpreyX_{prey}Xprey,其余N−1N-1N1个作为鸟类。它们开始搜索。对于i=1:Ni = 1:Ni=1:N,初始种群的形成如下:

Xi=Xmin+rand(1,D)×(Xmax−Xmin)(1)X_i = X_{min} + rand(1, D) \times (X_{max} - X_{min}) \tag{1}Xi=Xmin+rand(1,D)×(XmaxXmin)(1)

其中,决策变量的最大和最小范围分别由XmaxX_{max}XmaxXminX_{min}Xmin定义。rand(1,D)rand(1, D)rand(1,D)是一个在0和1之间均匀选择的随机变量向量,DDD是特定问题的维度。

步骤2. 定位猛禽。
在初始种群生成后,探索阶段在指定区域内展开。如同猛禽不断巡视环境以寻找理想食物,种群中的每个成员都勤奋地追求其目标,记为P1P_1P1。这一阶段标志着搜索过程的开始,个体在问题区域内导航以追逐各自的目标。在此过程中,步骤3至5可能如下进行:

步骤3. 个体狩猎。
在这一阶段,捕食鸟XiX_iXi全力缩小其与猎物XpreyX_{prey}Xprey(代表算法当前最优解)之间的距离。XiX_iXi的每一步行动都是精心计算的,旨在优化其接近猎物的路径。它不断调整位置,力求最小化与全局最优的距离。通过整合当前最佳解决方案的洞察,XiX_iXi在搜索空间中导航,谨慎选择路径以实现最高效率和效果。因此,猎手或种群的动机可表示为:

Xiprex=Xi+rand(1,D)×(Xprey−Ki1×Xi)(2)X^{prex}_i = X_i + \text{rand}(1,D) \times (X_{prey} - K_{i1} \times X_i) \tag{2}Xiprex=Xi+rand(1,D)×(XpreyKi1×Xi)(2)

其中,rand(1,D)\text{rand}(1,D)rand(1,D)表示维度DDD上0到1范围内的随机数。随机生成的参数Ki1K_{i1}Ki1取值为111222,决定猎手是从前方还是后方攻击目标。若为222,猎手从前方攻击猎物;若为111,则从后方攻击。

步骤4. 群体狩猎。
在自然环境中,猛禽常进行个体与群体结合的捕猎活动,群体协作支持个体成员追逐猎物。该方法假设整个种群参与此阶段,共同以平均值XmeanX_{mean}Xmean为中心位置。种群通过协同努力或个体与目标对齐,高效快速地捕猎XpreyX_{prey}Xprey。群体协作捕猎的行为可表示为:

Xiprex=Xmean+rand(1,D)×(XPrey−Ki2×Xmean)(3)X^{prex}_i = X_{mean} + \text{rand}(1,D) \times (X_{Prey} - K_{i2} \times X_{mean}) \tag{3}Xiprex=Xmean+rand(1,D)×(XPreyKi2×Xmean)(3)

rand(1,D)\text{rand}(1,D)rand(1,D)为0到1范围内的随机数。参数Ki2K_{i2}Ki2随机取111222,决定捕食者从前方还是后方攻击猎物。若为111,猎手从后方协作攻击;若为222,则从前方攻击。

步骤5. 弱小猛禽(如鹰和隼)。
猛禽偶尔选择弱小猎物以便捕获,体现算法利用有利条件及陷入局部最优的能力。这种自适应技术确保算法高效、敏捷且响应迅速,持续提升性能。此处,弱小猎手鸟等同于群体中最弱成员XworstX_{worst}Xworst,捕食鸟XiX_iXi执行捕猎操作,与个体狩猎阶段不同:

Xiprex=Xi+rand(1,D)×(Xi−Ki3×Xworst)(4)X^{prex}_i = X_i + \text{rand}(1,D) \times (X_i - K_{i3} \times X_{worst}) \tag{4}Xiprex=Xi+rand(1,D)×(XiKi3×Xworst)(4)

参数Ki3K_{i3}Ki3111222,决定猎手从前方还是后方攻击弱小猎手。若为222,表示从前方攻击最弱猎手;若为111,则从后方攻击。

步骤6. 持续捕猎猛禽。
有时猛禽在迭代_iter_中无法找到合适猎物,此时它将迁移到其他位置继续捕猎,如下式所示:

Xiprex=Xi+randi×(Xmin+rand×(Xmax−Xmin))(5)X^{prex}_i = X_i + \text{rand}_i \times (X_{min} + \text{rand} \times (X_{max} - X_{min})) \tag{5}Xiprex=Xi+randi×(Xmin+rand×(XmaxXmin))(5)

其中randi\text{rand}_irandi为0到1的随机数。需注意,上述各阶段均为随机发生。

最后,算法1展示了所提BPBO启发算法针对个体成员的通用优化过程伪代码示例,图2展示了BPBO算法的优化机制。
在这里插入图片描述

图1 该图以自然形态展示了BPBO算法的初始设计灵感:(a) 个体狩猎示例,白头海雕试图捕捉鱼类(猎物);(b) 群体狩猎示例,军舰鸟协作捕鱼;© 弱小猛禽实例,鹰追逐军舰鸟。
在这里插入图片描述

3.完整代码

function [Best_fitness, Xbest, Curve] = BPBO(pop, maxIter, lb, ub, dim, fobj)
    %% Problem Definition
    CostFunction = fobj;
    %%%%%%%%%%%%%Geartrain
    VarMin = lb;       % Unknown Variables Lower Bound[25 25 0.0625 0.0625];  
    VarMax =  ub;       % Unknown Variables Upper Bound[150 240 1.25 1.25]; 
    VarSize = [1 dim]; % Decision Variables Matrix Size
    %% BPBO Parameters
    MaxIt = maxIter;    % Maximum Number of Iterations
    Pi=0.7;
    nPop =pop;           % Population Size
    %% Initialization 
    % Empty Structure for Individuals
    empty_individual.Position = [];
    empty_individual.Cost = [];
    % Initialize Population Array
    pop = repmat(empty_individual, nPop, 1);
    % Initialize Best Solution
    Prey.Cost = inf;
    % Initialize Population Members
    for i=1:nPop
        pop(i).Position = unifrnd(VarMin, VarMax, VarSize);
         pop(i).Cost = CostFunction(pop(i).Position);
        if pop(i).Cost < Prey.Cost
           Prey = pop(i);
        end
        BestCost1(i)=Prey.Cost;
    end
    % Initialize Best Cost Record
    BestCosts = zeros(MaxIt,1);
    %% BPBO Main Loop
    %  it=nPop;
     it=0;
     for it=1:MaxIt
    % while it<=(MaxIt-nPop) 
        % Calculate Population Mean
        Mean = 0;
        for i=1:nPop
            Mean = Mean + pop(i).Position;
        end
        Mean = Mean/nPop;
        % Select Prey
        Prey = pop(1);
        for i=2:nPop
            if pop(i).Cost < Prey.Cost
                Prey = pop(i);
            end
        end
        
         
        for i=1:nPop
            % Create Empty Solution
            newsol = empty_individual; 
            if rand<Pi
                if rand<rand
                    M00=round(1+rand);
                    newsol.Position = pop(i).Position ...
                    + rand(VarSize).*(Prey.Position- M00*pop(i).Position);
                elseif rand<rand
                    M01=round(1+rand);
                    newsol.Position = Mean ...
                    +rand(VarSize).*(Prey.Position -M01*Mean); 
                else        
                    M02=round(1+rand);
                    newsol.Position = pop(i).Position ...
                    +rand(VarSize).*(pop(i).Position- M02*pop(nPop).Position); 
                end
            else
                newsol.Position =pop(i).Position+rand*( unifrnd(VarMin, VarMax, VarSize));   
            end
            % Evaluation 
            newsol.Position = max(newsol.Position, VarMin);
            newsol.Position = min(newsol.Position, VarMax);
            newsol.Cost = CostFunction(newsol.Position);
            if newsol.Cost<pop(i).Cost
                pop(i) = newsol;
                if pop(i).Cost < Prey.Cost
                    Prey = pop(i);
                end
            end
            %           it=it+1; 
            BestCost1(it)=Prey.Cost;
        end
        

        % Sort Swarm
        [uuu, SortOrder]=sort([pop.Cost]);
        pop = pop(SortOrder);
        
        % Store Record for Current Iteration
        Curve(it) =pop(1).Cost;
        % Iteration Information
        % disp(['Iteration ' num2str(it) ': Best Cost = ' num2str( Curve(it))]);
     end
     Best_fitness = Prey.Cost;
     Xbest = Prey.Position;
end


Ghasemi, M., Akbari, M.A., Zare, M. et al. Birds of prey-based optimization (BPBO): a metaheuristic algorithm for optimization. Evol. Intel. 18, 88 (2025). https://doi.org/10.1007/s12065-025-01052-8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

算法小狂人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值