2023优化算法之红尾鹰算法(RTH),原理公式详解,附matlab代码

这篇文章介绍了一种新型的群智能优化算法——红尾鹰算法,模仿红尾鹰的狩猎行为,具有高效搜索和寻优能力。算法包括高空翱翔、低空盘旋和俯冲捕食阶段,展示了在CEC2005函数集上的性能。代码示例展示了MATLAB实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

红尾鹰算法(Red‑tailed hawk algorithmRTH)是一种新型群智能优化算法,该算法模拟了红尾鹰的狩猎行为,具有进化能力强、搜索速度快、寻优能力强的特点。该成果于2023年发表在知名SCI期刊Scientific Reports上,目前在谷歌学术上被引4次。

b7b3ed9fe528820a33a855176672cf5b.png

红尾鹰(Buteo jamaicensis)是一种猛禽,在北美大部分地区繁殖。红尾鹰生活在不同的环境和海拔,如沙漠、草原、森林、农田和城市。作为一种食肉动物,它们遇到的每一种小动物都可能被视为猎物。

红尾鹰的狩猎过程分为三个阶段。在高空翱翔阶段,红尾鹰探索搜索空间,确定具有猎物位置的区域;在低空翱翔阶段,红尾在猎物周围的选定区域内移动,以选择狩猎的最佳位置。然后,红尾鹰在急转和俯冲阶段摆动并击中目标。

算法原理

(1)高空翱翔

红尾鹰以温和的二面体飞行,尽可能少地拍动翅膀以节省能量,与其他鹰不同,红尾鹰可以飞行很长的距离,这就是红尾鹰的特点。

在此阶段中,红尾鹰会飞到很远的天空,寻找食物供应方面的最佳位置,此时,它会尽可能少拍动翅膀以节省能量探索所选区域,下式为该阶段的数学模型:  其中,X(t)表示迭代t时红尾鹰的位置,Xbest为获得的最佳位置,Xmean为位置的均值,LevyLevy飞行分布函数,其数学表达式如下: 

其中s为常数(0.01)dim为问题维数,β为常数(1.5)uυ为随机数[0 ~ 1]TF(t)为根据下式可计算的过渡因子函数:  

其中Tmax表示最大迭代次数。

(2)低空盘旋

红尾鹰在上一阶段中选择目标位置后,它会绕着猎物进行盘旋低飞,这种移动使它能够探测到击中目标的最佳位置和时间,并给予猎物致命一击,其数学模型如下: 

其中,X(t)表示迭代t时红尾鹰的位置,Xbest为获得的最佳位置,xy表示方向坐标,可以计算如下:

其中,R0为半径的初值[0.5-3]A为角度增益[5-15]rand为随机增益[0-1]r为控制增益[1,2]。这些参数帮助鹰绕着猎物盘旋飞行,同时提高红尾鹰捕猎的成功率。

(3)俯冲捕食阶段

在这一阶段中,红尾鹰在前一步选择了最佳的位置和时刻后突然弯腰并从低空飞行阶段的最佳位置攻击猎物,该阶段十分迅速,其数学表达式如下:  该阶段的每个步长可以如下计算

式中,α为加速度因子,G为重力因子,可分别定义为: 

其中,α表示鹰的加速度,随着t的增加而增加,以提高收敛速度;G重力因子,当鹰离猎物较近时,重力效应减小,以减少捕食多样性。

由于基于Levy函数的高飙升阶段,红尾鹰避免了在局部极小值上尝试,低突飞提高了开发阶段的收敛速度,而俯仰和俯冲阶段则提高了RTH算法的精度。


结果展示

在CEC2005函数集测试,结果如下:

5a22afb5244b3ac61671be1acb61b308.png

39cf823685e5e4042b3b484cdd652d2f.png

42da4cda7ba3ad2076c92edb73f815e4.png

2b820ae9e31e950200eaf94bbb5d20b9.png

 MATLAB核心代码

function [Cost, Pos, Convergence_curve]=RTH(N,Tmax,low,high,dim,fobj)
Xbestcost = inf; Xbestpos = rand(N,dim);
for i=1:N
    Xpos(i,:) = low+(high-low).*rand(1,dim);
    Xcost(i)=fobj(Xpos(i,:));
    if Xcost(i) < Xbestcost
        Xbestpos = Xpos(i,:);
        Xbestcost = Xcost(i);
    end
end
A=15;
R0=0.5;
r = 1.5;
for t=1:Tmax
    %%               1- High Soaring
    Xmean=mean(Xpos);
    TF = 1+sin(2.5-t/Tmax); % TF
    for i=1:N
        Xnewpos=Xbestpos+(Xmean-Xpos(i,:)).*Levy(dim)*TF;
        Xnewpos = max(Xnewpos, low);
        Xnewpos = min(Xnewpos, high);
        Xnewcost=fobj(Xnewpos);
        if Xnewcost<Xcost(i)
           Xpos(i,:) = Xnewpos;
           Xcost(i)= Xnewcost;
             if Xcost(i) < Xbestcost
              Xbestpos= Xpos(i,:);
             Xbestcost=Xcost(i); 
             end
        end
    end
    %%                2- Low Soaring
    Xmean=mean(Xpos);
    for i=1:N-1
        aa=randperm(N);
        Xpos=Xpos(aa,:);
        Xcost=Xcost(aa);
        [x y]=polr(A,R0,N,t,Tmax,r);
        StepSize=Xpos(i,:)-Xmean;
        Xnewpos = Xbestpos +(y(i)+x(i))*StepSize;
        Xnewpos = max(Xnewpos, low);
        Xnewpos = min(Xnewpos, high);
        Xnewcost=fobj(Xnewpos);
        if Xnewcost<Xcost(i)
           Xpos(i,:) = Xnewpos;
           Xcost(i)= Xnewcost;
           if Xcost(i) < Xbestcost
                     Xbestpos= Xpos(i,:);
                    Xbestcost=Xcost(i);
           end
        end
    end
    %%                3- Stopping & Swooping
    Xmean=mean(Xpos);
    TF = 1+0.5*sin(2.5-t/Tmax); 
    for i=1:N
        b=randperm(N);
        Xpos=Xpos(b,:);
        Xcost=Xcost(b);
        [x y]=polr(A,R0,N,t,Tmax,r);
        alpha=(sin(2.5-t/Tmax).^2);
        G=2*(1-(t/Tmax));
        StepSize1 = 1.*Xpos(i,:) - TF*Xmean;
        StepSize2= G.*Xpos(i,:)-TF*Xbestpos;
        Xnewpos = alpha*Xbestpos+x(i)*StepSize1+y(i)*StepSize2;
        Xnewpos = max(Xnewpos, low);
        Xnewpos = min(Xnewpos, high);
        Xnewcost=fobj(Xnewpos);
        if Xnewcost<Xcost(i)
           Xpos(i,:) = Xnewpos;
           Xcost(i)= Xnewcost;
           if Xcost(i) < Xbestcost
                     Xbestpos= Xpos(i,:);
                    Xbestcost=Xcost(i); 
           end
        end
    end
    Convergence_curve(t)=Xbestcost;
    Cost = Xbestcost;
    Pos = Xbestpos;
end
 function [xR yR]=polr(A,R0,N,t,MaxIt,r)
%// Set parameters
th = (1+t/MaxIt)*A*pi*rand(N,1);
R  =(r-t/MaxIt)*R0*rand(N,1); 
xR = R.*sin(th);
yR = R.*cos(th);
 xR=xR/max(abs(xR));
 yR=yR/max(abs(yR));
 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;

参考文献

[1] Ferahtia S, Houari A, Rezk H, et al. Red-tailed hawk algorithm for numerical optimization and real-world problems[J]. Scientific Reports, 2023, 13(1): 12950.

完整代码获取方式:后台回复关键字:

TGDM100

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

淘个代码_

不想刀我的可以选择爱我

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

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

打赏作者

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

抵扣说明:

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

余额充值