2023年优化算法之之霸王龙优化算法(TROA),原理公式详解,附matlab代码

霸王龙优化算法(Tyrannosaurus optimization,TROA)是一种新的仿生优化算法,该算法模拟霸王龙的狩猎行为,具有搜索速度快等优势。该成果于2023年发表在知名SCI期刊e-Prime-Advances in Electrical Engineering, Electronics and Energy上。

TROA算法通过位置初始化、狩猎和追逐、选择阶段三个主要操作模拟了霸王龙的狩猎行为,最后选取最优解。

算法原理

(1)种群位置初始化

TROA是一种基于种群的算法,它在搜索空间中随机生成猎物数量。设Xx为猎物的位置或位置,在上下限范围内随机生成,其数学模型如下式表示: 

 式中,Xi =[x1, x2··xn]为猎物位置,i=1,2··n,其中,n为维数,np为种群数,dim为搜索空间维数,ub为上限,lb为下限。

(2)狩猎和追逐

霸王龙的捕猎是让幼崽追逐和捕捉猎物,所以当霸王龙捕食时,它会进行随机捕食,捕食动作的数学模型如下式表示: 

 其中,Er为到达分散猎物的估计,sr为狩猎成功率,在[0.1,1]之间。如果成功率为0,则表示猎物已经逃脱,狩猎失败,猎物的位置需要相应更新。目标是猎物相对霸王龙位置的最小位置,霸王龙的奔跑速度是tr。

(3)选择阶段

选择过程取决于猎物的位置,即目标猎物当前的位置和之前的位置。如果霸王龙捕猎失败,猎物的位置就变成零。

  其中,  为初始随机猎物位置的适应度函数,  为更新猎物位置的适应度函数。

结果展示

以为CEC2005函数集为例,进行结果展示:

ec1ff2a4364b4b18e3cf5df0aae1338e.png

ec7c96aba53f98a588e0e63959cf679d.png

26b98d8da64289617139e9cff0741959.png

81317c27c9bf54bf952315f769749bdd.png

b2395d40e1e39f5d1fef14273450ccb4.png

 MATLAB核心代码

% 霸王龙优化算法
function [Jnew,J,znew,Convergence_curve1,Positions,p,JJ]=TROA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj,sr,tr,pr)
Leader_score=inf;
trex_pos=ones(SearchAgents_no,dim);
%             initial position of prey
Positions=initialization(SearchAgents_no,dim,ub,lb);
z=Positions;
 t=1;                         % starting iteration                 
walk=[0.046 0.06];
run=0.3;
for p=1:SearchAgents_no
     J(p,1) = fobj(z(p,:));
end


[~,indx] = min(J);
Target(:,:) = z(indx,:);
JJ=min(J);


while t<Max_iteration+1  %Main loop %Update the Position of solutions
   ES=randn*(1-(t/Max_iteration));   % Probability Ratio of hunting sucess of the prey [-1 to 1]
    for pp=1:SearchAgents_no 
        for j=1:dim 
%            hunting of the prey            
            Rnd=floor(rand()*SearchAgents_no)+1;
                if rand<ES
                    znew(pp,j)=z(pp,j)+sr*( trex_pos(pp,j)*tr-Target(1,j)*rand()*pr);    %sucess
                else
                    znew(pp,j)=z(pp,j)*rand();
                end       
        end
        Jnew(pp,:)=fobj(znew(pp,:));
        for j=1:dim 
       %-----------selection-----------
        
        if J(pp,1)>Jnew(pp)
           z(pp,:)=znew(pp,:); 
           J(pp,1)=Jnew(pp);
% updation of target
        [~,indx] =min(J);
         Target = z(indx,:);
            else 
                 Target(1,j)=zeros;
               J(pp,1)=J(pp);
        end
        end
      znew1=z(1,:);
    end
    Convergence_curve1(t)=min(J);  %Update the convergence curve
 p(t)= znew1(1,1);


     t=t+1;
    
end
end

参考文献

[1] Sahu V S D M, Samal P, Panigrahi C K. Tyrannosaurus optimization algorithm: A new nature-inspired meta-heuristic algorithm for solving optimal control problems[J]. e-Prime-Advances in Electrical Engineering, Electronics and Energy, 2023, 5: 100243.

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

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
PHP霸王餐程序源码是一种用PHP编写的用于开展促销活动、吸引用户参与的网站程序。下面是一个简单的示例源码: ```php <?php // 定义霸王餐活动的信息 $activityName = "霸王餐活动"; $startTime = "2022-01-01"; $endTime = "2022-01-31"; // 判断当前时间是否在活动期间 $currentDate = date("Y-m-d"); if ($currentDate < $startTime || $currentDate > $endTime) { echo "活动还未开始或已经结束"; exit; } // 判断用户是否已参与活动 $userParticipated = false; // 实际应用中,可以根据用户的登录状态、IP地址等来判断用户是否已参与活动 if ($userParticipated) { echo "您已经参与过活动"; exit; } // 输出活动页面 echo "<h1>{$activityName}</h1>"; echo "<p>活动时间:{$startTime} 至 {$endTime}</p>"; echo "<p>请填写以下信息参与活动:</p>"; echo "<form action='submit.php' method='post'>"; echo "<label for='name'>姓名:</label>"; echo "<input type='text' id='name' name='name'>"; echo "<br>"; echo "<label for='phone'>电话:</label>"; echo "<input type='text' id='phone' name='phone'>"; echo "<br>"; echo "<button type='submit'>提交</button>"; echo "</form>"; ?> ``` 上述示例代码首先定义了一个霸王餐活动的信息,包括活动名称、开始时间和结束时间。然后判断当前时间是否在活动期间,如果不是,则提示活动还未开始或已经结束,并结束程序的执行。 接下来根据用户是否已参与活动的状态,判断用户是否已参与活动,如果已参与,则输出相应的提示,并结束程序的执行。 最后,在活动期间且用户未参与活动的情况下,输出活动页面,并要求用户填写姓名和电话的信息,可向`submit.php`提交用户的表单数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

今天吃饺子

不想刀我的可以选择爱我

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

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

打赏作者

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

抵扣说明:

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

余额充值