狐狸优化算法(Fox-inspired Optimization Algorithm,FOX)是一种受自然启发的群智能优化算法。模仿自然界中的狐狸捕食猎物时的觅食行为。该算法基于测量狐狸与猎物之间距离的技术,以执行有效的跳跃。狐狸还模仿跳跃技术,以便潜入雪中狩猎猎物。在利用阶段,狐狸通过对猎物的距离测量,估算出跳跃技术,以便俯冲捕食猎物。

该成果于2023年发表在计算机领域二区期刊Applied Intelligence上,目前在谷歌学术上被引率54次。
一开始,FOX初始化人口,这被称为X矩阵。X是狐狸的位置。然后,在每次迭代中使用标准基准函数计算每个搜索代理的适应度。
1、算法原理
(1)开发
在开发阶段,随机变量p的值在以下范围内[0,1]。因此,如果随机数p大于0.18,则需要找到狐狸的新位置,要找到新位置,声音传播的距离Dist_S_T,狐狸与猎物的距离 ,必须计算跳跃值Jump_{it}必须被计算。因此,本文生成一个随机数,范围从0到1的声音传播时间Time_S_Tit。声音与狐狸的距离是通过将声音在空气中SP_S的速度乘以时间来计算的Time_S_Tit

其中,介质SP_S中的声速等于空气中的343,并且Time_S_Tit是范围[0,1]中的随机数。然后是迭代次数,范围从1到500。然而,构建了另一个方程来寻找SP_S,该方程基于迄今为止通过将声音在狐狸和猎物之间传播所需的时间除以而找到的最佳位置。Time_S_Tit是随机的,而 是群体中最好的搜索代理。以下公式显示了如何根据最佳位置找到声音SP_S的速度。

计算声音传播的距离Dist_S_Tit,狐狸与猎物的距离;因此,狐狸与猎物的距离Dist_Fox_Preyit可以通过减半Dist_S_Tit。因此,为了计算传感器和物体之间的物理距离,声音传播的距离除以2,因为传感器和物体之间的距离是声波所发现的距离的一半。下图展示出了传感器,其向对象发送声波信号,然后接收信号。

因此,下式取自传感器和物体的技术,以从图中找到距离:

在找到狐狸和猎物之间的距离后,狐狸需要找到一个新的位置,这样狐狸就需要跳起来抓住猎物。因此,狐狸需要计算跳跃的高度, 。因此,可以通过以下公式计算出 :
其中9.81是重力加速度,t等于声音传播的平均时间,由于跳跃中的上下台阶,它被平方了。时间过渡tt值的计算方法是将时间过渡Time_S_Tit的总和除以维度。以下等式示出了tt和MinT计算。然后平均时间t通过将tt除以2得到。平均时间和重力乘以0.5,因为跳跃值需要两个不同的时间上升和下降。因此,重力和平均时间都必须乘以0.5。
下面的等式显示了如果p大于0.18,则狐狸的新位置的计算。

因为使用了p条件,所以每次迭代中只执行其中一个。
(2)探索
为了控制随机行走,狐狸在这个阶段根据迄今为止找到的狐狸的最佳位置随机搜索。狐狸在这个阶段没有跳跃技术,因为它必须随机行走以探索搜索区域的猎物。为了确保狐狸随机地走向最佳位置,使用最小时间变量和变量a来控制搜索。方程展示了对MinT变量的计算
将问题的最小时间平均值除以问题的维数,得到最小时间平均值tt。
其中,是最大迭代次数。同时计算最小值和变量对搜索阶段有着至关重要的影响,以接近最佳解。使用 确保狐狸在探索猎物时不着痕迹地行走。
在此阶段的方程可以适应现有的算法,以提高其性能。它们也可以用来提出新的元启发式算法。
两个阶段中的方程不需要任何修改,而是适应于特定的问题,而FOX用于解决多维空间问题。FOX的细节可以在算法中显示。

2、结果展示
3、MATLAB核心代码
%%FOX
% FOX: A Fox-inspired Optimization Algorithm
% Authors: Hardi M. Mohammed, Tarik A. Rashid.
% FOX is implemented by Hardi M. Mohammed
% Cite as: Mohammed, H., Rashid, T. FOX: a FOX-inspired optimization algorithm. Appl Intell (2022). https://doi.org/10.1007/s10489-022-03533-0
function [Best_score,Best_pos]=FOX(SearchAgents_no,Max_iter,lb,ub,dim,fobj)
Best_pos=zeros(1,dim);
Best_score=inf; %change this to -inf for maximization problems
MinT=inf;
%Initialize the positions of search agents
X=initialization(SearchAgents_no,dim,ub,lb);
Distance_Fox_Rat=zeros(SearchAgents_no,dim);
%Convergence_curve=zeros(1,Max_iter);
l=0;% Loop counter
% both c1 and c2 have different range value
c1=0.18; % range of c1 is [0, 0.18]
c2=0.82; % range of c2 is [0.19, 1]
% Main loop
while l<Max_iter
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,:));
% Update Alpha
if fitness<Best_score
Best_score=fitness; % Update alpha
Best_pos=X(i,:);
end
end
a=2*(1-(l/Max_iter));
Jump=0;
dir=rand;
for i=1:size(X,1)
r=rand;
p=rand;
if r>=0.5
if p>0.18
Time(i,:)=rand(1,dim);
sps=Best_pos/Time(i,:);
Distance_S_Travel(i,:)=sps* Time(i,:);
Distance_Fox_Rat(i,:)=0.5* Distance_S_Travel(i,:);
tt=sum(Time(i,:))/dim;
t=tt/2;
Jump=0.5*9.81* t^2;
X(i,:)=Distance_Fox_Rat(i,:).*Jump * c1;
elseif p<=0.18
Time(i,:)=rand(1,dim);
sps=Best_pos/Time(i,:);
Distance_S_Travel(i,:)=sps* Time(i,:);
Distance_Fox_Rat(i,:)=0.5* Distance_S_Travel(i,:);
tt=sum(Time(i,:))/dim;
t=tt/2;
Jump=0.5*9.81* t^2;
X(i,:)=Distance_Fox_Rat(i,:).*Jump * c2;
end
if MinT>tt
MinT=tt;
end
elseif r<0.5
%random walk
ans(i,:)=Best_pos+randn(1,dim).*(MinT*a);% exploring new positions
X(i,:)=ans(i,:);
end
end
l=l+1;
end
参考文献
[1]Mohammed H, Rashid T. FOX: a FOX-inspired optimization algorithm[J]. Applied Intelligence, 2023, 53(1): 1030-1050.
完整代码获取
后台回复关键词:
TGDM166
点击下方卡片关注,获取更多代码