2024新算法红嘴蓝鹊优化算法,原理详解,MATLAB代码免费获取

红嘴蓝鹊优化算法(Red-billed blue magpie optimizer,RBMO)是一种受自然启发的群智能优化算法。该算法的灵感来自红嘴蓝鹊的合作和有效的捕食行为。通过对红嘴蓝鹊的搜索、追逐、攻击和食物储存行为的模拟,建立了RBMO的数学模型。红嘴蓝鹊是一种灵活和适应性强的捕食者。它主要以水果、昆虫和小型脊椎动物为食,表现出多样化的狩猎行为。这些蓝鹊通常以小群或集群的方式移动,帮助它们更有效地定位食物资源。集体行动增强了他们的搜索效率。此外,它们从地面和树木中获取食物。最后,它们将食物储存在树洞或其他合适的地方,以备将来食用,确保在食物短缺时有可靠的食物来源。红嘴蓝鹊的狩猎行为强调了它作为捕食者的灵活性,精通采用一系列策略和技术来获得食物。此外,它表现出社会和合作的倾向。

该成果于2024年发表在知名SCI期刊“Artificial Intelligence Review”上。

148ca49dfffe1b562b501cc26815d667.png

红嘴蓝鹊是一种主要生活在亚洲的鸟类,如图所示,它描绘了红嘴蓝鹊,其特点是体型大,鲜艳的蓝色羽毛和独特的红色嘴巴。红嘴蓝鹊主要以昆虫、小型脊椎动物、植物等为食,并且具有相对丰富的狩猎行为。在觅食时,红嘴蓝鹊采用跳跃,地面行走和在树枝上寻找食物的组合,红嘴蓝鹊在清晨和傍晚的时候表现出更高的活动水平。

3e56d652ccc2d6fa895f00b5b8dd65b6.png

1、算法原理

(1)种群初始化:

在大多数算法中,RBMO候选解决方案产生通过以下方程在给定问题的约束条件内产生的随机数,需要在每次迭代后更新。

其中,n表示种群规模,dim表示求解问题的维数。

其中ub和lb分别是问题的上限和下限,rand表示从0到1的随机数。

(2)寻找食物

在寻找食物的过程中,红嘴蓝鹊通常以小群或集群的方式行动,以提高搜索效率。它们采用各种技术,如在地上跳跃,行走或寻找食物资源的树木。这种适应性和灵活性使红嘴蓝鹊能够根据环境条件和可用资源采用不同的狩猎策略,确保获得充足的食物供应。

当小组探索食物时和聚类搜索时使用以下公式。

(3)攻击猎物

红嘴蓝鹊在追捕猎物时表现出高度的狩猎熟练度和合作精神。它们采用快速啄食、跳跃捕捉猎物或飞行捕捉昆虫等战术。在小团体行动中,主要目标通常是小型猎物或植物。相应的数学模型如下式所示。红嘴蓝鹊在集群活动时,能够共同瞄准大型昆虫或小型脊椎动物等较大的猎物。这种行为的数学表达式见下式。这种掠食性狩猎行为强调了红嘴蓝鹊所拥有的多种策略和技能,使其成为一种多才多艺的捕食者,擅长在各种情况下成功获取食物。

其中Xfood(t)表示食物的位置, 表示用于生成标准正态分布(平均值0,标准差1)的随机数。

式中,t表示当前迭代次数,Xi(t+1)表示第i个新的搜索代理位置,p表示从所有搜索个体中随机选择的2 - 5只小团体狩猎的红嘴蓝鹊的数量,Xm表示随机选择的第m个个体,Xi表示第i个个体,Xrs(t)表示当前迭代中随机选择的搜索代理。

其中q表示集群在探索食物时的搜索代理数量,介于10到n之间。同样,它也是从整个群体中随机选择的。

(4)食品贮藏

除了寻找和攻击食物外,红嘴蓝鹊还将多余的食物储存在树洞或其他隐蔽的地方,以备将来食用,确保在食物短缺时稳定的食物供应。这个过程保留了解决方案的信息,方便个人找到全局最优值。数学模型如下所示。

其中,fitness old和fitness new分别表示第i只红嘴蓝鹊位置更新前后的适应度值。

总而言之,在RBMO中,优化过程从生成一组随机的候选解开始,称为种群。RBMO的搜索策略通过重复轨迹来寻找合适的位置,无论是次优解还是最优解。食物储藏期提高了RBMO的开发利用能力。最后,RBMO搜索过程在满足最终标准时结束。值得注意的是,在捕猎过程中,红嘴蓝鹊的种群规模不同,但小规模种群和集群的总数保持相似。在本文中,提出了一个均衡人口的系数,设为0.5。算法1中提供了RBMO的伪代码。

e7ea04d138b3685d58fd6a741c1698dd.png

2、结果展示

dec5ad343989fe90f94855093633647f.png

3c5485964d949540c4b47e89183e15b6.png

bb6fed1460799da291b8a78130ae2d59.png

3、MATLAB核心代码

% 红嘴蓝鹊优化算法(RBMO)
function [BestValue, Xfood, Conv,FES] = RBMO(N, T, Xmin, Xmax, D, fobj, func_id)
    % Initialize the relevant parameters
    Xfood = zeros(1, D);
    BestValue = inf;
    Conv = zeros(1, T);
    fitness = inf(N, 1);
    FES = 0;
    Epsilon = 0.5;
    X = initialization(N, D, Xmax, Xmin);
    X_old = X;
    for i = 1:N
        fitness_old(i, 1) = fobj(X_old(i, :)', func_id);
    end
    t = 1; % Start of the main loop
    while t < T+1
        % Search for food
        for i = 1:N
            % Randomly select 2 to 5 red-billed blue magpies
            p = randi([2, 5]);
            selected_index_p = randperm(N, p);
            Xp = X(selected_index_p, :);
            Xpmean = mean(Xp);
            % Randomly select 10 to N red-billed blue magpies
            q = randi([10, N]);
            selected_index_q = randperm(N, q);
            Xq = X(selected_index_q, :);
            Xqmean = mean(Xq);
            A = randperm(N);
            R1 = A(1);
            if rand < Epsilon
                X(i, :) = X(i, :) + (Xpmean - X(R1, :)) .* rand; % Eq. (3)
            else
                X(i, :) = X(i, :) + (Xqmean - X(R1, :)) .* rand; % Eq. (4)
            end
        end
        % Boundary handling
        X = boundaryCheck(X, Xmin, Xmax);
        for i = 1:N
            fitness(i, 1) = fobj(X(i, :)', func_id);
            if fitness(i, 1) < BestValue
                BestValue = fitness(i, 1);
                Xfood = X(i, :);
            end
            FES = FES + 1;
        end
        % Food storage
        [fitness, X, fitness_old, X_old] = Food_storage(fitness, X, fitness_old, X_old); % Eq. (7)
        CF = (1 - t / T)^(2 * t / T);
        % Exploitation
        for i = 1:N
            % Randomly select 2 to 5 red-billed blue magpies
            p = randi([2, 5]);
            selected_index_p = randperm(N, p);
            Xp = X(selected_index_p, :);
            Xpmean = mean(Xp);
            % Randomly select 10 to N red-billed blue magpies
            q = randi([10, N]);
            selected_index_q = randperm(N, q);
            Xq = X(selected_index_q, :);
            Xqmean = mean(Xq);
            if rand() < Epsilon
                X(i, :) = Xfood + CF * (Xpmean - X(i, :)) .* randn(1, D); % Eq. (5)
            else
                X(i, :) = Xfood + CF * (Xqmean - X(i, :)) .* randn(1, D); % Eq. (6)
            end
        end
        % Boundary handling
        X = boundaryCheck(X, Xmin, Xmax);
        for i = 1:N
            fitness(i, 1) = fobj(X(i, :)', func_id);
            if fitness(i, 1) < BestValue
                BestValue = fitness(i, 1);
                Xfood = X(i, :);
            end
            FES = FES + 1;
        end
        % Food storage
        [fitness, X, fitness_old, X_old] = Food_storage(fitness, X, fitness_old, X_old); % Eq. (7)
        Conv(t) = BestValue;
        t = t + 1;
    end
end

参考文献

[1]Fu S, Li K, Huang H, et al. Red-billed blue magpie optimizer: a novel metaheuristic algorithm for 2D/3D UAV path planning and engineering design problems[J]. Artificial Intelligence Review, 2024, 57(6): 1-89.


完整代码获取

后台回复关键词:

TGDM834

点击下方卡片关注,获取更多代码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

淘个代码_

不想刀我的可以选择爱我

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

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

打赏作者

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

抵扣说明:

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

余额充值