粒子群算法(PSO)——算法详解(二)

粒子群算法的修正

基础的PSO算法可以成功解决一些问题,例如数学优化问题、组合问题即多层神经网络训练等。但也存在着算法收敛性与收敛速度等问题,因此对PSO算法有许多修正方法,用于提升性能。这些修改包括引入惯性权重、最大速度、速度收缩、确定个人最佳和全局最佳(或局部最佳)位置以及不同的速度模型等方法。

一、最大速度

决定优化算法效率和准确性的很重要的一个方面是 e x p l o r a t i o n – e x p l o i t a t i o n      t r a d e − o f f exploration–exploitation\;\; trade-off explorationexploitationtradeoff,即探索能力与利用能力的权衡。 e x p l o r a t i o n exploration exploration指算法探索不同搜索空间来确定最优解位置所在区域的能力; e x p l o i t a t i o n exploitation exploitation指算法在给定范围内寻找一个优秀候选解的能力。一个好的优化算法可以很好的平衡这两个目标的矛盾。在PSO中,是利用速度更新公式来达到这一目标。
如前面几篇所述,粒子 i i i 的速度更新公式为:

v i ( t + 1 ) = v i ( t ) + c 1 ⋅ r 1 ( t ) ⋅ [ y i ( t ) − x i ( t ) ] + c 2 ⋅ r 2 ( t ) ⋅ [ y ^ i ( t ) − x i ( t ) ] \mathbf v_{i}(t+1)=\mathbf v_{i}(t)+c_1\cdot \mathbf r_{1}(t)\cdot [\mathbf y_{i}(t)-\mathbf x_{i}(t)]+c_2\cdot \mathbf r_{2}(t)\cdot [\hat \mathbf y_{i}(t)-\mathbf x_{i}(t)] vi(t+1)=vi(t)+c1r1(t)[yi(t)xi(t)]+c2r2(t)[y^i(t)xi(t)]

对于 g − b e s t g-best gbest PSO算法, 粒子 i i i 在第 j j j 维上的速度更新公式为:

v i j ( t + 1 ) = v i j ( t ) + c 1 ⋅ r 1 j ( t ) ⋅ [ y i j ( t ) − x i j ( t ) ] + c 2 ⋅ r 2 j ( t ) ⋅ [ y ^ i j ( t ) − x i j ( t ) ] v_{ij}(t+1)=v_{ij}(t)+c_1\cdot r_{1j}(t)\cdot [y_{ij}(t)-x_{ij}(t)]+c_2\cdot r_{2j}(t)\cdot [\hat y_{ij}(t)-x_{ij}(t)] vij(t+1)=vij(t)+c1r1j(t)[yij(t)xij(t)]+c2r2j(t)[y^ij(t)xij(t)]

常数最大速度

若速度过大,则容易使粒子飞出搜索空间边界,造成粒子发散。为控制粒子的探索能力(即使粒子尽可能不飞出边界),引入速度的边界限制,即最大速度,以 V m a x , j V_{max,j} Vmax,j 代表允许的在第 j j j 维上的最大速度,则粒子速度更新公式可改为:
v i ( t + 1 ) = { v i j ′ ( t + 1 ) , i f    v i j ′ ( t + 1 ) ) < V m a x , j V m a x , j , i f    v i j ′ ( t + 1 ) ) ≥ V m a x , j \displaystyle v_i(t+1)=\left\{ \begin{aligned} v'_{ij}(t+1), & & {if\,\,v'_{ij}(t+1))< V_{max,j}}\\ V_{max,j}, & & {if\,\,v'_{ij}(t+1))\ge V_{max,j}}\\ \end{aligned} \right. vi(t+1)={vij(t+1),Vmax,j,ifvij(t+1))<Vmax,jifvij(t+1))Vmax,j, 其中, v i j ′ ( t + 1 ) v'_{ij}(t+1) vij(t+1) 是根据上述速度更新公式计算得到的。最大速度对搜索的影响如下所示:
在这里插入图片描述

V m a x , j V_{max,j} Vmax,j 的值是很重要的,它控制着由逐渐增加的速度所决定的搜索粒度。 V m a x , j V_{max,j} Vmax,j 越大,全局探索能力越强; V m a x , j V_{max,j} Vmax,j 越小,局部开发能力越强。因此,需要确定一个合适的 V m a x , j V_{max,j} Vmax,j 值,以使粒子不能移动的太快或太慢,使得算法的探索与开发能力相平衡。通常, V m a x , j = δ ⋅ ( x m a x , j − x m i n , j ) V_{max,j}=\delta\cdot (x_{max,j}-x_{min,j}) Vmax,j=δ(xmax,jxmin,j) δ \delta δ 具有问题独立性,可以使用一些经验方法得到(如交叉验证法)。

控制最大速度有许多优势,但也存在着一些问题:其一,最大速度不仅改变步长,也改变粒子移动的方向,可能有利于最优解的搜素,也可能不利;其二,当粒子的所有速度都达到最大速度时,就会使得粒子的搜索域变为一个的 [ x i ( t ) − V m a x , x i ( t ) + V m a x ] [\mathbf x_i(t)-\mathbf V_{max},\mathbf x_i(t)+\mathbf V_{max}] [xi(t)Vmaxxi(t)+Vmax] 超立方体,这就使得粒子可能跳过最优解,也很难对局部区域进行良好的开发利用。这一问题可使用随时间变化的最大速度来解决(即 V m a x , j V_{max,j} Vmax,j 随时间衰减)。

可利用双曲正切函数对速度进行限制,降低 PSO算法对 δ \delta δ 的敏感性,如: v i j ( t + 1 ) = V m a x , j ⋅ t a n h ( v i j ′ ( t + 1 ) V m a x , j ) \displaystyle v_{ij}(t+1)=V_{max,j}\cdot tanh(\frac{v'_{ij}(t+1)}{V_{max,j}}) vij(t+1)=Vmax,jtanh(Vmax,jvij(t+1))

动态最大速度

1.当经过 τ \tau τ 次迭代,全局最优解没有提升时 :

V m a x , j ( t + 1 ) = { γ ⋅ V m a x , j ( t ) , f ( y ^ ( t ) ) ≥ f ( y ^ ( t − t ′ ) )        ∀ t ′ = 1 , ⋯   , n t ′ V m a x , j ( t ) , o t h e r w i s e \displaystyle V_{max,j}(t+1)=\left\{ \begin{aligned} \gamma \cdot V_{max,j}(t), & & {f(\hat\mathbf y(t))\ge f(\hat\mathbf y(t-t'))\;\;\;\forall t'=1,\cdots,n_{t'}}\\ V_{max,j}(t), & & {otherwise}\\ \end{aligned} \right. Vmax,j(t+1)={γVmax,j(t),Vmax,j(t),f(y^(t))f(y^(tt))t=1,,ntotherwise

2.指数衰减: V m a x , j ( t + 1 ) = ( 1 − ( t n t ) α ) ⋅ V m a x , j ( t ) \displaystyle V_{max,j}(t+1)=(1-(\frac{t}{n_t})^{\alpha})\cdot V_{max,j}(t) Vmax,j(t+1)=(1(ntt)α)Vmax,j(t),其中, α \alpha α 是由实验或误差或正交验证等方法发现的一个正常数, n t n_t nt 是最大时间步数(迭代次数)。

二、惯性权重

惯性权重可作为一个不使用最大速度时的机制,虽然对速度更新中第一项的作用上很成功,但并不能完全消除最大速度。惯性权重 ω \omega ω 控制先前速度对新速度的影响,对于 g − b e s t g-best gbest PSO算法, 粒子 i i i 在第 j j j 维上的速度更新公式该为:

v i j ( t + 1 ) = ω ⋅ v i j ( t ) + c 1 ⋅ r 1 j ( t ) ⋅ [ y i j ( t ) − x i j ( t ) ] + c 2 ⋅ r 2 j ( t ) ⋅ [ y ^ i j ( t ) − x i j ( t ) ] v_{ij}(t+1)=\omega\cdot v_{ij}(t)+c_1\cdot r_{1j}(t)\cdot [y_{ij}(t)-x_{ij}(t)]+c_2\cdot r_{2j}(t)\cdot [\hat y_{ij}(t)-x_{ij}(t)] vij(t+1)=ωvij(t)+c1r1j(t)[yij(t)xij(t)]+c2r2j(t)[y^ij(t)xij(t)]

大的 ω \omega ω 值提升探索能力,增加多样性;小的 ω \omega ω 值提升局部开发能力,但太小的 ω \omega ω 会使种群丧失探索能力,小的 ω \omega ω 值使得对应的动量也小,这样使得粒子的方向变化会很容易。 ω \omega ω 越小,认知和社会成分就越能控制位置的更新。

对于 ω \omega ω 的设置,可在迭代的初始阶段设置一个大一点静态值,使得可以充分搜索,之后使用动态的 ω \omega ω ,使得粒子对局部区域的开发能力逐渐增强。 ω \omega ω 值和加速度常数之间的重要关系是至关重要的,因此 ω \omega ω 的选择需要与 c 1 , c 2 c_1,c_2 c1,c2 一同进行。需满足: ω > 1 2 ( c 1 + c 2 ) − 1 \displaystyle \omega>\frac{1}{2}(c_1+c_2)-1 ω>21(c1+c2)1,这保证粒子轨迹线的收敛,若不满足,则会使粒子发散或产生循环行为。

一些动态变化的惯性权重如下:
1.随机调整:在每一代使用随机选择的不同的惯性权重 ω \omega ω ω \omega ω 的选择与认知部分和社会部分无关;

2.线性衰减: ω ( t ) = [ ω ( 0 ) − ω ( n t ) ] ⋅ ( n t − t ) n t + ω ( n t ) \displaystyle \omega(t)=[\omega(0)-\omega(n_t)]\cdot\frac{(n_t-t)}{n_t}+\omega(n_t) ω(t)=[ω(0)ω(nt)]nt(ntt)+ω(nt) ,其中, n t n_t nt 是执行算法的最大时间步数, ω ( 0 ) \omega(0) ω(0) 为初始惯性权重, ω ( n t ) \omega(n_t) ω(nt) 为终止惯性权重,有 ω ( 0 ) > ω ( n t ) \omega(0)>\omega(n_t) ω(0)>ω(nt)

3.非线性衰减:非线性衰减相较于线性衰减,进行探索的时间较短,更多的时间用在开发优秀解上。非线性衰减在平滑搜索的空间上更合适。有以下方法:
(1) ω ( t + 1 ) = ( ω ( t ) − 0.4 ) ⋅ ( n t − t ) n t + 0.4 \displaystyle \omega(t+1)=\frac{(\omega(t)-0.4)\cdot(n_t-t)}{n_t+0.4} ω(t+1)=nt+0.4(ω(t)0.4)(ntt),其中 ω ( 0 ) = 0.9 \omega(0)=0.9 ω(0)=0.9
(2) ω ( t + 1 ) = α ⋅ ω ( t ′ ) \displaystyle \omega(t+1)=\alpha\cdot\omega(t') ω(t+1)=αω(t),可取 α = 0.975 \alpha=0.975 α=0.975 t ′ t' t 是惯性权重上一次改变时的时间。只有当种群的适应度没有大的变化时,惯性权重才会发生改变。
(3)自适应惯性权重,其中惯性值的变化量与群体的相对改进成正比,即 ω i ( t + 1 ) = ω ( 0 ) + [ ω ( n t ) − ω ( 0 ) ] ⋅ e m i ( t ) − 1 e m i ( t ) + 1 \displaystyle \omega_i(t+1)=\omega(0)+[\omega(n_t)-\omega(0)]\cdot\frac{e^{m_i(t)}-1}{e^{m_i(t)}+1} ωi(t+1)=ω(0)+[ω(nt)ω(0)]emi(t)+1emi(t)1 ,其中相对改进 m i ( t ) = f ( y ^ i ( t ) ) − f ( x ^ i ( t ) ) f ( y ^ i ( t ) ) + f ( x ^ i ( t ) ) \displaystyle m_i(t)=\frac{f(\hat\mathbf y_i(t))-f(\hat\mathbf x_i(t))}{f(\hat\mathbf y_i(t))+f(\hat\mathbf x_i(t))} mi(t)=f(y^i(t))+f(x^i(t))f(y^i(t))f(x^i(t)) ω ( 0 ) < 1 , ω ( n t ) ≈ 0.5 \omega(0)<1,\omega(n_t)\approx0.5 ω(0)<1,ω(nt)0.5
。该方法的速度更新与认知部分无关,每个粒子的权重仅与距邻居中最优位置的距离有关。

4.模糊适应权重

5.增加型权重

三、限制系数

限制系数设置如下:
v i j ( t + 1 ) = χ ⋅ { v i j ( t ) + ϕ 1 ⋅ [ y i j ( t ) − x i j ( t ) ] + ϕ 2 ⋅ [ y ^ i j ( t ) − x i j ( t ) ] } v_{ij}(t+1)=\chi\cdot\{v_{ij}(t)+\phi_1\cdot [y_{ij}(t)-x_{ij}(t)]+\phi_2\cdot [\hat y_{ij}(t)-x_{ij}(t)]\} vij(t+1)=χ{vij(t)+ϕ1[yij(t)xij(t)]+ϕ2[y^ij(t)xij(t)]}

其中 χ = 2 κ ∣ 2 − ϕ − ϕ ( ϕ − 4 ) ∣ \displaystyle\chi=\frac{2\kappa}{|2-\phi-\sqrt{\phi(\phi-4)}|} χ=2ϕϕ(ϕ4) 2κ ϕ 1 = c 1 ⋅ r 1 , ϕ 2 = c 2 ⋅ r 2 , ϕ = ϕ 1 + ϕ 2 \phi_1=c_1\cdot r_1,\phi_2=c_2\cdot r_2,\phi=\phi_1+\phi_2 ϕ1=c1r1,ϕ2=c2r2,ϕ=ϕ1+ϕ2,需满足 ϕ ≥ 4 , κ ∈ [ 0 , 1 ] \phi\ge4,\kappa\in[0,1] ϕ4,κ[0,1]

上述方程可以衍生出一种对种群特征值动态分析的方法。上述限制条件确保了在不需要最大速度时,使得算法可收敛于一个稳定点, χ ∈ [ 0 , 1 ] \chi\in[0,1] χ[0,1] 表示速度在每次迭代时的衰减程度。参数 κ \kappa κ 控制种群的探索与开发能力的平衡。当 κ ≈ 0 \kappa\approx0 κ0 时,算法通过局部开发达到快速收敛,整个种群的行为几乎类似于爬坡;当 κ ≈ 1 \kappa\approx1 κ1 时,算法有很高的探索能力,收敛很慢。通常, κ \kappa κ 被置为一个常数,但也可动态设置。

四、同步更新与异步更新

同步更新时,最佳位置与粒子位置更新是分开进行的,一次迭代中当所有粒子更新完成后再更新最佳位置;

异步更新时,在每次有粒子位置更新后就计算新的最佳位置。

异步更新有着关于搜索空间最佳区域及时反馈的特性,而同步更新则是每迭代一次,只反馈一次信息。异步更新更适用于像 l − b e s t l-best lbest PSO 这种低连通性的结构,而同步更新则更适用于像 g − b e s t g-best gbest PSO 这样连通性高的结构。

五、速度模型

认知模型

在速度更新公式中去掉了社会部分,速度更新公式变为: v i j ( t + 1 ) = ω ⋅ v i j ( t ) + c 1 ⋅ r 1 j ( t ) ⋅ [ y i j ( t ) − x i j ( t ) ] v_{ij}(t+1)=\omega\cdot v_{ij}(t)+c_1\cdot r_{1j}(t)\cdot [y_{ij}(t)-x_{ij}(t)] vij(t+1)=ωvij(t)+c1r1j(t)[yij(t)xij(t)]
认知模型中,粒子的行为可以类比为怀旧,即粒子有回到原来最佳位置的随机趋势。相较于全模型,认知模型是脆弱的,趋向于在初始区域进行局部搜索,其在动态环境中的表现是较差。

社会模型

在速度更新公式中去掉了认知部分,速度更新公式变为: v i j ( t + 1 ) = ω ⋅ v i j ( t ) + + c 2 ⋅ r 2 j ( t ) ⋅ [ y ^ i j ( t ) − x i j ( t ) ] v_{ij}(t+1)=\omega\cdot v_{ij}(t)++c_2\cdot r_{2j}(t)\cdot [\hat y_{ij}(t)-x_{ij}(t)] vij(t+1)=ωvij(t)++c2r2j(t)[y^ij(t)xij(t)]

无私模型

无私模型基本上是社会模型,但是邻域最佳解只从粒子的邻域中选择。即粒子本身是不允许成为最佳邻域解的。无私模型在动态变化的环境中表现也很惨。

有关粒子群算法的其他信息,可参见其之前的两篇博客:
粒子群算法(PSO)——总体概述
粒子群算法(PSO)——算法详解(一)

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值