鹅优化算法(GOOSE Algorithm,GOOSE)是期刊“Evolving Systems”的2024年智能优化算法
01.引言
一种基于鹅的休息和觅食行为的新型元启发式算法GOOSE算法。鹅用一条腿站立,保持平衡,以保护和保护群中的其他个体。
02.优化算法的流程
在自然环境中,每一群鹅都有一到两个守护者,当其他鹅在草地上觅食或休息时,他们负责守卫。单腿站立的鹅(Hamadani et al 2016)。有时,他抬起腿,拿着一块小石头,这样每当他睡着时,石头就会燃烧起来,鹅就会醒来。当鹅听到任何奇怪的声音或动作时,它们会发出响亮的声音来唤醒群中的个体,并保证它们的安全。鹅与其他鸟类不同,它们对观察到的事物做出的反应对人类是有益的。鹅有一个响亮的,侵略性的声音,是完美的保护。
鹅对自己的家有很强的占有欲,它们非常保护自己的家,尤其是在交配和羽翼丰满的时期。图1显示了这些鸟在一个群体中与其他个体互动的图像。通过这种行为,鹅群在它们之间创造了一种有吸引力的保护氛围。本文根据鹅的行为提出了一种算法。基本的技术是基于鹅试着用一条腿站立,用另一条腿举起石头。具体程序如下:
1.在它们休息的时候,大雁成群地聚集在一起,其中一只用单腿保持平衡。
2. 偶尔,他抬起一条腿,扛起一块小石头,这样,当他睡着时,石头又掉了下来,鹅就会醒过来。
3. 当鹅注意到任何意外的噪音或活动时,它会发出响亮的叫声来警告群中的其他动物,以保证它们的安全。
一开始,大雁成群地聚集在它们的避难所和休息区。在种群中,有一只鹅被指派守卫。他开始通过站立和单腿平衡来执行他的命令。每当鹅睡着时,它的腿或它携带的石头就会掉到地上。这时,岩石的声音传到了群中的另一只鹅。它一听到这个声音就会处于被剥削的状态。因此,其他个体需要一些时间才能听到守护鹅的叫声。声音传播的距离可以用周期乘以声音在空气中传播的每秒343米的速度来估计。下图显示了鹅的守卫行为。
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 problems
M_T=inf;
Cong_Curve=zeros(1,Max_IT);
%Initialize the positions of search agents
X=initialization(SearchAgents_no,dim,ub,lb);
Distance_Goose=zeros(SearchAgents_no,dim);
loop=0; % Loop counter
% Main loop
while 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