【智能优化算法】鹅优化算法(GOOSE Algorithm,GOOSE)

文摘   2024-08-15 22:51   湖南  

鹅优化算法(GOOSE Algorithm,GOOSE)是期刊“Evolving Systems”的2024年智能优化算法

01.引言

一种基于鹅的休息和觅食行为的新型元启发式算法GOOSE算法。鹅用一条腿站立,保持平衡,以保护和保护群中的其他个体。

02.优化算法的流程

在自然环境中,每一群鹅都有一到两个守护者,当其他鹅在草地上觅食或休息时,他们负责守卫。单腿站立的鹅(Hamadani et al 2016)。有时,他抬起腿,拿着一块小石头,这样每当他睡着时,石头就会燃烧起来,鹅就会醒来。当鹅听到任何奇怪的声音或动作时,它们会发出响亮的声音来唤醒群中的个体,并保证它们的安全。鹅与其他鸟类不同,它们对观察到的事物做出的反应对人类是有益的。鹅有一个响亮的,侵略性的声音,是完美的保护。

鹅对自己的家有很强的占有欲,它们非常保护自己的家,尤其是在交配和羽翼丰满的时期。图1显示了这些鸟在一个群体中与其他个体互动的图像。通过这种行为,鹅群在它们之间创造了一种有吸引力的保护氛围。本文根据鹅的行为提出了一种算法。基本的技术是基于鹅试着用一条腿站立,用另一条腿举起石头。具体程序如下:

1.在它们休息的时候,大雁成群地聚集在一起,其中一只用单腿保持平衡。

2. 偶尔,他抬起一条腿,扛起一块小石头,这样,当他睡着时,石头又掉了下来,鹅就会醒过来。

3. 当鹅注意到任何意外的噪音或活动时,它会发出响亮的叫声来警告群中的其他动物,以保证它们的安全。

一开始,大雁成群地聚集在它们的避难所和休息区。在种群中,有一只鹅被指派守卫。他开始通过站立和单腿平衡来执行他的命令。每当鹅睡着时,它的腿或它携带的石头就会掉到地上。这时,岩石的声音传到了群中的另一只鹅。它一听到这个声音就会处于被剥削的状态。因此,其他个体需要一些时间才能听到守护鹅的叫声。声音传播的距离可以用周期乘以声音在空气中传播的每秒343米的速度来估计。下图显示了鹅的守卫行为。


03.论文中算法对比图

04.本代码效果图





05.部分代码

function [Best_score,Best_pos,Cong_Curve]=GOOSE(SearchAgents_no,Max_IT,lb,ub,dim,fobj)Best_pos=zeros(1,dim);Best_score=inf;                          %change this to -inf for maximization problemsM_T=inf;Cong_Curve=zeros(1,Max_IT);%Initialize the positions of search agentsX=initialization(SearchAgents_no,dim,ub,lb);Distance_Goose=zeros(SearchAgents_no,dim);loop=0;                                               % Loop counter% Main loopwhile loop<Max_IT    for i=1:size(X,1)         % Return back the search agents that go beyond the boundaries of the search space        Flag4ub=X(i,:)>ub;        Flag4lb=X(i,:)<lb;        X(i,:)=(X(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;                           % Calculate objective function for each search agent        fitness=fobj(X(i,:));                            if fitness<Best_score                Best_score=fitness;                          Best_pos=X(i,:);                                       end            end         for i=1:size(X,1)                pro=rand;      rnd=rand;       coe=rand();       if(coe<=0.17)           coe;       else           coe=0.17;       end      S_W(i,:)=randi([5,25],1,1);                                         %Eq.(3.1)      % Time of Arrive object to earth.       T_o_A_O(i,:)=rand(1,dim);                                           %Eq.(3.2)      % Time of Arrive Sound to Groups      T_o_A_S(i,:)=rand(1,dim);                                           %Eq.(3.3)                    T_T=sum(T_o_A_S(i,:))/dim;                                          %Eq.(3.4)      % Determine Time Average      T_A=T_T/2;                                                          %Eq.(3.5)            if rnd>=0.5                     if pro>0.2                                if S_W>=12                        %  Calculate Free Fall Speed                         F_F_S=T_o_A_O(i,:) *(sqrt(S_W(i,:))/ 9.81);       %Eq.(3.6)                           S_S=343.2;                        D_S_T(i,:)=S_S* T_o_A_S(i,:);                     %Eq.(3.7)                        D_G(i,:)=0.5* D_S_T(i,:);                         %Eq.(3.8)                      X(i,:)=F_F_S + D_G(i,:)* T_A^2;                     %Eq.(3.9)                                          elseif S_W<12             elseif pro<=0.2                         %  Calculate Free Fall Speed                         F_F_S=T_o_A_O(i,:) *(S_W(i,:)/ 9.81);             %Eq.(3.10)                        S_S=343.2;                        D_S_T(i,:)=S_S* T_o_A_S(i,:);                     %Eq.(3.7)                        D_G(i,:)=0.5* D_S_T(i,:);                         %Eq.(3.8)                      X(i,:)=F_F_S.*D_G(i,:)* T_A^2*coe;                  %Eq.(3.11)                                                      end              end                     else                        if M_T>T_T                          M_T=T_T;                        end                     alpha=(2-(loop/(Max_IT/2)));                         %Eq.(3.12)                     %random an awakening                     % exploring wakeup without holding stone.                     X(i,:)=randn(1,dim).*(M_T*alpha)+Best_pos;           %Eq.(3.13)          end     end    loop=loop+1;    Cong_Curve(loop)=Best_score;end
下载链接:https://mbd.pub/o/bread/mbd-ZpmalZxx
或点击阅读原文

MATLAB科研小白
信号处理方向在校博士研究生,目前专研于MATLAB算法及科学绘图等,熟知各种信号分解算法、神经网络时序预测算法、数据拟合算法以及滤波算法。提供一个可以相互学习相互进步的平台
 最新文章