往期内容:
智能优化算法(一):海鸥算法原理及Matlab代码
智能优化算法(二):海鸥算法之改进篇
智能优化算法(三):基于量子的鸽群优化算法
智能优化算法(四):基于Powell优化的鸽群优化算法
一、前言
天牛须算法 (Beetle Antennae search algorithm, BAS) 是由Jiang等于2017年提出的一种智能优化算法,与其他仿生类算法不同,天牛须算法是一种单体搜索算法,具有原理简单、参数少、计算量少等优点,在处理低维优化目标时具有非常大的优势,例如:时间复杂度低、搜索能力较强,用李佳琪的话就是:“Oh,My God!用它,用它,用它”。
原文链接:https://download.csdn.net/download/qq_38643813/13150658不要积分,免费下载!
二、算法简介
天牛须搜索算法模仿自然界中天牛觅食行为。在天牛觅食过程中,食物会产生特殊气味,吸引天牛向着食物前进。天牛通过其两只触角对空气中的食物气味进行感知,且根据食物距离两只触角的距离远近不同,两只触角所感知的气味浓度也有所差异。当食物处于天牛左侧时,左侧触角感知的气味浓度强于右侧触角感知的气味浓度,天牛根据两只触角所感知的浓度差,向着浓度强的一侧随机前进。通过一次次迭代,最终找到食物的位置。
三、算法原理
3.1 算法模型
BAS算法主要是通过在不停的左右触角气味浓度比对中前进,同其他算法相比,原理十分简单。
在进行两只触角气味浓度计算之前,需要对其进行一系列准备工作,在
D
D
D维空间中天牛的位置为
X
=
(
x
1
,
x
2
,
.
.
.
,
x
n
)
X=(x_1,x_2,... ,x_n)
X=(x1,x2,...,xn),天牛左右两只触角的位置被定义为如下公式所示模型:
{
X
r
=
X
+
l
∗
d
⃗
X
l
=
X
−
l
∗
d
⃗
\left\{ \begin{array}{l} {X_r} = X + l * \vec d\\ {X_l} = X - l * \vec d \end{array} \right.
{Xr=X+l∗dXl=X−l∗d上式中,
l
l
l表示天牛质心与触须的距离;
d
⃗
\vec d
d表示随即单位向量,需对其进行归一化操作:
d
⃗
=
r
a
n
d
s
(
D
,
1
)
∥
r
a
n
d
s
(
D
,
1
)
∥
2
\vec d = \frac{{rands(D,1)}}{{{{\left\| {rands(D,1)} \right\|}_2}}}
d=∥rands(D,1)∥2rands(D,1)根据左右两根触角感知的气味浓度差进行对比,判断天牛下一步的位置:
X
t
+
1
=
X
t
+
δ
t
∗
d
⃗
∗
s
i
g
n
[
f
(
X
r
)
−
f
(
X
l
)
]
{X_{t + 1}} = {X_t} + {\delta _t} * \vec d * sign\left[ {f\left( {{X_r}} \right) - f\left( {{X_l}} \right)} \right]
Xt+1=Xt+δt∗d∗sign[f(Xr)−f(Xl)]式中,
t
t
t表示当前的迭代次数;
f
(
.
)
f(.)
f(.)表示适应度函数;
δ
t
\delta _t
δt表示第
t
t
t次迭代时的探索步长,
s
i
g
n
(
.
)
sign(.)
sign(.)函数为符号函数,各个变量的具体定义为:
δ
t
+
1
=
δ
t
∗
e
t
a
{\delta _{t + 1}} = {\delta _t} * eta
δt+1=δt∗eta
到这里,天牛须算法的原理基本就介绍完毕了,是不是非常简单?需要注意的是,在处理不同的优化目标时公式3的
+
+
+不是固定的,根据优化的目标为最大值或者最小值,适当对其进行改变。
3.2 算法流程
输入:种群数量、解空间维度、最大迭代次数、初始步长;
输出:极值点g_best;
Step1:初始化步长衰减因子、狩猎空间,位置信息X
Step2:根据公式(2)进行归一化处理;
Step3:根据公式(1)确定天牛的左须与右须位置;
Step4:根据公式(3)更新天牛的位置
Step5 :计算天牛位置的适应度函数值并存储,更新步长;
Step6 :判断是否达到迭代终止条件,若是则输出全局最优解,否则跳转至Step2。
总结
到目前为止,天牛须算法的应用已经比较广泛了。目前,在路径规划、图像处理、PID参数整定、组合优化、任务分配等方面已经开始被使用。
但是,BAS算法也存在一些缺点,收敛速度慢、在处理多维复杂问题时,往往会出现搜索失败的情况!换句话说,在多维问题(4维以上),BAS算法不具备良好的优化能力!
那是否就不能将BAS算法用于多维复杂问题的处理呢?当然可以!下一期,我们来详细谈一下,如何对BAS算法进行改进,解决其在多维复杂问题处理时表现出的缺陷。
Matlab代码链接:https://mianbaoduo.com/o/bread/YZWUkppr