当前位置:   article > 正文

2024最新:​鹅优化算法(GO),原理公式详解,附matlab代码

鹅优化算法

鹅优化算法(GOOSE AlgorithmGO)是一种群智能优化算法Rebwar Khalid Hamad提出了一种基于鹅的休息和觅食行为的新型元启发式算法。鹅用一条腿站立,保持平衡,以保护和保护群中的其他个体。该算法通过自适应地调整搜索空间的分辨率和搜索速度,以快速而准确地找到最优解,具有收敛速度快、求解精度高等特点,是一个出色的优化算法。该成果于2024发表在知名SCI期刊JCQ3区Evolving Systems上。

fa4399460ba1140fe7dd0d6866a1f014.png

GO从鹅的休息和觅食行为获得灵感,当鹅听到任何奇怪的声音或动作时,它们会发出响亮的声音来唤醒群中的个体,并保证它们的安全。

鹅群在它们之间创造了一种有吸引力的保护氛围。鹅的动作特点分为三类:1. 在它们休息的时候,大雁成群地聚集在一起,其中一只用单腿保持平衡。2. 偶尔,他抬起一条腿,扛起一块小石头,这样,当他睡着时,石头又掉了下来,鹅就会醒过来。3. 当鹅注意到任何意外的噪音或活动时,它会发出响亮的叫声来警告群中的其他动物,以保证它们的安全。

be7e8d895677e300ebb767e6a647a29f.png

鹅成群地聚集在它们的避难所和休息区。在种群中,会有一只鹅被指派守卫,这只鹅开始通过站立和单腿平衡来执行他的命令。每当鹅睡着时,它的腿或它携带的石头就会掉到地上。这时,岩石的声音传到了群中的另一只鹅。它一听到这个声音就会处于被剥削的状态。因此,其他个体需要一些时间才能听到守护鹅的叫声。

61799b8a95aa6bb62452f59eb6d82ccb.png

1、算法原理

(1)开发阶段

我们首先需要估计鹅脚里的石头的重量,在525公斤之间。通过下式,我们可以在任意迭代中随机求出石头的重量。这个变量指示迭代的次数。

然后,在下式中,我们应该找到当石头落下时到达地球所需的时间time_of_arrive_object。它是随机的,在1到循环中每次迭代的维数之间。

在下式中,我们找到了物体撞击地面并发出声音并传递给群中每只鹅的时间Time_of_Arrive_Soundit

在下一个等式中,找出声音在整个迭代过程中传播并到达群中单个鹅所需的总时间。如该式所示,维度除以总时间量。

为了得到所需的平均时间,我们将总时间除以2。下式解释了步骤。

正如我们之前所讨论的,有一个随机变量rnd负责开发和探索阶段的分布。变量pro的值在[0,1]范围内随机选取。假设变量pro的值大于0.2,且Stone_Weightit大于等于12。在上式中,time_of_arrive_object乘以stone_weight的平方根除以物体的加速度。为了保护和唤醒群体中的个体,这些方程式应该被计算出来。

(2)探索阶段

一旦其中一只鹅醒来,它们就开始尖叫,以保护鸟群中的所有个体,此时开始进入探索阶段。如果变量rnd的值小于0.5,那么应用以下方程。

通过使用randn(1, dim)确保鹅随机探索搜索空间中的其他个体。然而,Minimum_Timealpha变量都被用来提高GOOSE的可搜索性。在下式中,将时间和alpha的最小值乘以一个随机数,然后加到搜索空间中的最佳位置。

Міпітит

其中dim是问题维度的数量,Best_pos是我们在搜索区域中找到的最佳位置。

总而言之,鹅算法随机开始生成种群。然后,在第一次迭代中,它检查种群中的值,以恢复边界外的值。同时,实现目标函数来确定搜索边界内的最佳分数和最佳位置。为了控制开发和勘探阶段,我们使用随机选择值的随机变量rand。如果rand的值大于或等于0.5,则激活探索阶段。

2、结果展示

18e3a3772315b500ba934f9124c2321c.png

844163ba09b720957cfde0a23cb68350.png

70bacaa8055a39df78e88ce4593be288.png

1c1f4b1416dfdd86dfd32a6f6cf34c2d.png

8e9b99655907f1d1d50a4ebed224fa3b.png

可以看到,该算法基本不会陷入局部最优解。搜索效率也还不错!

3、MATLAB核心代码

  1. %% 淘个代码 %%
  2. % 微信公众号搜索:淘个代码,获取更多代码
  3. % 鹅优化算法(GO)
  4. function [Best_score,Best_pos,Cong_Curve]=GOOSE(SearchAgents_no,Max_IT,lb,ub,dim,fobj)
  5. Best_pos=zeros(1,dim);
  6. Best_score=inf;                          %change this to -inf for maximization problems
  7. M_T=inf;
  8. Cong_Curve=zeros(1,Max_IT);
  9. %Initialize the positions of search agents
  10. X=initialization(SearchAgents_no,dim,ub,lb);
  11. Distance_Goose=zeros(SearchAgents_no,dim);
  12. loop=0;                                               % Loop counter
  13. % Main loop
  14. while loop<Max_IT
  15.     for i=1:size(X,1)
  16.         % Return back the search agents that go beyond the boundaries of the search space
  17.         Flag4ub=X(i,:)>ub;
  18.         Flag4lb=X(i,:)<lb;
  19.         X(i,:)=(X(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
  20.         % Calculate objective function for each search agent
  21.         fitness=fobj(X(i,:));
  22.         if fitness<Best_score
  23.             Best_score=fitness;
  24.             Best_pos=X(i,:);
  25.         end
  26.     end
  27.     for i=1:size(X,1)
  28.         pro=rand;
  29.         rnd=rand;
  30.         coe=rand();
  31.         if(coe<=0.17)
  32.             coe;
  33.         else
  34.             coe=0.17;
  35.         end
  36. S_W(i,:)=randi([5,25],1,1);                                         %Eq.(3.1)
  37.         % Time of Arrive object to earth.
  38. T_o_A_O(i,:)=rand(1,dim);                                           %Eq.(3.2)
  39.         % Time of Arrive Sound to Groups
  40. T_o_A_S(i,:)=rand(1,dim);                                           %Eq.(3.3)
  41. T_T=sum(T_o_A_S(i,:))/dim;                                          %Eq.(3.4)
  42.         % Determine Time Average
  43. T_A=T_T/2;                                                          %Eq.(3.5)
  44.         if rnd>=0.5
  45.             if pro>0.2
  46.                 if S_W>=12
  47.                     %  Calculate Free Fall Speed
  48.                     F_F_S=T_o_A_O(i,:) *(sqrt(S_W(i,:))/ 9.81);       %Eq.(3.6)
  49.                     S_S=343.2;
  50.                     D_S_T(i,:)=S_S* T_o_A_S(i,:);                     %Eq.(3.7)
  51.                     D_G(i,:)=0.5* D_S_T(i,:);                         %Eq.(3.8)
  52.                     X(i,:)=F_F_S + D_G(i,:)* T_A^2;                     %Eq.(3.9)
  53.                 elseif S_W<12
  54.                 elseif pro<=0.2
  55.                     %  Calculate Free Fall Speed
  56.                     F_F_S=T_o_A_O(i,:) *(S_W(i,:)/ 9.81);             %Eq.(3.10)
  57.                     S_S=343.2;
  58.                     D_S_T(i,:)=S_S* T_o_A_S(i,:);                     %Eq.(3.7)
  59.                     D_G(i,:)=0.5* D_S_T(i,:);                         %Eq.(3.8)
  60.                     X(i,:)=F_F_S.*D_G(i,:)* T_A^2*coe;                  %Eq.(3.11)
  61.                 end
  62.             end
  63.         else
  64.             if M_T>T_T
  65.                 M_T=T_T;
  66.             end
  67.             alpha=(2-(loop/(Max_IT/2)));                         %Eq.(3.12)
  68.             %random an awakening
  69.             % exploring wakeup without holding stone.
  70.             X(i,:)=randn(1,dim).*(M_T*alpha)+Best_pos;           %Eq.(3.13)
  71.         end
  72.     end
  73.     loop=loop+1;
  74.     Cong_Curve(loop)=Best_score;
  75. end

参考文献

[1] Hamad R K, Rashid T A. GOOSE algorithm: a powerful optimization tool for real-world engineering challenges and beyond[J]. Evolving Systems, 2024: 1-26.

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

TGDM199

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/561741
推荐阅读
相关标签
  

闽ICP备14008679号