基于动态分级策略的改进正余弦算法-附代码

基于动态分级策略的改进正余弦算法


摘要:针对正余弦算法存在易陷入局部最优、求解精度不高、收敛速度较慢等问题,提出一种基于动态分级策略的改进正余弦算法。首先,引入拉丁超立方抽样法,将搜索空间均匀划分,使初始种群覆盖整个搜索空间,以保持初始种群的多样性。其次,采用动态分级策略,根据适应度值的排序情况,将种群动态划分为好中差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.5Tt)3]n=[43N+N(0.5Tt)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=XiXj 是 粒子 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(1Tt)(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+(1Tt)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 r1r2r3 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.40.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 r3pgbestitxi,ct ,r4<0.5; rand pixi,ct+r1cosr2 r3pgbestitxi,ct ,r40.5;randpi pbest it+r1sinr2 r3pgbestitxi,ct ,r4<0.5; rand <pi pbest it+r1cosr2r3 pgest itxi,ct,r40.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]} [2427] 引 入到全局搜索策略, 提出一种动态反向学习的全局搜索策 略, 反向学习是通过计算 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,x2xD], 同时评估当前解和其反向解择优使用, 以增强算法的搜索范围和能力。其中 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+ubxi,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+1Xi,bt+1Xi,ct+1,xi,jt+1=(1r6)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=(1r6)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.

5.Matlab代码

6.python代码

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能算法研学社(Jack旭)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值