智能优化算法:蝙蝠算法-附代码
摘要:蝙蝠算法(Bat Algorithm,BA)[1] 是受蝙蝠回声定位捕食行为启发,提出的一种基于迭代优化技术的新型群智能优化算法。该算法自2010年由Yang教授提出以来,因其具有模型简单、收敛速度快、参数少等优点 ,已在工程优化 、模型识别等问题中得到较好的应用,很快得到了国内外学者的广泛关注,成为智能优化算法领域新的研究热点。
1.算法原理
蝙蝠使用回声定位技术检测猎物、避开障碍物以及在黑暗的环境中找到栖息地。其可以发出非常响亮的脉冲并听取从周围物体反弹回来的回声,根据回声到双耳的不同时间与强度判断物体所在的方向和位置;还可以根据目标猎物或者障碍物的特征发出不同性质的
脉冲。
大多数蝙蝠使用恒定频率信号进行回声定位,信号的大小取决于目标猎物。蝙蝠发出的脉冲持续时间很短,一般在8~10 ms之间,其频率通常在25~150 kHz的范围内。正常飞行的过程中,蝙蝠每秒发射10~20个脉冲;而在寻找猎物的过程中,尤其在靠近猎物飞行时,每秒可以发射约200个脉冲。对处在典型频率范围[25 kHz,150 kHz]的脉冲,由公式(1)可知,其对应的波长范围为[2 mm,14 mm],这
个范围正好与蝙蝠寻找的猎物大小范围一致。这将有利于蝙蝠准确捕捉猎物。
λ
=
v
/
f
(1)
λ=v/f \tag{1}
λ=v/f(1)
其中 v v v 为空气中声音的传播速度,取值为340 m/s。
如果以理想化的方式研究蝙蝠的回声定位特征,就可以更方便地模拟蝙蝠算法。在模拟蝙蝠算法的过程中,使用以下近似理想化的规则:
(1)所有蝙蝠都使用回声定位感知距离。
(2)蝙蝠在位置 x i 随机飞行,并具有固定的频率f ,同时根据其与目标猎物的接近程度自动调整波长和脉冲响度来搜索猎物。
(3)脉冲响度变化方式多样,算法假设其从最大值 A o A_o Ao变化到最小的恒定值 A m i n A_{min} Amin ,变化区间视问题而定。
在模拟蝙蝠算法的过程中,假设蝙蝠的搜索空间是D维,每一代中每个蝙蝠的位置
x
i
t
x_i^t
xit 和速度
v
i
t
v_i^t
vit更新规则由公式(2)~(4)给出:
f
i
=
f
m
i
n
+
(
f
m
a
x
−
f
m
i
n
)
∗
β
(2)
f_i=f_{min}+(f_{max}-f_{min})*\beta \tag{2}
fi=fmin+(fmax−fmin)∗β(2)
v i t = v i t − 1 + ( x i t − X ∗ ) f i (3) v_i^t=v_i^{t-1}+(x_i^t-X_*)f_i \tag{3} vit=vit−1+(xit−X∗)fi(3)
x i t = x i t − 1 + v i t (4) x_i^t=x_i^{t-1}+v_i^t\tag{4} xit=xit−1+vit(4)
其中 β ∈ [ 0 , 1 ] β∈ [0,1] β∈[0,1],是一个随机向量, X ∗ X_* X∗ 是群体中当前局部最优解(位置), f i f_i fi 是蝙蝠发出的声波频率,调整区间为 [ f m i n , f m a x ] [f_{min}, f_{max} ] [fmin,fmax] 。在实验过程中,可以根据问题的需要设置相应的频率变化区间。
对于局部搜索,一旦在当前最佳解决方案中选择了一个解决方案,新的局部解使用随机游走方式生成。
x
n
e
w
=
x
o
l
d
+
ε
A
t
(5)
x_new=x_{old}+\varepsilon A^t\tag{5}
xnew=xold+εAt(5)
其中,
ε
∈
[
−
1
,
1
]
ε∈ [−1,1]
ε∈[−1,1],是一个随机数,
A
t
A^t
At 是整个群体在同一代中的平均响度。
蝙蝠在寻找猎物的过程中,会根据距目标猎物的方位不断调整发出声波的响度和频度,以提高捕食效率。在逐渐靠近猎物的过程中,蝙蝠寻找猎物的空间范围也在逐渐减小,因此它会逐渐减小响度到一个定值同时不断增大频度,以便快速、动态地掌握目标猎物的方位。第
i
i
i 只蝙蝠的声波响度
A
i
t
+
1
A_i^{t+1}
Ait+1 和频度
r
i
t
+
1
r_i^{t+1}
rit+1使用公式(6)和(7)更新。
A
i
t
+
1
=
α
A
i
t
(6)
A_i^{t+1}=\alpha A_i^t\tag{6}
Ait+1=αAit(6)
r i t + 1 = r i 0 [ 1 − e x p ( − γ t ) ] (7) r_i^{t+1}=r_i^0[1-exp(-\gamma t)]\tag{7} rit+1=ri0[1−exp(−γt)](7)
其中, α ∈ ( 0 , 1 ) α∈ (0,1) α∈(0,1),是声波响度衰减系数; γ > 0 γ >0 γ>0,是脉冲频度增强系数; r i 0 r_i^0 ri0 表示蝙蝠 i i i 初始脉冲频率。
对于任意的 α α α 和 γ γ γ ,当 t → ∞ t→∞ t→∞ 时,有 A i t → 0 A_i^t →0 Ait→0 , r i t → r i 0 r^t_i →r^0_i rit→ri0 。当 A t i A_t^i Ati 趋于0时,可以认为蝙蝠找到了猎物暂时不发出脉冲,脉冲的变化范围可以根据问题的需要设置不同的数值区间。只有当蝙蝠的位置得到优化后,脉冲的响度和频率才会更新,这暗示着蝙蝠正朝着最佳位置移动。
2.算法流程
步骤1: 参数初始化:蝙蝠种群规模
m
m
m ,迭代次数
N
N
N ,目标函数
f
(
X
)
f(X)
f(X) ,蝙蝠位置
x
i
(
i
=
1
,
2
,
…
,
m
)
x_i (i=1,2,…,m)
xi(i=1,2,…,m) 和速度
v
i
v_i
vi ,声波频率
f
i
f_i
fi ,声波响度
A
i
A_i
Ai 和频度
r
i
r_i
ri 。
步骤2: 找出当前种群中最优蝙蝠位置
X
∗
X_*
X∗ ,并根据公式(2)~(4)更新速度和位置。
步骤3: 生成随机数
r
a
n
d
1
rand_1
rand1 ,
r
a
n
d
1
rand_1
rand1 是[0,1]上的随机数。如果
r
a
n
d
1
>
r
i
rand_1>r_i
rand1>ri ,在最佳蝙蝠中选一个最优个体,再在选择的最优个体附近通过公式(5)生成一个局部解,否则按照公式(4)更新蝙蝠位置。
步骤4: 再生成一个随机数
r
a
n
d
2
rand_2
rand2 ,
r
a
n
d
2
rand_2
rand2 是[0,1]上的随机数。如果
r
a
n
d
2
<
A
i
rand_2<A_i
rand2<Ai ,并且此时目标函数的适应度优于步骤 3 中的新解,则接受该位置,并根据公式(6)、(7)调整
A
i
A_i
Ai (减小)和
r
i
r_i
ri (增大)。
步骤5: 对该种群中所有个体的适应度值进行排序,并找到当前最佳
X
∗
X_*
X∗ 。
步骤6: 重复步骤(2)~(5)。判断是否满足最大迭代次数,然后输出全局最优值。
3.算法结果
4.参考文献
[1] Yang X S.A new metaheuristic bat-inspired algorithm[J].Computer Knowledge & Technology,2010,284:65-74.
[2]许德刚,赵萍.蝙蝠算法研究及应用综述[J].计算机工程与应用,2019,55(15):1-12+31.
[3]马祥丽,张惠珍,马良.蝙蝠算法在物流配送车辆路径优化问题中的应用[J].数学的实践与认识,2015,45(24):80-86.
5.MATLAB代码
蝙蝠优化算法
算法相关应用
名称 | 说明或者参考文献 |
---|---|
蝙蝠优化的BP神经网络(预测) | https://blog.csdn.net/u011835903/article/details/112149776(原理一样,只是优化算法是蝙蝠算法) |
蝙蝠优化的BP神经网络(分类) | https://blog.csdn.net/u011835903/article/details/112149394(原理一样,只是优化算法是蝙蝠算法) |
6.python代码
个人资料介绍