JermaineOl 发表于 2023-3-21 08:13

狐狸优化算法(Matlab代码实现)


‍ 个人主页:研学社的博客

   欢迎来到本博客❤️❤️


博主优势:   博客内容尽量做到思维缜密,逻辑清晰,为了方便读者<br/> ⛳️座右铭:行百里者,半于九十。 1 概述

本文提出了一种新的受自然启发的优化算法,称为狐狸优化器(Fox),该算法模拟了狐狸在自然界中捕食猎物时的觅食行为。该算法基于测量狐狸与其猎物之间的距离以执行有效跳跃的技术。在给出FOX的数学模型和算法之后,使用五个经典基准函数和CEC2019基准测试函数来评估其性能。FOX算法还与蜻蜓优化算法(DA)、粒子群优化(PSO)、适应度相关优化(FDO)、灰狼优化(GWO)、鲸鱼优化算法(WOA)、黑猩猩优化算法(ChOA)、蝴蝶优化算法(BOA)和遗传算法(GA)进行了比较
结果表明,FOX优于上述算法。随后,使用Wilcoxon秩和检验来确保FOX在统计显著性方面优于比较算法。此外,还进行了参数敏感性分析,以显示FOX中不同的探索和开发行为。本文还使用FOX来解决工程问题,例如压力容器设计,并且还用于解决发电:经济负荷分配问题。FOX在针对GWO、PSO、WOA和FDO优化问题方面取得了更好的结果。
详细文章讲解见第4部分。






部分代码:
function =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
c2=0.82;% range of c2 is
% 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
3 参考文献

部分理论来源于网络,如有侵权请联系删除。



4 Matlab代码及文章讲解

页: [1]
查看完整版本: 狐狸优化算法(Matlab代码实现)