💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥
🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳ 座右铭:行百里者,半于九十。
📋 📋 📋 本文目录如下: 🎁 🎁 🎁
目录
💥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 参考文献
部分理论来源于网络,如有侵权请联系删除。