基于动态分级策略的改进正余弦算法
文章目录
摘要:针对正余弦算法存在易陷入局部最优、求解精度不高、收敛速度较慢等问题,提出一种基于动态分级策略的改进正余弦算法。首先,引入拉丁超立方抽样法,将搜索空间均匀划分,使初始种群覆盖整个搜索空间,以保持初始种群的多样性。其次,采用动态分级策略,根据适应度值的排序情况,将种群动态划分为好中差3个等级,并应用破坏策略与精英引导方法对其进行扰动,以提高算法的收敛精度,增强跳出局部最优的能力。最后,引入反向学习方法,设计了动态反向学习全局搜索策略,以提高算法的收敛速度。
1.正余弦算法
基础正余弦算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/107762654
2.改进正余弦算法
2.1 拉丁超立方种群初始化策略
初始种群的好坏会影响收敛速度和精度。 SCA的初始种群是随机产生的,无法保证种群的多样性以及在搜索空间分布的合理性,故 DSCA 通过引入拉丁超立方抽样法生成更加分布均匀的初始点。初始种群是在
D
D
D 维空间中生成种群规模为
N
\mathrm{N}
N 的种群, 故结合拉丁超立方抽样法可得到 DSCA 中种群初始化策 略, 具体步乑如下。
步骤 1 首先, 确定种群维数
D
D
D 和种群规模
N
N
N 。
步骤 2 确定变量
x
x
x 的区间为
[
u
b
,
l
b
]
[\mathrm{ub}, \mathrm{lb}]
[ub,lb], 其 中
u
b
\mathrm{ub}
ub 和
l
b
\mathrm{lb}
lb 分别是变量的下界和上界。
步骤 3 将变量
x
x
x 的区间
[
u
b
,
l
b
]
[\mathrm{ub}, \mathrm{lb}]
[ub,lb] 划分为
N
N
N 个相等的 子区间。
步骤 4 在每一维里各个子区间中随机抽取一个点。
步骤 5 将抽取的每一维的点组合形成初始种群。
2.2 动态分级策略
为了解决SCA存在的收敛精度较低且收敛速度较慢的问题, 本文采用动态分级策略根据适应度值对种群进行 排序, 将种群动态地分为 3 个部分, 对适应度值小的部分, 种群处于较好的位置, 通过精英引导加快收敛速度; 对适应 度值处于中间的部分, 按照
S
C
A
\mathrm{SCA}
SCA 位置更新公式进行迭代; 对适应度值大的部分, 种群处于较差的位置, 通过破坏算子 进行扰动, 以增加其种群多样性, 提高收敛精度, 避免陷入 局部最优。具体分级为
X
i
,
j
=
{
X
i
,
a
,
a
=
1
,
2
,
⋯
,
m
X
i
,
b
,
b
=
m
+
1
,
m
+
2
,
⋯
,
n
X
i
,
c
,
c
=
n
+
1
,
n
+
2
,
⋯
,
N
(4)
\boldsymbol{X}_{i, j}=\left\{\begin{array}{l} \boldsymbol{X}_{i, a}, a=1,2, \cdots, m \\ \boldsymbol{X}_{i, b}, b=m+1, m+2, \cdots, n \\ \boldsymbol{X}_{i, c}, c=n+1, n+2, \cdots, N \end{array}\right. \tag{4}
Xi,j=⎩
⎨
⎧Xi,a,a=1,2,⋯,mXi,b,b=m+1,m+2,⋯,nXi,c,c=n+1,n+2,⋯,N(4)
式中,
X
i
,
j
\boldsymbol{X}_{i, j}
Xi,j 是所有种群,
X
i
,
a
,
X
i
,
b
\boldsymbol{X}_{i, a}, \boldsymbol{X}_{i, b}
Xi,a,Xi,b 和
X
i
,
c
\boldsymbol{X}_{i, c}
Xi,c 分别是按照适应度值 排序后得到的较差、中等和较好种群;
m
m
m 和
n
n
n 分别是动态分 级的边界:
m
=
[
N
4
+
N
(
0.5
−
t
T
)
3
]
n
=
[
3
N
4
+
N
(
0.5
−
t
T
)
3
]
\begin{aligned} &m=\left[\frac{N}{4}+N\left(0.5-\frac{t}{T}\right)^3\right] \\ &n=\left[\frac{3 N}{4}+N\left(0.5-\frac{t}{T}\right)^3\right] \end{aligned}
m=[4N+N(0.5−Tt)3]n=[43N+N(0.5−Tt)3]
2.2.1 破坏扰动算子
为了提高
S
C
A
\mathrm{SCA}
SCA 的收敛精度和种群的多样性, 并避免陷 入局部最优, 引入一种破坏扰动算子, 其态想源自天体物理 学中“当总质量为
m
′
m^{\prime}
m′ 的大量受重力束缚的粒子群过于接近 大型物体
M
M
M 时,该粒子群往往会被撕开"[23]。为了实现破 坏扰动, 将算法中的最优种群作为大型物体
M
M
M, 在大型物体 的引力作用下, 其他种群会被破坏和散射, 以提高种群多样 性以及收敛精度。
为了防止算法复杂性的过分增加, 只有在满足
R
i
,
j
R
i
,
best
<
C
(5)
\frac{R_{i, j}}{R_{i, \text { best }}}<C \tag{5}
Ri, best Ri,j<C(5)
的条件下才使用破坏算子进行扰动。其中,
R
i
,
j
=
∥
X
i
−
X
j
∥
R_{i, j}=\left\|\boldsymbol{X}_i-\boldsymbol{X}_j\right\|
Ri,j=∥Xi−Xj∥ 是 粒子
i
i
i 和
j
j
j 之间的欧式距离, 同理
R
i
,
best
=
∥
X
i
R_{i, \text { best }}=\| \boldsymbol{X}_i
Ri, best =∥Xi - pgbest
∥
\|
∥ 是 粒子
i
i
i 与 pgbest 之间的欧式距离。并且为了减少计算成 本, 粒子
i
i
i 和粒子
j
j
j 相邻。当种群末收敛时, 阈值
C
C
C 必须较 大, 可以探索更多空间, 而随着种群彼此靠近, 参数
C
C
C 必须 变小,加快收敛速度。
C
=
C
0
(
1
−
t
T
)
(6)
C=C_0\left(1-\frac{t}{T}\right) \tag{6}
C=C0(1−Tt)(6)
式中,
C
0
C_0
C0 是初始阈值。破坏算子为
D
ˉ
=
{
U
(
−
R
i
,
j
2
,
R
i
,
j
2
)
,
R
i
,
best
⩾
1
R
i
,
j
+
U
(
−
R
i
,
j
2
,
R
i
,
j
2
)
,
其他
(7)
\bar{D}=\left\{\begin{array}{l} U\left(-\frac{R_{i, j}}{2}, \frac{R_{i, j}}{2}\right), R_{i, \text { best }} \geqslant 1 \\ R_{i, j}+U\left(-\frac{R_{i, j}}{2}, \frac{R_{i, j}}{2}\right), \text { 其他 } \end{array}\right. \tag{7}
Dˉ=⎩
⎨
⎧U(−2Ri,j,2Ri,j),Ri, best ⩾1Ri,j+U(−2Ri,j,2Ri,j), 其他 (7)
式中,
U
(
−
R
i
,
j
2
,
R
i
,
j
2
)
U\left(-\frac{R_{i, j}}{2}, \frac{R_{i, j}}{2}\right)
U(−2Ri,j,2Ri,j) 是服从均匀分布的随机数, 其间隔为
[
−
R
i
,
j
2
,
R
i
,
j
2
]
\left[-\frac{R_{i, j}}{2}, \frac{R_{i, j}}{2}\right]
[−2Ri,j,2Ri,j], 当
R
i
,
best
>
1
R_{i, \text { best }}>1
Ri, best >1 时, 表示粒子
i
i
i 与 pgbest 的位置 较远, 利用
D
ˉ
∈
U
(
−
R
i
,
j
2
,
R
i
,
j
2
)
\bar{D} \in U\left(-\frac{R_{i, j}}{2}, \frac{R_{i, j}}{2}\right)
Dˉ∈U(−2Ri,j,2Ri,j) 算子进行对搜索空间进行探 索; 当
R
i
,
best
⩽
1
R_{i, \text { best }} \leqslant 1
Ri, best ⩽1 的时侯, 表示粒子
i
i
i 与 pgbest 的位置较近, 此时受到全局极值的吸引, 利用
D
ˉ
∈
R
i
,
j
+
U
(
−
R
i
,
j
2
,
R
i
,
j
2
)
\bar{D} \in R_{i, j}+U\left(-\frac{R_{i, j}}{2}, \frac{R_{i, j}}{2}\right)
Dˉ∈Ri,j+U(−2Ri,j,2Ri,j) 算子对搜索空间进行开发。
对适应度值差的部分的种群
X
i
,
a
\boldsymbol{X}_{i, a}
Xi,a, 通过破坏算子进行 扰动, 通过
x
i
,
a
i
+
1
=
t
T
x
i
,
a
t
+
(
1
−
t
T
)
x
i
,
a
i
D
ˉ
(8)
x_{i, a}^{i+1}=\frac{t}{T} x_{i, a}^t+\left(1-\frac{t}{T}\right) x_{i, a}^i \bar{D} \tag{8}
xi,ai+1=Ttxi,at+(1−Tt)xi,aiDˉ(8)
对满足破坏条件的粒子进行扰动。式(8) 中包含两部 分, 第一部分来自原来的种群信息, 第二部分是包含破坏算 子的部分, 并且是随着时间减小的函数, 算法早期可以受到 破坏, 探索更广阔的区域, 避免陷入局部最优; 在后期可以 更快收玫, 因此主要靠种群本身的信息, 通过破坏算子的扰 动, 从而提高算法收敛精度。
2.2.2 精英引导方式
SCA 通常利用式 (1) 和式 (2) 更新种群, 存在收敛速度 慢等问题, DSCA 对适应度值好的部分种群
X
i
,
c
\boldsymbol{X}_{i, c}
Xi,c 利用精英引 导方式进行位置更新, 从而加快算法收敛速度, 在位置更新 公式里引入个体极值, 通过精英引导加快收敛速度。首先 更新参数
r
1
、
r
2
、
r
3
r_1 、 r_2 、 r_3
r1、r2、r3 和
r
4
r_4
r4,通过控制参数
p
i
p_i
pi 在精英引导方式 和原种群更新方式之间转换, 在迭代前期, 需要较大的
p
i
p_i
pi 值使粒子向最优方向进行; 到了迭代后期, 则不需要精英引 导种群, 而采用原来的种群更新方式更新种群。因此, 通常 取
p
i
=
0.4
−
0.4
t
/
T
∘
p_i=0.4-0.4 t / T_{\circ}
pi=0.4−0.4t/T∘ 具体更新策略为
x
i
,
c
t
+
1
=
{
x
i
,
c
t
+
r
1
sin
r
2
∣
r
3
pgbest
i
t
−
x
i
,
c
t
∣
,
r
4
<
0.5
;
rand
⩾
p
i
x
i
,
c
t
+
r
1
cos
r
2
∣
r
3
pgbest
i
t
−
x
i
,
c
t
∣
,
r
4
⩾
0.5
;
rand
⩾
p
i
pbest
i
t
+
r
1
sin
r
2
∣
r
3
pgbest
i
t
−
x
i
,
c
t
∣
,
r
4
<
0.5
;
rand
<
p
i
pbest
i
t
+
r
1
cos
r
2
∣
r
3
pgest
i
t
−
x
i
,
c
t
∣
,
r
4
⩾
0.5
;
rand
<
p
i
(9)
x_{i, c}^{t+1}=\left\{\begin{array}{l} x_{i, c}^t+r_1 \sin r_2\left|r_3 \operatorname{pgbest}_i^t-x_{i, c}^t\right|, r_4<0.5 ; \text { rand } \geqslant p_i \\ x_{i, c}^t+r_1 \cos r_2\left|r_3 \operatorname{pgbest}_i^t-x_{i, c}^t\right|, r_4 \geqslant 0.5 ; \operatorname{rand} \geqslant p_i \\ \text { pbest }_i^t+r_1 \sin r_2\left|r_3 \operatorname{pgbest}_i^t-x_{i, c}^t\right|, r_4<0.5 ; \text { rand }<p_i \\ \text { pbest }_i^t+r_1 \cos r_2 \mid r_3 \text { pgest }_i^t-x_{i, c}^t \mid, r_4 \geqslant 0.5 ; \text { rand }<p_i \end{array}\right. \tag{9}
xi,ct+1=⎩
⎨
⎧xi,ct+r1sinr2∣
∣r3pgbestit−xi,ct∣
∣,r4<0.5; rand ⩾pixi,ct+r1cosr2∣
∣r3pgbestit−xi,ct∣
∣,r4⩾0.5;rand⩾pi pbest it+r1sinr2∣
∣r3pgbestit−xi,ct∣
∣,r4<0.5; rand <pi pbest it+r1cosr2∣r3 pgest it−xi,ct∣,r4⩾0.5; rand <pi(9)
式中,
x
i
,
c
t
x_{i, c}^t
xi,ct 是第
t
t
t 次迭代第
i
i
i 维上第
c
c
c 个解的位置,
i
=
1
,
2
,
⋯
i=1,2, \cdots
i=1,2,⋯,
D
,
c
=
n
+
1
,
n
+
2
,
⋯
,
N
;
pgbest
i
t
D, c=n+1, n+2, \cdots, N ; \operatorname{pgbest}_i^t
D,c=n+1,n+2,⋯,N;pgbestit 是第
t
t
t 次迭代第
i
i
i 维下全 局极值;
p
b
e
s
t
i
t
\mathrm{pbest}_i^t
pbestit 是第
t
t
t 次迭代第
i
i
i 维个体极值。
2.3 全局搜索策略
通过全局搜索策略进行更新, 将经动态分级策略扰动的 种群合并, 对整个种群应用全局搜索策略更新, 具体构造如下:
为了加快
S
C
A
\mathrm{SCA}
SCA 的收敛速度, 将反向学习方法
[
24
−
27
]
{ }^{[24-27]}
[24−27] 引 入到全局搜索策略, 提出一种动态反向学习的全局搜索策 略, 反向学习是通过计算
X
=
[
x
1
,
x
2
⋯
,
x
D
]
\boldsymbol{X}=\left[x_1, x_2 \cdots, x_D\right]
X=[x1,x2⋯,xD] 的反向点
X
‾
=
\overline{\boldsymbol{X}}=
X=
[
x
1
‾
,
x
2
‾
⋯
x
D
‾
]
\left[\overline{x_1}, \overline{x_2} \cdots \overline{x_D}\right]
[x1,x2⋯xD], 同时评估当前解和其反向解择优使用, 以增强算法的搜索范围和能力。其中
x
∈
[
u
b
,
l
b
]
,
u
b
x \in[\mathrm{ub}, \mathrm{lb}], \mathrm{ub}
x∈[ub,lb],ub 和
l
b
\mathrm{lb}
lb 分别 是变量的下界和上界。
x
i
,
j
x_{i, j}
xi,j 的反向点计算公式为
x
ˉ
i
,
j
t
=
l
b
+
u
b
−
x
i
,
j
t
(10)
\bar{x}_{i, j}^t=\mathrm{lb}+\mathrm{ub}-x_{i, j}^t \tag{10}
xˉi,jt=lb+ub−xi,jt(10)
反向学习通常用于初始化种群, 可以得到一组好的初 始值, 为了更好地将反向学习运用到搜索策略中, 提出一种 动态反向学习的全局搜索策略, 随着迭代次数增加,
x
i
,
j
x_{i, j}
xi,j 的 上下限动态变化。
x
i
,
j
x_{i, j}
xi,j 的动态反向点
x
~
i
,
j
t
\tilde{x}_{i, j}^t
x~i,jt 的计算公式为
x
ˉ
i
,
j
t
=
r
5
(
a
i
‾
(
t
)
+
b
i
‾
(
t
)
−
x
i
,
j
t
)
(11)
\bar{x}_{i, j}^t=r_5\left(\overline{a_i}(t)+\overline{b_i}(t)-x_{i, j}^t\right) \tag{11}
xˉi,jt=r5(ai(t)+bi(t)−xi,jt)(11)
式中,
x
i
,
j
t
x_{i, j}^t
xi,jt 是第
t
t
t 次迭代中第
i
i
i 维上第
j
j
j 个解的位置;
a
i
‾
(
t
)
\overline{a_i}(t)
ai(t) 和
b
i
‾
(
t
)
\overline{b_i}(t)
bi(t) 分别为当前种群在第
i
i
i 维上的最小值和最大值,
a
i
‾
(
t
)
=
min
(
X
i
t
)
,
b
i
‾
(
t
)
=
max
(
X
i
t
)
,
i
=
1
,
2
,
⋯
,
D
,
j
=
1
\overline{a_i}(t)=\min \left(X_i^t\right), \overline{b_i}(t)=\max \left(X_i^t\right), i=1,2, \cdots, D, j=1
ai(t)=min(Xit),bi(t)=max(Xit),i=1,2,⋯,D,j=1,
2
,
⋯
,
N
;
r
5
2, \cdots, N ; r_5
2,⋯,N;r5 为
[
0
,
1
]
[0,1]
[0,1] 的随机数。
将动态反向学习数引入到搜索策略中, 既可以在迭代 后期局部的上下限进行跳动以增强跳出局部最优的能力, 又可以加快收敛速度, 根据控制参数
p
r
\mathrm{pr}
pr 在全局搜索策略和 动态分级策略之间转换, 全局策略为
{
X
i
,
j
t
=
X
i
,
a
t
+
1
∪
X
i
,
b
t
+
1
∪
X
i
,
c
t
+
1
,
x
i
,
j
t
+
1
=
(
1
−
r
6
)
x
i
,
j
t
+
r
6
x
~
i
,
j
t
rand
<
p
r
(12)
\left\{\begin{array}{l} X_{i, j}^t=X_{i, a}^{t+1} \cup X_{i, b}^{t+1} \cup X_{i, c}^{t+1}, \\ x_{i, j}^{t+1}=\left(1-r_6\right) x_{i, j}^t+r_6 \tilde{x}_{i, j}^t \end{array}\right. \text { rand }<\mathrm{pr}\tag{12}
{Xi,jt=Xi,at+1∪Xi,bt+1∪Xi,ct+1,xi,jt+1=(1−r6)xi,jt+r6x~i,jt rand <pr(12)
x i , j t + 1 = ( 1 − r 6 ) x i , j t + r 6 x ~ i , j t , rand ⩾ p r x_{i, j}^{t+1}=\left(1-r_6\right) x_{i, j}^t+r_6 \tilde{x}_{i, j}^t, \text { rand } \geqslant \mathrm{pr} xi,jt+1=(1−r6)xi,jt+r6x~i,jt, rand ⩾pr
式中, t t t 为进化代数; x ~ i , j t \tilde{x}_{i, j}^t x~i,jt 是 x i , j t x_{i, j}^t xi,jt 对应的反向解, r 6 r_6 r6 为 [ 0 , 1 ] [0,1] [0,1] 的随 机数; rand 是范围 [ 0 , 1 ] [0,1] [0,1] 的随机数; X i , a t + 1 , X i , b t + 1 X_{i, a}^{t+1}, X_{i, b}^{t+1} Xi,at+1,Xi,bt+1 和 X i , c t + 1 X_{i, c}^{t+1} Xi,ct+1 分别是 动态分级策略中 t + 1 t+1 t+1 次迭代种群, 通常控制参数 p r \mathrm{pr} pr 取 0.4 0.4 0.4 。
3.实验结果
4.参考文献
[1]魏锋涛,张洋洋,黎俊宇,史云鹏.基于动态分级策略的改进正余弦算法[J].系统工程与电子技术,2021,43(06):1596-1605.