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

红尾鹰算法(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

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
抱歉,我无法提供完整的代码,因为这需要根据具体的电池模型和实验数据进行编写和调试。不过,我可以提供一些MATLAB代码片段,以便您参考。 首先,我们需要定义电池的Thevenin模型。假设电池的Thevenin等效电路由电动势(EMF)、内电阻(Ri)和开路电压(Voc)组成,则可以如下定义: ```matlab function [Vth, Rth] = thevenin_model(SOC) % Define Thevenin model parameters EMF = 4.2; % EMF of the battery in volts Ri = 0.01; % Internal resistance of the battery in ohms Voc = 4.1; % Open circuit voltage of the battery in volts % Calculate Thevenin equivalent voltage and resistance Vth = EMF - Ri*SOC; Rth = Ri; end ``` 接下来,我们需要实现粒子滤波算法。这里给出一个简单的代码示例,用于估计电池的SOC: ```matlab % Initialize particle filter parameters num_particles = 1000; % Number of particles SOC_0 = 0.5; % Initial SOC estimate sigma_v = 0.01; % Measurement noise standard deviation sigma_p = 0.01; % Process noise standard deviation % Initialize particles particles = SOC_0 + sigma_p*randn(num_particles, 1); % Main loop for t = 1:T % Simulate battery voltage measurement [Vth, Rth] = thevenin_model(SOC_true(t)); V = Vth + Rth*I(t) + sigma_v*randn(1); % Resample particles based on likelihood weights = normpdf(V, Vth + Rth*I(t), sigma_v); weights = weights/sum(weights); particles = resample(particles, weights); % Propagate particles forward particles = particles + sigma_p*randn(num_particles, 1); % Estimate SOC as mean of particles SOC_est(t) = mean(particles); end ``` 在这个示例中,我们使用了标准的粒子滤波算法,其中我们通过测量电池的电压来更新粒子权重,并通过重新采样和粒子传播来估计SOC。请注意,这只是一个简单的示例,实际的实现可能需要更复杂的算法和更多的数据处理步骤。 希望这些代码片段能够帮助您开始编写自己的Thevenin模型和粒子滤波算法

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

今天吃饺子

不想刀我的可以选择爱我

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

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

打赏作者

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

抵扣说明:

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

余额充值