蜜獾优化算法(Honey Badger Algorithm,HBA)是一种受自然启发的群智能优化算法,其灵感来源于蜜獾(Honey Badger)这种动物的生存策略。蜜獾是一种生活在非洲和亚洲的小型哺乳动物,以其顽强和适应力强而著称。蜜獾优化算法模仿了蜜獾在寻找食物和避开危险时的行为,通过模拟蜜獾的觅食策略来解决优化问题。该算法具有进化能力强、搜索速度快、寻优能力强的特点。该成果于2021年发表在知名SCI期刊JCR2区Mathematics and Computers in Simulation上,目前在谷歌学术上被引率高达610次,在工程优化、机器学习、数据挖掘等有着极为广泛的应用。
蜜獾优化算法的基本原理是将问题空间中的解看作食物的位置,将优化的目标看作食物的质量。算法通过模拟蜜獾在寻找食物时的探索和利用策略,不断调整解的位置以寻找最优解。与其他优化算法相比,蜜獾优化算法具有较强的全局搜索能力和快速收敛性,在解决复杂优化问题时表现出色。

1、算法原理
介绍HBA卡算法的数学表达式。从理论上讲,HBA具有勘探和开发两个阶段,因此可以称为全局优化算法。从数学上讲,建议的HBA的步骤详细如下。这里,HBA中候选解决方案的总体表示为:
其中,蜜獾的第i个位置如下
(1)初始化
根据下式初始化蜜獾的数量(种群大小N)和它们各自的位置:
r1是0到1之间的随机数,其中Xi是指N个种群中的候选解的第i个蜜獾位置,而lbi和ubi分别是搜索域的下限和上限。
(2)定义强度
强度与猎物的集中强度和猎物与蜜獾的距离有关。Ii是猎物的气味强度;如果气味高,运动将很快,反之亦然,由下式定义:
r2是0到1之间的随机数。
其中S是源强度或浓度强度,其中di表示猎物与第i只獾之间的距离。
(3)更新密度因子
密度因子(α)控制随时间变化的随机化,以确保从勘探到开采的平稳过渡。使用下式更新随迭代而减小的递减因子α,以减少随时间的随机化:
其中C为≥1的常数(默认为2)。
(4)逃离局部最优
这一步和接下来的两个步骤用于逃离局部最优区域。在这种情况下,所提出的算法使用一个改变搜索方向的标志F,为智能体提供严格扫描搜索空间的高机会。
(5)更新代理的位置
如前所述,HBA位置更新过程(xnew)分为“挖掘阶段”和“蜂蜜阶段”两部分。下面给出了更好的解释:
在挖掘阶段,蜜獾的动作类似于心形,如下图所示。

心形运动可由下式模拟:
xprey是猎物的位置,也就是目前找到的最佳位置,也就是全局最佳位置。β≥1(默认= 6)是蜜獾获取食物的能力。di为猎物与第i只蜜獾之间的距离,F作为改变搜索方向的标志,由下式确定:
在挖掘阶段,蜜獾主要依赖于猎物的气味强度I、与猎物的距离di和时变搜索影响因子α。此外,在挖掘活动中,獾可能会受到任何干扰,这使得它能够找到更好的猎物位置。
在蜂蜜阶段,当蜜獾跟随导蜜鸟到达蜂巢时的情况可以模拟为下式:
其中r7是0到1之间的随机数。
其中xnew为蜜獾的新位置,xprey为猎物位置,蜜獾根据距离信息di,在目前发现的猎物位置xprey附近进行搜索。在这个阶段,搜索受到随时间变化的搜索行为(α)的影响。此外,蜜獾可能会发现干扰F。
HBA算法的伪代码如下:

2、结果展示
3、MATLAB核心代码
%微信公众号搜索:淘个代码,获取更多免费代码
%禁止倒卖转售,违者必究!!!!!
%唯一官方店铺:https://mbd.pub/o/author-amqYmHBs/work
% 蜜獾优化算法(HBA)
function [ Food_Score,Xprey,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
FU=X>ub;FL=X<lb;X=(X.*(~(FU+FL)))+ub.*FU+lb.*FL;
[Ybest,index] = min(fitness);
CNVG(t)=min(Ybest);
if Ybest<GYbest
GYbest=Ybest;
Xprey = X(index,:);
end
end
Food_Score = GYbest;
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
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
参考文献
[1]Hashim F A, Houssein E H, Hussain K, et al. Honey Badger Algorithm: New metaheuristic algorithm for solving optimization problems[J]. Mathematics and Computers in Simulation, 2022, 192: 84-110.
完整代码获取方式:后台回复关键字:
TGDM877