一、理论基础
1、基本布谷鸟算法
请参考这里。
2、改进的布谷鸟算法(DWCS)
(1)非线性惯性权重对数递减策略
动态变化惯性权重主要有以下几类。以下公式中,
t
t
t为当前迭代次数,
M
a
x
N
u
m
b
e
r
MaxNumber
MaxNumber为最大迭代数,
α
max
\alpha_{\max}
αmax和
α
min
\alpha_{\min}
αmin为
α
\alpha
α的初值和终值。
(1)线性递减的惯性权重
递减策略如下:
α
(
t
)
=
α
min
+
(
α
max
−
α
min
)
M
a
x
N
u
m
b
e
r
−
t
M
a
x
N
u
m
b
e
r
(1)
\alpha(t)=\alpha_{\min}+(\alpha_{\max}-\alpha_{\min})\frac{MaxNumber-t}{MaxNumber}\tag{1}
α(t)=αmin+(αmax−αmin)MaxNumberMaxNumber−t(1)
(2)指数递减的惯性权重
惯性权重的表达式如下:
α
(
t
)
=
α
min
(
α
max
α
min
)
1
−
t
/
M
a
x
N
u
m
b
e
r
(2)
\alpha(t)=\alpha_{\min}\left(\frac{\alpha_{\max}}{\alpha_{\min}}\right)^{1-t/MaxNumber}\tag{2}
α(t)=αmin(αminαmax)1−t/MaxNumber(2)
(3)高斯递减的惯性权重
惯性权重的表达式如下:
α
(
t
)
=
α
min
+
(
α
max
−
α
min
)
exp
[
−
t
2
(
k
×
M
a
x
N
u
m
b
e
r
)
2
]
(3)
\alpha(t)=\alpha_{\min}+(\alpha_{\max}-\alpha_{\min})\exp\left[-\frac{t^2}{(k×MaxNumber)^2}\right]\tag{3}
α(t)=αmin+(αmax−αmin)exp[−(k×MaxNumber)2t2](3)其中,
k
k
k为常数,改变
k
k
k值就是调整曲线的扩展常数,从而改变曲线的变化率。
(4)对数递减的惯性权重
惯性权重的表达式如下:
α
(
t
)
=
α
max
−
η
×
(
α
max
−
α
min
)
×
log
M
a
x
N
u
m
b
e
r
t
(4)
\alpha(t)=\alpha_{\max}-\eta×(\alpha_{\max}-\alpha_{\min})×\log_{MaxNumber}^t\tag{4}
α(t)=αmax−η×(αmax−αmin)×logMaxNumbert(4)其中,
η
\eta
η为对数调整系数。
图1给出
t
=
1
:
100
t=1:100
t=1:100,
M
a
x
N
u
m
b
e
r
=
100
MaxNumber=100
MaxNumber=100,
α
min
=
0.4
\alpha_{\min}=0.4
αmin=0.4,
α
m
a
x
=
0.9
\alpha_{max}=0.9
αmax=0.9,
η
=
1
\eta=1
η=1时线性、指数、高斯、对数递减策略的迭代次数和惯性权重的关系曲线图。从图1可以看出,在迭代前期,对数递减的惯性权重曲线比线性、指数、高斯递减的惯性权重曲线下降得更快,有利于全局探索、快速找到最优解的大致范围;在迭代后期,对数递减的惯性权重曲线相比另外3种惯性权重策略的曲线更平缓,有利于局部精细搜索,从而找到全局最优解。
为了提高CS算法的性能,在布谷鸟寻窝的路径和位置更新公式中引入惯性权重: X i t + 1 = w ( t ) X i t + α ⊕ L e v y ( λ ) , i = 1 , 2 , ⋯ , n (5) X_i^{t+1}=w(t)X_i^t+\alpha\oplus Levy(\lambda),i=1,2,\cdots,n\tag{5} Xit+1=w(t)Xit+α⊕Levy(λ),i=1,2,⋯,n(5)惯性权重的加入可以有效平衡全局探索和局部搜索之间的关系,使算法在前期有较强的全局探索能力,在后期有较强的局部开发能力,以加快算法的收敛速度和寻优精度。基于以上分析,本文提出了一种非线性惯性权重对数递减的策略,即: w ( t ) = r max − β × ( r max − r min ) × l o g M a x N u m b e r t − φ × b e t a r n d ( ) (6) w(t)=r_{\max}-\beta×(r_{\max}-r_{\min})×log_{MaxNumber}^t-\varphi×betarnd()\tag{6} w(t)=rmax−β×(rmax−rmin)×logMaxNumbert−φ×betarnd()(6)其中, t t t为当前迭代次数; M a x N u m b e r MaxNumber MaxNumber为最大迭代次数; r min r_{\min} rmin是惯性权重的最小值, r max r_{\max} rmax是惯性权重的最大值; β \beta β为对数偏离系数, 0 < β < 1 0<\beta<1 0<β<1时称为对数压缩系数, β > 1 \beta>1 β>1时称为对数膨胀系数; φ \varphi φ为惯性调整系数; b e t a r n d ( ) betarnd() betarnd()是服从贝塔分布产生的 ( 0 , 1 ) (0,1) (0,1)之间非对称分布的随机数。综上所述,非线性惯性权重对数递减惯性策略不仅可以使布谷鸟算法在前期拥有较强的全局探索能力,在后期拥有较强的局部开发能力,而且能在一定程度上避免算法陷入局部最优。
(2)随机调整的发现概率策略
为了克服 p a pa pa取固定值带来的弊端,本文采用随机调整的发现概率 r − p a r^-pa r−pa来取代固定值的发现概率 p a pa pa,使较大和较小的发现概率 r − p a r^-pa r−pa随机出现,从而有利于平衡算法的全局探索和局部开发能力,加快算法的收敛速度,增加种群多样性。 r − p a r^-pa r−pa的具体表达式如下: r − p a = p a min + ( p a max − p a min ) × r a n d ( ) − λ × τ ( 1 , 2 ) (7) r^-pa=pa_{\min}+(pa_{\max}-pa_{\min})×rand()-\lambda×\tau(1,2)\tag{7} r−pa=pamin+(pamax−pamin)×rand()−λ×τ(1,2)(7)其中, r − p a ∈ [ 0.15 , 0.55 ] r^-pa\in[0.15,0.55] r−pa∈[0.15,0.55], p a min pa_{\min} pamin和 p a max pa_{\max} pamax分别为 p a pa pa的最小值和最大值, r a n d ( ) rand() rand()是 ( 0 , 1 ) (0,1) (0,1)间的随机数, τ ( 1 , 2 ) \tau(1,2) τ(1,2)是服从形状参数为1、尺度参数为2的伽马分布随机数, λ \lambda λ用于控制惯性权重与期望值之间的偏差程度。
(3)DWCS算法的流程
通过在位置更新公式中引入非线性对数递减的惯性权重,
D
W
C
S
DWCS
DWCS算法在迭代前期可以快速搜寻最优解的大致范围,在迭代后期可以进行局部精细搜索,从而平衡算法全局探索和局部开发的能力;同时,将固定值发现概率
p
a
pa
pa改为随机调整发现概率
r
−
p
a
r^-pa
r−pa,有利于加快算法收敛速度,增加种群的多样性,使算法跳出局部极值,从而搜索到全局最优值。因此,DWCS算法将CS算法位置更新公式改为式(1)和式(2),将发现概率
p
a
pa
pa改为随机调整发现概率
r
−
p
a
r^-pa
r−pa(式(3)),具体流程如下图所示。
二、仿真实验与分析
实验将本文算法与标准CS算法、改进的CS算法(ASCSA)、粒子群优化算法(PSO)和蝙蝠算法(BA)进行对比,在相同的环境下分别独立运行30次以进行仿真实验。以文献[1]中的f1~f3、f12、f15、f16为例。f1~f3为50维,f12、f15、f16为2维。
结果显示如下:
函数:F1
BA:最大值: 3.2213,最小值:213.3678,平均值:103.1087,标准差:54.4154
CS:最大值: 0.61843,最小值:1.0302,平均值:0.88331,标准差:0.10231
PSO:最大值: 0.93005,最小值:1.2992,平均值:1.0948,标准差:0.071737
ASCSA:最大值: 8.9312e-07,最小值:0.25655,平均值:0.034657,标准差:0.060763
DWCS:最大值: 0,最小值:0,平均值:0,标准差:0
函数:F2
BA:最大值: 488.9215,最小值:704.16,平均值:619.6682,标准差:51.7914
CS:最大值: 112.1125,最小值:210.034,平均值:155.7148,标准差:19.7593
PSO:最大值: 163.681,最小值:254.4562,平均值:206.4796,标准差:25.7047
ASCSA:最大值: 15.9197,最小值:48.753,平均值:32.7343,标准差:7.8184
DWCS:最大值: 0,最小值:0,平均值:0,标准差:0
函数:F3
BA:最大值: 5.6096,最小值:20.3736,平均值:18.1133,标准差:3.9311
CS:最大值: 2.2169,最小值:5.1692,平均值:3.5401,标准差:0.71692
PSO:最大值: 3.5828,最小值:7.1532,平均值:5.18,标准差:0.92363
ASCSA:最大值: 1.8031,最小值:3.6712,平均值:2.7276,标准差:0.44849
DWCS:最大值: 8.8818e-16,最小值:8.8818e-16,平均值:8.8818e-16,标准差:0
函数:F12
BA:最大值: 3.0013,最小值:3.3015,平均值:3.0959,标准差:0.088508
CS:最大值: 3,最小值:3,平均值:3,标准差:1.9567e-15
PSO:最大值: 3,最小值:3,平均值:3,标准差:9.0336e-16
ASCSA:最大值: 3,最小值:3,平均值:3,标准差:1.9946e-15
DWCS:最大值: 3,最小值:3,平均值:3,标准差:9.1458e-16
函数:F15
BA:最大值: 0.043671,最小值:0.49922,平均值:0.40133,标准差:0.15665
CS:最大值: 0,最小值:5.2791e-10,平均值:5.537e-11,标准差:1.4405e-10
PSO:最大值: 0,最小值:0.043671,平均值:0.016013,标准差:0.021404
ASCSA:最大值: 0,最小值:0,平均值:0,标准差:0
DWCS:最大值: 0,最小值:0,平均值:0,标准差:0
函数:F16
BA:最大值: -0.99995,最小值:0,平均值:-0.59954,标准差:0.49789
CS:最大值: -1,最小值:-1,平均值:-1,标准差:0
PSO:最大值: -1,最小值:-1,平均值:-1,标准差:0
ASCSA:最大值: -1,最小值:-1,平均值:-1,标准差:0
DWCS:最大值: -1,最小值:-1,平均值:-1,标准差:0
仿真结果表明,与BA、CS、PSO、ASCSA算法相比,其寻优精度大幅提高,收敛速度更快、迭代次数更少、鲁棒性更强。
三、参考文献
[1] 李煜, 尚志勇, 刘景森. 求解函数优化问题的改进布谷鸟搜索算法[J]. 计算机科学, 2020, 47(1): 219-230.
[2] 李荣雨, 戴睿闻. 自适应步长布谷鸟搜索算法[J]. 计算机科学, 2017, 44(5): 235-240.