蝙蝠算法
1. 简介
蝙蝠算法(Bat Algorithm,BA)是Yang受自然界蝙蝠回声定位的方式进行搜索、捕食行为的启发,于2010年提出的一种新型的群智能仿生优化算法。BA算法具有结构简单、参数较少、搜索能力较强、稳定性较强、便于实现等优点,在函数优化、调度问题、模式识别、图像处理、故障诊断等等方面表现出极大的优势。BA算法目前主要在连续域函数优化问题上进行求解,较少的地方用来求解组合优化问题,例如背包问题、TSP问题求解、可靠性冗余分配问题等等。蝙蝠回声定位原理为:蝙蝠以脉冲的形式以一定的发射率进行发射一定量的频率和音量的超声波,当超声波在传播过程中遇到三维空间中的物体之后就会以回声的形式返回,通过对自身回声的接收和处理,蝙蝠不仅能够探测到运动物体与自身的距离和飞行方向,还可以判断其运动速率、大小、形态以及结构,从而避开障碍物。
2. 数学原理以及算法步骤
蝙蝠算法有两种不同的形式,一种是用于连续型计算的算法,一种是基于连续型计算方法而提出的一种离散型的BA算法。这两种算法具有很大的不同点,下面就这两种不同的算法进行学习。
2.1 连续情况下的BA算法
蝙蝠是通过其发出超声波的频率、速度来确定物体的位置信息。所以,为了便于模拟蝙蝠的回声定位行为。Yang给出了两个理想化的规则:
- 搜索规则:蝙蝠随机飞行,同时以固定的频率、可变的波长和音量来搜索猎物;
- 参数变化规则:蝙蝠会根据自身与猎物的距离来自动调整脉冲波长和脉冲发射率,并限定音量在指定范围内依照给定方式由大到小而发生变化。
在以上的假设的基础上,BA算法的步骤如下所示:
步骤一:初始化相关参数,包括蝙蝠的种群数量
n
n
n、蝙蝠种群的位置和速度。
步骤二:根据目标函数和初始位置计算适应度值,从而得出初始解;
步骤三:对于每只蝙蝠
k
k
k,根据下列公式更新脉冲频率、速度和位置信息,从而产生后代个体:
{
f
k
=
f
min
+
(
f
m
a
x
−
f
m
i
n
)
⋅
β
v
k
t
+
1
=
v
k
t
+
(
x
k
t
−
x
∗
)
⋅
f
k
x
k
t
+
1
=
x
k
t
+
v
k
t
\begin{cases} f_{k}=f_{\min}+(f_{max}-f_{min})\cdot{\beta}\\ v_{k}^{t+1}=v_{k}^{t}+(x_{k}^{t}-x^{*})\cdot{f_{k}}\\ x_{k}^{t+1}=x_{k}^{t}+v_{k}^{t}\\ \end{cases}
⎩⎪⎨⎪⎧fk=fmin+(fmax−fmin)⋅βvkt+1=vkt+(xkt−x∗)⋅fkxkt+1=xkt+vkt
其中,
f
k
f_{k}
fk表示第
k
k
k只蝙蝠的脉冲频率信息,
f
max
f_{\max}
fmax和
f
min
f_{\min}
fmin分别表示脉冲频率的最大值和最小值,
β
∈
[
0
,
1
]
\beta\in{[0,1]}
β∈[0,1]是均匀分布的随机数,
x
k
t
,
v
k
t
x_{k}^{t},v_{k}^{t}
xkt,vkt表示第
t
t
t个迭代过程中蝙蝠
k
k
k所在的位置和速度,
x
∗
x^{*}
x∗表示当前全局的最优解。
步骤四:生成随机数
rand1
\text{rand1}
rand1,如若
rand1
>
r
k
t
\text{rand1}>r_{k}^{t}
rand1>rkt,则在当前最优解附近进行邻域位置的搜索,搜索方式如下公式所确定:
x
new
=
x
old
+
ϵ
⋅
A
t
x_{\text{new}}=x_{\text{old}}+\epsilon\cdot{A^{t}}
xnew=xold+ϵ⋅At
其中,
r
k
t
r_{k}^{t}
rkt表示第
t
t
t代蝙蝠
k
k
k的脉冲发射率,
x
new
x_{\text{new}}
xnew表示随机扰动得到的新解,
x
old
x_{\text{old}}
xold即
x
∗
x^{*}
x∗,
A
t
A^{t}
At表示第
t
t
t迭代中所有蝙蝠群体音量的平均值,
ϵ
\epsilon
ϵ表示均匀分布的随机数
ϵ
∈
[
−
1
,
1
]
\epsilon\in{[-1,1]}
ϵ∈[−1,1]。
步骤五:生成随机数
rand2
\text{rand2}
rand2,如若
rand2
<
A
k
t
\text{rand2}<A_{k}^{t}
rand2<Akt并且
x
new
x_{\text{new}}
xnew的适应度优于
x
old
x_{\text{old}}
xold,则接受
x
n
e
w
x_{new}
xnew并且更新
r
k
t
r_{k}^{t}
rkt和
A
k
t
A_{k}^{t}
Akt,更新的公式如下所示:
{
A
k
t
+
1
=
α
⋅
A
k
t
r
k
t
+
1
=
r
k
0
(
1
−
e
−
γ
t
)
\begin{cases} A_{k}^{t+1}=\alpha\cdot{A_{k}^{t}}\\ r_{k}^{t+1}=r_{k}^{0}(1-e^{-\gamma t})\\ \end{cases}
{Akt+1=α⋅Aktrkt+1=rk0(1−e−γt)
其中,
0
<
α
<
1
,
γ
>
0
0<\alpha<1,\gamma>0
0<α<1,γ>0,
α
,
γ
\alpha,\gamma
α,γ均为常量;
步骤六:计算出当前所有蝙蝠的适应度并找出当前最优解;
步骤七:重复步骤三至步骤六,直到达到循环条件,退出算法。
2.2 离散型BA算法
BA算法在离散化的领域内的应用比较少,为拓宽BA算法的应用领域,便将连续化的蝙蝠算法经过改进,应用到了离散型的蝙蝠算法。下面来介绍TSP求解问题中的蝙蝠算法。
4. 具体应用
4.1 简单的例子
4.2 TSP问题中的求解
4.3 背包问题的求解
5. 参数选择的原则
小结
参考文献
[1] 一种求解TSP问题的离散蝙蝠算法
[2] 蝙蝠算法及其在CVRPTW-SDP问题中的应用
[3] 旅行商问题的混沌混合离散蝙蝠算法