2023年狐狸优化算法,原理详解,MATLAB代码免费获取

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

ab82cb567deb8440abc84e9cc3086df0.png

该成果于2023年发表在计算机领域二区期刊Applied Intelligence上,目前在谷歌学术上被引率54次。

3d4d5b3964da6d480eecc449b89eaaab.png

一开始,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

c6991922999b52ce2f3b0e9d58b3c892.png

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

fab45b98fa8bff4708e0eb06619aae86.png

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

95c521e44fa774a7d5192a909e04a6e3.png

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

18a39ba5aed0f156e731275b99088bf6.png

在找到狐狸和猎物之间的距离后,狐狸需要找到一个新的位置,这样狐狸就需要跳起来抓住猎物。因此,狐狸需要计算跳跃的高度, 。因此,可以通过以下公式计算出 :

其中9.81是重力加速度,t等于声音传播的平均时间,由于跳跃中的上下台阶,它被平方了。时间过渡tt值的计算方法是将时间过渡Time_S_Tit的总和除以维度。以下等式示出了tt和MinT计算。然后平均时间t通过将tt除以2得到。平均时间和重力乘以0.5,因为跳跃值需要两个不同的时间上升和下降。因此,重力和平均时间都必须乘以0.5。

下面的等式显示了如果p大于0.18,则狐狸的新位置的计算。

9fb5db4f549b95d1e159d19bb9af12dd.png

因为使用了p条件,所以每次迭代中只执行其中一个。

(2)探索

为了控制随机行走,狐狸在这个阶段根据迄今为止找到的狐狸的最佳位置随机搜索。狐狸在这个阶段没有跳跃技术,因为它必须随机行走以探索搜索区域的猎物。为了确保狐狸随机地走向最佳位置,使用最小时间变量和变量a来控制搜索。方程展示了对MinT变量的计算

将问题的最小时间平均值除以问题的维数,得到最小时间平均值tt。

其中,是最大迭代次数。同时计算最小值和变量对搜索阶段有着至关重要的影响,以接近最佳解。使用 确保狐狸在探索猎物时不着痕迹地行走。

在此阶段的方程可以适应现有的算法,以提高其性能。它们也可以用来提出新的元启发式算法。

两个阶段中的方程不需要任何修改,而是适应于特定的问题,而FOX用于解决多维空间问题。FOX的细节可以在算法中显示。

f243e3fd16de552924070d23b32d04b7.png

2、结果展示

2b20541876b401cd9ff5e19b6920a993.png

9f030749e39e0b71e297f2f6629f2a88.png

9807dd034f8df582038a831cdf902c4e.png

3、MATLAB核心代码

%% 淘个代码 %%
% 微信公众号搜索:淘个代码,获取更多代码
% 狐狸优化算法(FOX)
%%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

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天吃饺子

不想刀我的可以选择爱我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值