文章目录
一、理论基础
1、正余弦优化算法(SCA)
请参考这里。
2、基于动态分级策略的改进正余弦算法(DCA)
2.1 拉丁超立方种群初始化策略
拉丁超立方抽样法是McKay等人提出来的一种多维分层抽样技术,可以高效地在变量的分布区间抽样,其本质就是将区间
[
0
,
1
]
[0,1]
[0,1]等分成
N
N
N个等间距不重叠的子区间,对每个子区间分别进行独立的等概率抽样从而保证抽样点均匀地分布在整个分布区间。随机抽样是在区间
[
0
,
1
]
[0,1]
[0,1]服从均匀分布,在抽样数不多的情况下,随机分布不能很好地将样本分散到整个区间。与随机抽样不同,拉丁超立方抽样保证变量覆盖在整个分布空间。拉丁超立方抽样和随机抽样分布对比如图1所示,图中表示随机抽样和拉丁超立方抽样在区间
[
0
,
1
]
[0,1]
[0,1]各抽取10个点,可以清楚看到,拉丁超立方抽样对于少量样本的情况下可以散布到整个空间。
初始种群是在
D
D
D维空间中生成种群规模为
N
N
N的种群,故结合拉丁超立方抽样法可得到DSCA中种群初始化策略,具体步骤如下:
步骤1 首先,确定种群规模
N
N
N和种群维数
D
D
D。
步骤2 确定变量
x
x
x的区间为
[
ub
,
lb
]
[\text{ub},\text{lb}]
[ub,lb],其中
ub
\text{ub}
ub和
ub
\text{ub}
ub分别是变量的下界和上界。
步骤3 将变量
x
x
x的区间
[
ub
,
lb
]
[\text{ub},\text{lb}]
[ub,lb]划分为
N
N
N个相等的子区间。
步骤4 在每一维里各个子区间中随机抽取一个点。
步骤5 将抽取的每一维的点组合形成初始种群。
2.2 动态分级策略
为了解决SCA存在的收敛精度较低且收敛速度较慢的问题,本文采用动态分级策略根据适应度值对种群进行排序,将种群动态地分为3个部分,对适应度值小的部分,种群处于较好的位置,通过精英引导加快收敛速度;对适应度值处于中间的部分,按照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
(1)
X_{i,j}=\begin{dcases}X_{i,a},\quad a=1,2,\cdots,m\\X_{i,b},\quad b=m+1,m+2,\cdots,n\\X_{i,c},\quad c=n+1,n+2,\cdots,N\end{dcases}\tag{1}
Xi,j=⎩⎪⎨⎪⎧Xi,a,a=1,2,⋯,mXi,b,b=m+1,m+2,⋯,nXi,c,c=n+1,n+2,⋯,N(1)其中,
X
i
,
j
X_{i,j}
Xi,j是所有种群,
X
i
,
a
,
X
i
,
b
X_{i,a},X_{i,b}
Xi,a,Xi,b和
X
i
,
c
X_{i,c}
Xi,c分别是按照适应度值排序后得到的较好、中等和较差种群;
m
m
m和
n
n
n分别是动态分级的边界:
m
=
[
N
4
+
N
(
0.5
−
t
T
)
3
]
m=\left[\frac N4+N(0.5-\frac tT)^3\right]
m=[4N+N(0.5−Tt)3]
n
=
[
3
N
4
+
N
(
0.5
−
t
T
)
3
]
n=[\frac{3N}{4}+N(0.5-\frac tT)^3]
n=[43N+N(0.5−Tt)3]具体分级思路如图2所示。
2.2.1 破坏扰动算子
为了提高SCA的收敛精度和种群的多样性,并避免陷入局部最优,引入一种破坏扰动算子,其思想源自天体物理学中“当总质量为
m
′
m'
m′的大量受重力束缚的粒子群过于接近大型物体
M
M
M时,该粒子群往往会被撕开”。
为了防止算法复杂性的过分增加,只有在满足
R
i
,
j
R
i
,
best
<
C
(2)
\frac{R_{i,j}}{R_{i,\text{best}}}<C\tag{2}
Ri,bestRi,j<C(2)的条件下才使用破坏算子进行扰动。其中,
R
i
,
j
=
∣
∣
X
i
−
X
j
∣
∣
R_{i,j}=||X_i-X_j||
Ri,j=∣∣Xi−Xj∣∣是粒子
i
i
i和
j
j
j之间的欧式距离,同理
R
i
,
best
=
∣
∣
X
i
−
pgbest
∣
∣
R_{i,\text{best}}=||X_i-\text{pgbest}||
Ri,best=∣∣Xi−pgbest∣∣是粒子
i
i
i与
pgbest
\text{pgbest}
pgbest之间的欧式距离。并且为了减少计算成本,粒子
i
i
i和粒子
j
j
j相邻。当种群未收敛时,阈值
C
C
C必须较大,可以探索更多空间,而随着种群彼此靠近,参数
C
C
C必须变小,加快收敛速度。
C
=
C
0
(
1
−
t
T
)
(3)
C=C_0(1-\frac tT)\tag{3}
C=C0(1−Tt)(3)其中,
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
)
,
R
i
,
best
<
1
(4)
\bar D=\begin{dcases}U\left(-\frac{R_{i,j}}2,\frac{R_{i,j}}{2}\right),\quad\quad\quad\, R_{i,\text{best}}≥1\\R_{i,j}+U\left(-\frac{R_{i,j}}2,\frac{R_{i,j}}{2}\right),\,\,R_{i,\text{best}}<1\end{dcases}\tag{4}
Dˉ=⎩⎪⎪⎨⎪⎪⎧U(−2Ri,j,2Ri,j),Ri,best≥1Ri,j+U(−2Ri,j,2Ri,j),Ri,best<1(4)其中,
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
\text{pgbest}
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}}<1
Ri,best<1的时候,表示粒子
i
i
i与
pgbest
\text{pgbest}
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
,
c
X_{i,c}
Xi,c,通过破坏算子进行扰动,通过式(5)对满足破坏条件的粒子进行扰动。
x
i
,
c
t
+
1
=
t
T
x
i
,
c
t
+
(
1
−
t
T
)
x
i
,
c
t
D
ˉ
(5)
x_{i,c}^{t+1}=\frac tTx_{i,c}^t+\left(1-\frac tT\right)x_{i,c}^t\bar D\tag{5}
xi,ct+1=Ttxi,ct+(1−Tt)xi,ctDˉ(5)式(5)中包含两部分,第一部分来自原来的种群信息,第二部分是包含破坏算子的部分,并且是随着时间减小的函数,算法早期可以受到破坏,探索更广阔的区域,避免陷入局部最优;在后期可以更快收敛,因此主要靠种群本身的信息,通过破坏算子的扰动,从而提高算法收敛精度。
2.2.2 精英引导方式
DSCA对适应度值好的部分种群 X i , a X_{i,a} Xi,a利用精英引导方式进行位置更新,从而加快算法收敛速度,在位置更新公式里引入个体极值,通过精英引导加快收敛速度。首先更新参数 r 1 r_1 r1、 r 2 r_2 r2、 r 3 r_3 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.4t/T pi=0.4−0.4t/T。具体更新策略为 x i , a t + 1 = { x i , a t + r 1 sin r 2 ∣ r 3 pgbest i t − x i , a t ∣ , r 4 < 0.5 ; rand ≥ p i x i , a t + r 1 cos r 2 ∣ r 3 pgbest i t − x i , a t ∣ , r 4 ≥ 0.5 ; rand ≥ p i pbest i t + r 1 sin r 2 ∣ r 3 pgbest i t − x i , a t ∣ , r 4 < 0.5 ; rand < p i pbest i t + r 1 cos r 2 ∣ r 3 pgbest i t − x i , a t ∣ , r 4 ≥ 0.5 ; rand < p i (6) x_{i,a}^{t+1}=\begin{dcases}x_{i,a}^t+r_1\sin r_2|r_3\text{pgbest}_i^t-x_{i,a}^t|,\quad\, r_4<0.5;\text{rand}≥p_i\\x_{i,a}^t+r_1\cos r_2|r_3\text{pgbest}_i^t-x_{i,a}^t|,\quad\, r_4≥0.5;\text{rand}≥p_i\\\text{pbest}_i^t+r_1\sin r_2|r_3\text{pgbest}_i^t-x_{i,a}^t|,r_4<0.5;\text{rand}<p_i\\\text{pbest}_i^t+r_1\cos r_2|r_3\text{pgbest}_i^t-x_{i,a}^t|,r_4≥0.5;\text{rand}<p_i\end{dcases}\tag{6} xi,at+1=⎩⎪⎪⎪⎨⎪⎪⎪⎧xi,at+r1sinr2∣r3pgbestit−xi,at∣,r4<0.5;rand≥pixi,at+r1cosr2∣r3pgbestit−xi,at∣,r4≥0.5;rand≥pipbestit+r1sinr2∣r3pgbestit−xi,at∣,r4<0.5;rand<pipbestit+r1cosr2∣r3pgbestit−xi,at∣,r4≥0.5;rand<pi(6)其中, x i , a t x_{i,a}^t xi,at是第 t t t次迭代第 i i i维上第 a a a个解的位置, i = 1 , 2 , ⋯ , D i=1,2,\cdots,D i=1,2,⋯,D, a = 1 , 2 , ⋯ , m a=1,2,\cdots,m a=1,2,⋯,m; pgbest i t \text{pgbest}_i^t pgbestit是第 t t t次迭代第 i i i维的全局极值; pbest i t \text{pbest}_i^t pbestit是第 t t t次迭代第 i i i维个体极值。
2.3 全局搜索策略
通过全局搜索策略进行更新,将经动态分级策略扰动的种群合并,对整个种群应用全局搜索策略更新,具体构造如下:
提出一种动态反向学习的全局搜索策略,随着迭代次数增加,
x
i
,
j
x_{i,j}
xi,j的上下限动态变化。
x
i
,
j
t
x_{i,j}^t
xi,jt的动态反向点
x
~
i
,
j
t
\widetilde x_{i,j}^t
x
i,jt的计算公式为
x
~
i
,
j
t
=
r
5
(
a
ˉ
i
(
t
)
+
b
ˉ
i
(
t
)
−
x
i
,
j
t
)
(7)
\widetilde x_{i,j}^t=r_5(\bar a_{i}(t)+\bar b_i(t)-x_{i,j}^t)\tag{7}
x
i,jt=r5(aˉi(t)+bˉi(t)−xi,jt)(7)其中,
x
~
i
,
j
t
\widetilde x_{i,j}^t
x
i,jt是第
t
t
t次迭代中第
i
i
i维上第
j
j
j个解的位置;
a
ˉ
i
(
t
)
\bar a_i(t)
aˉi(t)和
b
ˉ
i
(
t
)
\bar b_i(t)
bˉi(t)分别为当前种群在第
i
i
i维上的最小值和最大值,
a
ˉ
i
(
t
)
=
min
(
X
i
t
)
,
b
ˉ
i
(
t
)
=
max
(
X
i
t
)
,
i
=
1
,
2
,
⋯
,
D
,
j
=
1
,
2
,
⋯
,
N
\bar a_i(t)=\min(X_i^t),\bar b_i(t)=\max(X_i^t),i=1,2,\cdots,D,j=1,2,\cdots,N
aˉi(t)=min(Xit),bˉi(t)=max(Xit),i=1,2,⋯,D,j=1,2,⋯,N;
r
5
r_5
r5为
[
0
,
1
]
[0,1]
[0,1]的随机数。
将动态反向学习数引入到搜索策略中,既可以在迭代后期局部的上下限进行跳动以增强跳出局部最优的能力,又可以加快收敛速度,根据控制参数
p
r
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
x
i
,
j
t
+
1
=
(
1
−
r
6
)
x
i
,
j
t
+
x
~
i
,
j
t
,
rand
≥
p
r
(8)
\begin{dcases}\begin{dcases}X_{i,j}^t=X_{i,a}^{t+1}\bigcup X_{i,b}^{t+1}\bigcup X_{i,c}^{t+1}\\x_{i,j}^{t+1}=(1-r_6)x_{i,j}^t+r_6\widetilde x_{i,j}^t\end{dcases},\quad \text{rand}<pr\\x_{i,j}^{t+1}=(1-r_6)x_{i,j}^t+\widetilde x_{i,j}^t,\quad\quad\quad\,\,\,\,\, \text{rand}≥pr\end{dcases}\tag{8}
⎩⎪⎨⎪⎧{Xi,jt=Xi,at+1⋃Xi,bt+1⋃Xi,ct+1xi,jt+1=(1−r6)xi,jt+r6x
i,jt,rand<prxi,jt+1=(1−r6)xi,jt+x
i,jt,rand≥pr(8)其中,
t
t
t为当前迭代次数,
x
~
i
,
j
t
\widetilde 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
\text{rand}
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
pr
pr取0.4。
2.4 DSCA的基本流程
DSCA基本流程如图3所示。
二、数值仿真分析
为了检验DSCA的性能,选取PSO、BSA(回溯搜索算法)[2]、SCA与DSCA进行对比。实验参数设置如下:种群规模
N
=
30
N=30
N=30,最大迭代次数设 置为
5000
5000
5000,其余对比算法参数均按照原文献设置,每个算法独立运行30次。以文献[1]的f1、f2、f9、f13、f14、f15(2维)为例,维数均为50维(f15除外)。
结果显示如下:
函数:F1
SCA:最优值: 3.5304e-15,最差值:0.00092255,平均值:4.5037e-05,标准差:0.00017369
PSO:最优值: 0.00031229,最差值:0.0014016,平均值:0.00063964,标准差:0.00025901
BSA:最优值: 1.0902e-17,最差值:2.8954e-15,平均值:3.6565e-16,标准差:5.6374e-16
DSCA:最优值: 0,最差值:0,平均值:0,标准差:0
函数:F2
SCA:最优值: 2.9282e-36,最差值:2.0175e-26,平均值:8.2678e-28,标准差:3.6885e-27
PSO:最优值: 0.029711,最差值:0.43892,平均值:0.13613,标准差:0.095462
BSA:最优值: 2.8127e-17,最差值:3.7293e-15,平均值:6.6431e-16,标准差:8.5634e-16
DSCA:最优值: 0,最差值:0,平均值:0,标准差:0
函数:F9
SCA:最优值: 4.4409e-15,最差值:20.2036,平均值:12.9713,标准差:9.194
PSO:最优值: 0.0016475,最差值:3.0938,平均值:0.93088,标准差:0.95246
BSA:最优值: 1.5099e-14,最差值:8.2601e-14,平均值:2.8718e-14,标准差:1.3872e-14
DSCA:最优值: 8.8818e-16,最差值:8.8818e-16,平均值:8.8818e-16,标准差:0
函数:F13
SCA:最优值: 2.4525e-13,最差值:1.6381,平均值:0.079608,标准差:0.30871
PSO:最优值: 0.68145,最差值:6.4983,平均值:2.3461,标准差:1.3319
BSA:最优值: 4.6543e-06,最差值:0.014906,平均值:0.003662,标准差:0.0034868
DSCA:最优值: 0,最差值:0,平均值:0,标准差:0
函数:F14
SCA:最优值: 6.4129,最差值:100.3124,平均值:46.3259,标准差:27.2979
PSO:最优值: 0.17697,最差值:0.68964,平均值:0.41307,标准差:0.15179
BSA:最优值: 23.9545,最差值:74.0951,平均值:44.3872,标准差:12.7381
DSCA:最优值: 0,最差值:1.5683e-245,平均值:5.2276e-247,标准差:0
函数:F15
SCA:最优值: -1.8013,最差值:-1,平均值:-1.6673,标准差:0.30352
PSO:最优值: -1.8013,最差值:-1.8013,平均值:-1.8013,标准差:9.0336e-16
BSA:最优值: -1.8013,最差值:-1.8013,平均值:-1.8013,标准差:9.0336e-16
DSCA:最优值: -1.8013,最差值:-1.7991,平均值:-1.8005,标准差:0.00053731
结果表明,DSCA改善了SCA存在的缺陷,DSCA相比于PSO、SCA均具有更好的收敛精度和收敛速度,在稳定性方面,DSCA相比于其他对比算法也有更好的表现。
三、参考文献
[1] 魏锋涛, 张洋洋, 黎俊宇, 等. 基于动态分级策略的改进正余弦算法[J]. 系统工程与电子技术, 2021, 43(6): 1596-1605.
[2] Civicioglu P. Backtracking Search Optimization Algorithm for numerical optimization problems[J]. Applied Mathematics and Computation, 2013, 219(15): 8121-8144.