蜜獾算法(HBA)原理分析(含源代码)

目录

简介:

论文下载链接:

算法主要流程: 

1.初始化阶段

 2.定义密度因子

3.更新密度因子

4.从局部最优逃离

5.更新代理位置

5.1挖掘阶段

5.2吸引阶段

源码分析:

种群初始化代码:

算法操作代码:

目标函数: 

算法测试:

算法总结


 


简介:

蜜獾是一种皮毛黑白相间的哺乳动物,常生活在非洲、亚洲西南部和印度次大陆的半沙漠和雨林中,以其无畏的天性而闻名。

近年来,数值优化领域吸引了研究界提出和发展各种元启发式优化算法。本文提出了一种新的元启发式优化算法——蜜獾算法(HBA)。该算法受蜜獾智能觅食行为的启发,在数学上发展了一种求解优化问题的有效搜索策略。在HBA中,蜂蜜獾的动态搜索行为通过挖掘和蜂蜜发现方法被描述为勘探和开发阶段。此外,使用受控随机化技术,即使在搜索过程接近尾声时,HBA仍能保持充足的种群多样性。为了评估HBA的效率,解决了24个标准基准功能、CEC的17个测试套件和四个工程设计问题。使用HBA获得的解已与十种著名的元启发式算法进行了比较,包括模拟退火(SA)、粒子群优化(PSO)、协方差矩阵自适应进化策略(CMA-ES)、基于成功历史的线性种群规模缩减自适应差分进化变体(L-SHADE),飞蛾火焰优化(MFO)、大象放牧优化(EHO)、鲸鱼优化算法(WOA)、蚱蜢优化算法(GOA)、热交换优化(TEO)和哈里斯霍克斯优化(HHO)。实验结果以及统计分析表明,与本研究中使用的其他方法相比,HBA在解决具有复杂搜索空间的优化问题时是有效的,并且在收敛速度和探索-开发平衡方面具有优势。

通常来讲,一只蜜獾可以使用嗅觉持续定位它的猎物。蜜獾喜欢蜂蜜,但它不善于定位蜂巢。不过有意思的是,蜂蜜向导(一种鸟)可以找到蜂巢,但不能得到蜂蜜。这些现象即使两者形成了合作关系:向导鸟将蜜獾带到蜂巢,后者利用前爪打开蜂巢,然后两者都享受团队合作的回报。

因此为了找到蜂巢,蜜獾要么狂嗅+狂挖,要么跟着向导鸟。文中称第一种情况为挖掘模式,而第二种情况为蜂蜜模式。在挖掘模式中,蜜獾利用自己的嗅觉能力来定位蜂巢,当接近蜂巢时,它会选择合适的地点进行挖掘;在蜂蜜模式中,蜜獾直接利用向导鸟定位蜂巢。

论文下载链接:

HoneyBadgerAlgorithm蜜獾算法原始论文PDF-机器学习文档类资源-CSDN下载

算法主要流程: 

1.初始化阶段

初始化蜜獾的数量(种群大小N)及其各自的位置

 2.定义密度因子

强度和猎物的集中力和它和猎物之间的距离有关我是蜜獾。Ii是猎物的气味强度;如果气味很高,运动会很快,反之亦然由平方反比定律给出.

 

3.更新密度因子

密度因子(α)控制时变随机化,以确保平滑从勘探到开发的过渡。更新随迭代次数减少的递减因子α,以减少使用公式(3)随时间随机化:

 

4.从局部最优逃离

这一步和接下来的两步用于逃避局部最优解区域。在这种情况下,所提出的算法使用一个标志F来改变搜索方向,以利用较高的搜索效率代理严格扫描搜索空间的机会.

 

5.更新代理位置

5.1挖掘阶段

5.2吸引阶段

 

源码分析:

蜜獾算法主要包括种群初始化、适应度评估、种群更新、蜂蜜吸引度计算、更新密度因子等步骤。

种群初始化代码:

function [X]=initialization(N,dim,up,down)
if size(up,2)==1
    X=rand(N,dim).*(up-down)+down;
end
if size(up,2)>1
    for i=1:dim
        high=up(i);low=down(i);
        X(:,i)=rand(N,1).*(high-low)+low;
    end
end
end

算法操作代码:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Honey Badger Algorithm source code 
%  paper:
%     Hashim, Fatma A., Essam H. Houssein, Kashif Hussain, Mai S. %     Mabrouk, Walid Al-Atabany. 
%     "Honey Badger Algorithm: New Metaheuristic Algorithm for %  %     Solving Optimization Problems." 
%     Mathematics and Computers in Simulation, 2021.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
function [Xprey, Food_Score,CNVG] = HBA(objfunc, dim,lb,ub,tmax,N)
beta       = 6;     % the ability of HB to get the food  Eq.(4)
C       = 2;     %constant in Eq. (3)
vec_flag=[1,-1];
%initialization
X=initialization(N,dim,ub,lb);
%Evaluation
fitness = fun_calcobjfunc(objfunc, X);
[GYbest, gbest] = min(fitness);
Xprey = X(gbest,:);
for t = 1:tmax
    alpha=C*exp(-t/tmax);   %density factor in Eq. (3)
    I=Intensity(N,Xprey,X); %intensity in Eq. (2)
    for i=1:N
        r =rand();
        F=vec_flag(floor(2*rand()+1));
        for j=1:1:dim
            di=((Xprey(j)-X(i,j)));
            if r<.5
                r3=rand;                r4=rand;                r5=rand;
                
                Xnew(i,j)=Xprey(j) +F*beta*I(i)* Xprey(j)+F*r3*alpha*(di)*abs(cos(2*pi*r4)*(1-cos(2*pi*r5)));
            else
                r7=rand;
                Xnew(i,j)=Xprey(j)+F*r7*alpha*di;
            end
        end
        FU=Xnew(i,:)>ub;FL=Xnew(i,:)<lb;Xnew(i,:)=(Xnew(i,:).*(~(FU+FL)))+ub.*FU+lb.*FL;
        
        tempFitness = fun_calcobjfunc(objfunc, Xnew(i,:));
        if tempFitness<fitness(i)
            fitness(i)=tempFitness;
            X(i,:)= Xnew(i,:);
        end
    end

end
...
end

目标函数: 

function Y = fun_calcobjfunc(func, X)
N = size(X,1);
for i = 1:N
    Y(i) = func(X(i,:));
end
end
function I=Intensity(N,Xprey,X)
for i=1:N-1
    di(i) =( norm((X(i,:)-Xprey+eps))).^2;
    S(i)=( norm((X(i,:)-X(i+1,:)+eps))).^2;
end
di(N)=( norm((X(N,:)-Xprey+eps))).^2;
S(N)=( norm((X(N,:)-X(1,:)+eps))).^2;
for i=1:N
    r2=rand;
    I(i)=r2*S(i)/(4*pi*di(i));
end
end

算法测试:

The best location= 8.7878e-145 -7.5945e-149 -5.1457e-145 -1.2854e-145 -1.9505e-146 -4.7359e-147 1.7092e-144 -3.8037e-145 -2.195e-145 -1.809e-146 8.3212e-145 -1.339e-145 -3.7686e-145 1.8082e-145 -2.389e-146 3.5925e-146 -7.7913e-145 -2.7082e-145 2.0061e-145 8.9784e-146 -6.0477e-145 -3.403e-145 -4.933e-146 -3.4153e-145 -1.4537e-144 1.0279e-145 3.1436e-145 6.0489e-146 -4.4064e-146 9.6791e-146
The best fitness score = 1.1571e-286
>> 

 

算法总结

HBA算法设计简单,思路清晰。算法通过蜂蜜吸引度确保具有较好的局部搜索能力,通过引导种群中的个体不断向最优个体趋近,此外由于设置了密度因子,保证了算法的全局搜索能力。通过测试,可以看出算法在求解大多数测试函数中,具有较好的性能,目前该算法也得到了诸多学者的研究,被应用于了诸多领域,

如果需要原论文或者源代码,或者对算法改进有什么想法,欢迎与我私信交流~


作者简介:国内顶尖高校控制专业毕业,专注于智能优化算法及其应用,运筹优化调度,各类求解器求解,人工智能机器学习、深度学习算法及应用等方向的研究,擅长各类算法的改进、各类数学模型的建模求解,熟悉各类求解器的使用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

智能优化_数据分析_AI算法

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值