2025年最新一区优化算法——座头鲸迁移算法

注:该算法已按照智能优化算法APP标准格式进行整改,可直接集成到APP中,方便大家与自己的算法进行对比。

座头鲸迁移算法(Whale migrating Algorithm,WMA)是一种基于座头鲸协同迁移行为的创新生物启发式优化方法。与传统方法相比,WMA将领导者和追随者的动态与自适应迁移策略相结合,有效平衡了探索和开发阶段,提高了其规避局部最优和有效收敛的能力。

该成果于2025年最新发表在1区计算机领域期刊Results in Engineering上,影响因子高达6.0,目前被引用3次。

座头鲸的全球分布见下图。从春季到秋季,座头鲸在寒冷的极地水域大量觅食。到了晚秋,它们开始迁徙到温暖的热带浅海水域,在那里度过冬季。它们迁徙的目的是为了交配和繁殖,以避开极地冰冻带来的恶劣环境。幼鲸出生后,经过几个月,当身体积累了足够的脂肪,鲸群便带着新生幼鲸返回极地区域。

WMA的随机函数在区间  内生成初始种群,代表迁徙鲸鱼群体。每一只迁徙鲸鱼的位置,由 表示,代表问题的可能解。解的质量(即迁徙鲸鱼的位置)可以通过基于鲸鱼在协作迁徙过程中行为与运动的迭代过程来不断提升。第 只迁徙鲸鱼 可以选择向更优的位置移动,或者保持在当前位置。下图展示了如何通过优化建模鲸鱼在协作迁徙系统中的行为与运动演化过程。

1.算法原理

(1)WMA的初始化

首先,形成一个初始种群,即迁徙鲸鱼群体  ,其中   为种群成员数,且向量  )。

WMA用于求解一个给定问题,问题的维度为 。迁徙鲸鱼群体通过公式在问题搜索空间的下界   与上界   之间随机生成。这一初始生成的种群扮演着迁徙鲸鱼群体的角色。

其中,函数   生成一个维度为   的随机数向量,随机数取自区间 ;运算符“ ”表示两个向量的Hadamard乘积,即结果向量的每个元素是对应原向量元素逐项相乘得到的。

(2)迁徙鲸鱼在海洋中的当前位置

在每个迁徙鲸鱼群体中,具有更丰富位置知识和更高目标函数值的个体,会引导并带领其他成员朝着目的地前进。在WMA算法中,引入了参数  ,表示经验更丰富的鲸鱼数量(即领导者),这些领导者是位置更优、目标函数值更高的个体。

考虑到希望通过海洋迁徙路径上的某一点来描述整个迁徙鲸鱼群体在任意时刻的实际位置,因此,将   定义为当前   个领导者位置的平均值,即:

(3)经验较少的幼鲸朝向其最近邻居的移动

假设所有种群成员(鲸鱼)按照适应度值和/或它们的位置降序排序:

其中W1是最好的成员(在后文中,表示为WBest),WNpop表示为最差的成员。

所有幼鲸通常都很爱玩耍,这导致每只幼鲸都会尝试模仿与自己年龄最接近的同伴。因此,在本模型中,每一个经验较少的成员(幼鲸) )的移动,主要受到在上式序列中其最近前一成员  影响。

(4)经验较少的鲸鱼由经验丰富的鲸鱼引导

如前所述,整个迁徙鲸鱼群体在海洋中的当前位置,被假定为所有经验丰富鲸鱼当前位置的平均值  。如果 之间的距离开始缩短,说明整个经验丰富的鲸鱼群体正在接近 。在这种情况下,经验较少的幼鲸也必须开始沿着由向量 给定的方向移动,其中 是一个取自区间 、维度为问题维度  的随机数向量。

但需要注意的是,新的位置   只有在满足   时,才会替代当前位置 

(5)由经验丰富的鲸鱼发现并搜索新区域

在迁徙的鲸鱼群体中,经验丰富的个体(即领导者)负责识别并选择通向目的地的最佳路线。正如前文所述,通过卫星跟踪鲸鱼迁徙轨迹的研究表明,有两个关键因素影响了座头鲸的迁徙:

首先,是地球引力场和磁场中的特定位置,在模型中通过向量   表示(如图中的黑色虚线向量);其次,是鲸鱼在迁徙过程中能沿着起点   与终点   之间的几乎直线路径迁移,这一现象在运动方程中通过向量   进行建模(见图中的蓝色虚线向量)。

为了模拟鲸鱼围绕主迁徙方向附近进行的随机运动,在本模型中使用了两个随机参数向量  。设置这两个参数的目的是使运动方程中 向量的影响在整个迁徙期间始终大于 向量的影响。这些系数(尤其是  之间的差异)所体现出的随机行为,在下图中得到了清晰展示:

最终,基于以下运动学方程,第   只领导鲸鱼朝向目的地寻找合适路径:

其中,  和   是从区间   中生成、维度为   的随机数向量,  表示位置(即地点)向量,  是相对方向向量。

需要注意的是,新的位置   只有在满足   时,才会替代当前位置  。在每次 WMA 迭代结束时,迁徙鲸鱼群体会根据个体的优劣进行排序,从最优到最差排列,并选取前   个最优成员作为新的领导者。

WMA优化算法的伪代码如下所示:

2.结果展示

23个经典函数结果:

3.MATLAB核心代码


%% 淘个代码 %%
% 微信公众号搜索:淘个代码,获取更多代码
%座头鲸迁移算法(Whale migrating Algorithm,WMA)
function [Destination_fitness,Destination_position,Convergence_curve]=WMA(N,Max_iteration,lb,ub,dim,fobj)
CostFunction = @(x) fobj(x);
%% Problem Definition
nVar = dim;          % Number of Variables
VarSize = [1 nVar];
VarMin = lb;         %Variables Lower Bound
VarMax =ub ;         %Variables Upper Bound
%% Whale Migration Algorithm Parameters
MaxIt = Max_iteration;        % Maximum Number of Iterations
nPop = N;                     % Population Size
NL=round(nPop/2);             %Number of Leader Whales
%% Initialization

% Empty Whale Structure
Whale.Position=[];
Whale.Cost=[];

% Initialize Population Array
pop=repmat(Whale,nPop,1);

% Initialize Best Solution Ever Found
BestSol.Cost=inf;

% Create Initial Whales
for i=1:nPop
    pop(i).Position=unifrnd(VarMin,VarMax,VarSize);
    pop(i).Cost=CostFunction(pop(i).Position);
    if pop(i).Cost<=BestSol.Cost
        BestSol=pop(i);
    end
end
it=0;
FEs=nPop;
while FEs<MaxIt
    it=it+1;
    % Calculate Leader Whales Mean
    [~, SortOrder]=sort([pop.Cost]);
    pop=pop(SortOrder);
    Mean = 0;
    for i=1:NL
        Mean = Mean + pop(i).Position;
    end
    Mean = Mean/NL;
    for i=1:nPop
        if i>NL
            newsol.Position=Mean+(rand(VarSize)).*(pop(i-1).Position-pop(i).Position)+(rand(VarSize)).*(BestSol.Position-Mean);%%%m

            newsol.Position=max(newsol.Position,VarMin);
            newsol.Position=min(newsol.Position,VarMax);
            newsol.Cost=CostFunction(newsol.Position);
            FEs=FEs+1;
            if newsol.Cost<=pop(i).Cost
                pop(i)=newsol;
            end
            if newsol.Cost<=BestSol.Cost
                BestSol=newsol;
            end
        end

        %%%%%%%%%% Movement the Leader Whales

        if   i<=NL
            newsol.Position=pop(i).Position+(rand).*unifrnd(1*VarMin,1*VarMax,VarSize);
            newsol.Position=max(newsol.Position,VarMin);
            newsol.Position=min(newsol.Position,VarMax);
            newsol.Cost=CostFunction(newsol.Position);
            FEs=FEs+1;
            if newsol.Cost<=pop(i).Cost
                pop(i)=newsol;
            end
            if newsol.Cost<=BestSol.Cost
                BestSol=newsol;
            end
        end
    end

    [~, SortOrder]=sort([pop.Cost]);
    pop=pop(SortOrder);
    BestCost(it)=BestSol.Cost;
    Convergence_curve(it)=BestSol.Cost;

    % Show Iteration Information
    if mod(it,100)==0
        disp(['NFEs ' num2str(FEs) ': Best Cost = ' num2str(BestCost(it))]);
    end

end
Destination_fitness=BestSol.Cost;
Destination_position=BestSol.Position;

end

4.参考文献

参考文献 :Ghasemi M, Deriche M, Trojovský P, et al. An efficient bio-inspired algorithm based on humpback whale migration for constrained engineering optimization[J]. Results in Engineering, 2025: 104215.

本期算法代码获取

后台回复关键词:

TGDM840


获取更多代码:


或者复制链接跳转:https://docs.qq.com/sheet/DU3NjYkF5TWdFUnpu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

淘个代码_

不想刀我的可以选择爱我

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

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

打赏作者

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

抵扣说明:

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

余额充值