2024最新:鹅优化算法(GO),原理公式详解,附matlab代码
鹅优化算法(GOOSEAlgorithm,GO)是一种群智能优化算法,Rebwar Khalid Hamad提出了一种基于鹅的休息和觅食行为的新型元启发式算法。鹅用一条腿站立,保持平衡,以保护和保护群中的其他个体。该算法通过自适应地调整搜索空间的分辨率和搜索速度,以快速而准确地找到最优解,具有收敛速度快、求解精度高等特点,是一个出色的优化算法。该成果于2024年发表在知名SCI期刊JCQ3区Ev.
鹅优化算法(GOOSE Algorithm,GO)是一种群智能优化算法,Rebwar Khalid Hamad提出了一种基于鹅的休息和觅食行为的新型元启发式算法。鹅用一条腿站立,保持平衡,以保护和保护群中的其他个体。该算法通过自适应地调整搜索空间的分辨率和搜索速度,以快速而准确地找到最优解,具有收敛速度快、求解精度高等特点,是一个出色的优化算法。该成果于2024年发表在知名SCI期刊JCQ3区Evolving Systems上。
GO从鹅的休息和觅食行为获得灵感,当鹅听到任何奇怪的声音或动作时,它们会发出响亮的声音来唤醒群中的个体,并保证它们的安全。
鹅群在它们之间创造了一种有吸引力的保护氛围。鹅的动作特点分为三类:1. 在它们休息的时候,大雁成群地聚集在一起,其中一只用单腿保持平衡。2. 偶尔,他抬起一条腿,扛起一块小石头,这样,当他睡着时,石头又掉了下来,鹅就会醒过来。3. 当鹅注意到任何意外的噪音或活动时,它会发出响亮的叫声来警告群中的其他动物,以保证它们的安全。
鹅成群地聚集在它们的避难所和休息区。在种群中,会有一只鹅被指派守卫,这只鹅开始通过站立和单腿平衡来执行他的命令。每当鹅睡着时,它的腿或它携带的石头就会掉到地上。这时,岩石的声音传到了群中的另一只鹅。它一听到这个声音就会处于被剥削的状态。因此,其他个体需要一些时间才能听到守护鹅的叫声。
1、算法原理
(1)开发阶段
我们首先需要估计鹅脚里的石头的重量,在5到25公斤之间。通过下式,我们可以在任意迭代中随机求出石头的重量。这个变量指示迭代的次数。
然后,在下式中,我们应该找到当石头落下时到达地球所需的时间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_Time和alpha变量都被用来提高GOOSE的可搜索性。在下式中,将时间和alpha的最小值乘以一个随机数,然后加到搜索空间中的最佳位置。
Міпітит
其中dim是问题维度的数量,Best_pos是我们在搜索区域中找到的最佳位置。
总而言之,鹅算法随机开始生成种群。然后,在第一次迭代中,它检查种群中的值,以恢复边界外的值。同时,实现目标函数来确定搜索边界内的最佳分数和最佳位置。为了控制开发和勘探阶段,我们使用随机选择值的随机变量rand。如果rand的值大于或等于0.5,则激活探索阶段。
2、结果展示
可以看到,该算法基本不会陷入局部最优解。搜索效率也还不错!
3、MATLAB核心代码
%% 淘个代码 %%
% 微信公众号搜索:淘个代码,获取更多代码
% 鹅优化算法(GO)
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
参考文献
[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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)