4.3.3 具有漂移和波动算子的粒子群优化算法
波动算子是在粒子的邻域内局部的扰动,代表粒子局部的“探索”能力。在演化算法的设计中,当种群出现聚集停滞现象时,一般利用变异算子来对粒子进行随机扰动,因此,主要是利用演化计算领域中已有的变异算子来设计波动算子。目前,人们已经设计了很多的变异算子,如均匀性变异、非一致性变异、自适应性变异、多级变异,此外还有混沌扰动、高斯变异、柯西变异、差分变异。在粒子群优化算法的改进设计中,后四种扰动算子使用相对较多,实验效果也相对理想。
将混沌扰动引入粒子群优化算法就是对标准粒子群优化算法的不足之处提出改进,基本思路是利用混沌运动的遍历性,产生大量初始个体,从中择优选出初始种群;或者是对当前粒子产生混沌扰动,以使粒子跳出局部极值区域。同时加入混沌初始化和混沌扰动的混沌粒子群优化算法的效果明显优于标准PSO算法,迭代次数明显减少,收敛精度更高。如果粒子群的聚集程度较高,高斯变异扰动的范围太小,以至于难于跳出局部最优,可采用柯西变异操作代替高斯变异操作。柯西分布和高斯分布具有相似性,都是正态概率分布,但是柯西分布具有较高的两翼概率特性,更容易产生一个远离原点的随机数,如果用柯西变异替换高斯变异来对粒子进行扰动,粒子离原来位置较远的概率要高于高斯变异,这意味着柯西变异扰动更能跳出局部极值的吸引。
由于差分算法的出色性能,很多学者把差分变异算子用于改进PSO算法[107-109],这方面的研究工作相对较多,并且取得了很好的实验效果。Hendtlass[110]提出了一种群差分进化算法(Swarm Differential Evolution Algorithm,简称SDEA),SDEA算法总体上还是遵循PSO算法的流程,只是偶尔执行差分变异操作来使粒子跳出局部最优,并且不影响PSO算法本身的执行,作者引入了参数T来控制SDEA算法执行的比例,因此SDEA算法增加了适应值函数评价次数;W.J.Zhang和X.F.Xie[111]提出了一种具有差分进化算子的混合粒子群算法(DEPSO),在DEPSO算法中,差分变异算子主要针对粒子的自身历史最优值来进行变异扰动;S.Das等[112]利用差分算子来改进PSO算法的速度更新策略;Z.F.Hao等[113]采用了类似于Hendtlass提出的SDEA算法和PSO混合执行的方法,只不过它是根据概率来确定某部分粒子的部分维采用SDEA算法的方式更新,另外一部分粒子的部分维采用PSO算法的方式更新。
鉴于差分变异算子对于PSO算法性能的改进有很大的促进作用,这里也采用差分变异算子来设计波动算子,粒子的位置更新如下式所示。
其中,δ是波动系数;m和n是随机选择的粒子的下标,要求m≠n≠i。
通过分析更新公式(4.7),会发现这里的DE算法和PSO算法混合策略不同于前面学者的方法:作者是将差分变异算子直接作用于粒子的当前位置;而前面学者的做法基本上是把差分算子作用于粒子的当前速度,粒子的历史最好位置,或者是粒子的全局最好位置。DE算法和PSO算法混合的方式不同,前面学者的做法虽然也是DE算法和PSO算法混合的方式,但是针对某个粒子和粒子的某一维时,只选用其中一种方式进行,作者是将DE算法和PSO算法真正地混合起来同时作用于粒子的位置更新。引入了差分波动算子之后,具有漂移和波动算子的粒子群优化算法(IPSO2)的基本步骤描述如下。
Step1:初始化粒子群,即随机设定每个粒子的初始位置Xi。
Step2:计算每个粒子的适应度值,并根据适应度值确定出个体最优值、个体最优值对应的个体与全局最优值、全局最优值对应的个体。
Step3:对每个粒子,比较它的适应度值和它经历过的最好位置Pi的适应度值,如果该粒子的适应度值比Pi对应的适应度值更好,则更新Pi。
Step4:对每个粒子,比较它的适应度值和群体经历过的最好位置pg的适应度值,如果该粒子的适应度值比pg对应的适应度值更好,则更新pg。
Step5:
其中,D表示粒子的维数,rand()是在[0,1]满足均匀分布的随机数,CR是一个概率阈值。
Step6:如果达到结束条件,则结束;否则转Step2。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。