找回密码
 立即注册
查看: 305|回复: 0

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

[复制链接]
发表于 2023-3-21 08:13 | 显示全部楼层 |阅读模式

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

     欢迎来到本博客❤️❤️  


  博主优势:   
博客内容尽量做到思维缜密,逻辑清晰,为了方便读者<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 [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代码及文章讲解

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-21 23:24 , Processed in 0.143892 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表