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

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码及文章讲解


💥1 概述

本文提出了一种新的受自然启发的优化算法,称为狐狸优化器(Fox),该算法模拟了狐狸在自然界中捕食猎物时的觅食行为。该算法基于测量狐狸与其猎物之间的距离以执行有效跳跃的技术。在给出FOX的数学模型和算法之后,使用五个经典基准函数和CEC2019基准测试函数来评估其性能。FOX算法还与蜻蜓优化算法(DA)、粒子群优化(PSO)、适应度相关优化(FDO)、灰狼优化(GWO)、鲸鱼优化算法(WOA)、黑猩猩优化算法(ChOA)、蝴蝶优化算法(BOA)和遗传算法(GA)进行了比较

结果表明,FOX优于上述算法。随后,使用Wilcoxon秩和检验来确保FOX在统计显著性方面优于比较算法。此外,还进行了参数敏感性分析,以显示FOX中不同的探索和开发行为。本文还使用FOX来解决工程问题,例如压力容器设计,并且还用于解决发电:经济负荷分配问题。FOX在针对GWO、PSO、WOA和FDO优化问题方面取得了更好的结果。

详细文章讲解见第4部分。

📚2 运行结果

  

部分代码:

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

🎉3 参考文献

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

🌈4 Matlab代码及文章讲解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值