差分进化(differential evolution,DE)算法具有结构简单、容易实现等优点[1-2],目前已成功应用于各种实际优化问题,如化工参数辨识[3-4]、时间序列预测[5]、功率分配控制[6]、滑坡预测[7]等.虽然差分进化算法已应用于各种实际的优化问题,但其控制参数即缩放因子(F)和杂交概率(R)设置敏感,在很大程度上影响算法的性能[8].针对这一问题,研究者提出参数自适应机制[9-11]来动态地更新控制参数.在已提出的参数自适应机制中,有一些机制利用个体经验自适应地更新控制参数,称为基于个体经验的参数自适应机制;还有一些机制利用集体经验自适应地更新控制参数,称为基于集体经验的参数自适应机制.在基于个体经验的参数自适应机制中,种群中的每个个体都有自己的一组参数值,并且利用个体经验自适应地更新自己的参数值.例如文献[12]在所提的改进双变异策略协同差分进化(DMCDE)算法中利用个体自身的优秀历史参数来更新参数F和R.文献[13]设计了一种根据个体历史控制参数更新个体当前参数的自适应机制,在该算法中个体的控制参数以一定的概率继续沿用其上一代的控制参数.从自适应控制参数的差分进化(jDE)算法[13]中受到启发,文献[14]提出了一种自适应差分进化(aDE)算法,在该算法中若个体的适应值较优,则子代会继承个体的经验,否则子代随机生成个体的参数值.文献[15]在高斯骨架差分(MGBDE)算法中提出了一种根据个体适应值调整个体参数的方法,在该方法中当个体的适应值优于父代个体的适应值时,设置个体的参数值与其上一代的参数值一样,否则利用正态分布随机生成个体的参数值.在基于集体经验的参数自适应机制中,算法利用多个成功个体的集体经验自适应地调整参数值.例如文献[16]提出的自适应分布式差分进化(ADDE)算法中利用最近成功个体的集体经验自适应地更新参数值.文献[17]提出了自适应差分进化(SaDE)算法,该算法首先从所有成功个体的参数值中获取集体经验,然后利用集体经验调整下一代控制参数.文献[18]利用种群中所有成功个体的集体参数信息设计了一种基于集体经验的参数自适应机制,提高了算法的优化性能.文献[19]提出了基于成功历史的参数自适应差分进化(SHADE)算法,参数自适应差分进化算法首先存储所有历史成功个体的参数值,再采用Lehmer均值获取集体经验,最后利用集体经验来自适应地调整参数值.分析已有的参数自适应机制可知,对于基于个体经验的参数自适应机制,个体的参数值是根据个体自身的经验自适应地调整,充分地利用了个体自身的演化信息.然而这种机制没有很好地利用种群中其他优秀个体的经验,限制了算法性能的提升.对于基于集体经验的参数自适应机制,个体利用所有成功个体的集体经验自适应地更新自己的参数值,有利于得到更优秀的后代.然而该机制没有直接利用个体自身的经验调整参数,在一定程度上影响了算法搜索能力的提升.因此,如何利用个体经验和集体经验来设计更有效的参数自适应机制,对差分进化算法的性能提升具有较大的意义.本研究提出一种双重经验结合的自适应差分进化(differential evolution algorithm based on dual experience combination,DECDE)算法,双重经验结合的自适应差分进化算法提出了一种新的基于个体经验和集体经验结合的参数自适应机制.该机制利用个体经验和集体经验来指导控制参数F和R的自适应生成,进一步提高算法的优化性能.为验证双重经验结合的自适应差分进化算法的性能,在CEC2017基准集[20]上进行数值实验,将双重经验结合的自适应差分进化算法和其他改进的差分进化算法进行对比.实验结果显示双重经验结合的自适应差分进化算法在大部分测试函数上更优,显著提高了算法的性能.1 差分进化算法差分进化算法[1]主要通过变异、交叉和选择操作来寻找优化问题的解.首先,随机初始化Ns个个体,Xi={xi,1,xi,2,…,xi,D}  (i=1,2,…,Ns)为种群中的第i个个体,其中D为个体的维数.然后,在每一代中,差分进化算法采用变异和交叉操作为父代个体生成试验个体.最后,使用选择操作从父代个体和试验个体中选择更好的个体进入下一代.1.1 变异操作种群中的父代个体Xi,G通过变异操作产生一个变异个体Vi,G.差分进化中常用的变异策略如下[1]Vi,G=Xr1,G+F(Xr2,G-Xr3,G), (1)式中:G为进化代数;Xr1,Xr2和Xr3为从种群中随机选择的个体,且r1≠r2≠r3≠i;F∈[0,1]为缩放因子,其作用是控制差分扰动的程度.1.2 交叉操作交叉操作是父代个体与其产生的变异个体进行交叉操作,生成试验个体Ui,G={ui,1,G,ui,2,G,…,ui,D,G}的过程,具体为[1]ui,j,G=vi,j,G    (rand(0,1)≤R,  j=jrand);xi,j,G    (其他), (2)式中:j=1,2,…,D;jrand为[1,D]之间的一个随机整数;R∈[0,1]为杂交概率.1.3 选择操作选择操作是依据个体的适应值大小从父代个体和试验个体中选择更好的个体进入下一代,选择规则如下[1]:Xi,G+1=Ui,G    (f(Ui,G)f(Xi,G));Xi,G    (其他). (3)2 DECDE算法2.1 个体经验和集体经验结合的参数自适应机制在差分进化中,参数F和R对差分进化的性能有显著影响;同时,这两个参数的设置比较敏感,对待优化问题的依赖性较强.针对这个问题,研究者为差分进化设计了不同的参数自适应机制.其中,一些研究者将个体经验融入到参数自适应机制中,例如文献[13]设计了一种根据个体历史F和R值更新个体当前F和R值的参数自适应机制,该机制利用个体自身的演化信息来自适应地更新参数值,在一定程度上提升了差分进化的性能.然而,当个体自身的经验不能进一步提升个体质量时,继续利用个体经验很难生成合理的参数值,不利于得到优秀个体.此外,还有一些研究者提出了基于集体经验的参数自适应机制来提升差分进化的优化性能,例如文献[19]提出了一种基于集体经验的参数自适应机制,该机制首先从多个成功个体中提取集体经验,然后利用集体经验自适应地调整个体的F和R值,有利于得到优秀的子代.然而,该机制没有直接利用个体自身的经验,导致生成的参数值可能不符合个体自身的演化进程,进而影响算法的效率.因此,针对已有的参数自适应机制的不足,本研究设计了一种新的基于个体经验和集体经验结合的参数自适应机制,该机制将个体经验融入到基于集体经验的参数自适应机制中[19],弥补了基于集体经验的参数自适应机制[19]没有直接利用个体演化信息的不足,实现了基于个体经验的参数自适应机制和基于集体经验的参数自适应机制的优势互补.集体经验存储在如表1所示的大小为H的历史存储器.当初始化时,历史存储器中的内容MR,ri和MF,ri(ri=1,2,…,H)都设置为0.5.10.13245/j.hust.240624.T001表1历史存储器MR和MF存储器索引12…H-1HMRMR,1MR,2…MR,H-1MR,HMFMF,1MF,2…MF,H-1MF,H在第G代,首先从[1,H]中随机选择一个指数ri,然后为每个个体Xi生成进化过程中所需的控制参数Ri,G和Fi,G,具体方法如下Ri,G=c×Ri,G-1+(1-c)×randn(MR,ri,0.1); (4)Fi,G=c×Fi,G-1+(1-c)×randc(MF,ri,0.1), (5)式中:randn(⋅)为生成服从正态分布的随机数函数,若生成的Ri值不在[0,1]范围内,则用最接近生成值的极限值(0或1)来代替;randc(⋅)为生成服从柯西分布的随机数函数,若Fi≥1,则Fi=1,若Fi≤0,则重新生成;c为结合适应性因子,其作用是将个体经验和集体经验结合起来,适应性地分配个体经验和集体经验对生成新个体的贡献度;Ri,G-1和Fi,G-1为个体经验,randn(MR,ri,0.1)和randc(MF,ri,0.1)为集体经验.在第G代中,将能成功进入下一代的试验个体称为成功个体,并且成功个体的Ri值和Fi值分别记录在SR和SF中,其中:SR为第G代所有成功杂交概率R的集合;SF为第G代所有成功缩放因子F的集合.第G代中所有成功个体的Ri值和Fi值都分别记录在SR和SF后,历史存储器中的内容更新如下[19]MR,t,G+1=BWA(SR)    (SR≠∅),MR,t,G    (其他); (6)MF,t,G+1=BWL(SF)    (SF≠∅),MF,t,G    (其他), (7)式中:索引t (1≤t≤H)用于确定历史存储器中要更新的位置,当搜索开始时,t被初始化为1,当插入一个新元素到存储器中时,t就会增加1,当tH时,设置t为1;BWA(⋅)为加权平均值;BWL(⋅)为加权Lehmer均值.在式(6)和(7)中,若第G代的所有试验个体都差于父代个体,即SR=SF=∅,则历史存储器不会更新.从参数生成机制式(4)和(5)中可以看出参数F和R的生成公式由两部分组成:第一部分为“个体经验”部分,表示个体利用个体经验来指导参数更新,有利于对个体自身演化信息的充分利用;第二部分为“集体经验”部分,表示个体利用多个成功个体的集体经验来调整参数变化,有利于种群中的个体生成更优秀的后代.同时,通过结合适应性因子c来调节个体经验和集体经验的贡献度,若c较大则表示参数的更新过程中个体经验的贡献较多,而集体经验的贡献相对较少.通过实验分析,发现在进化过程中切换采用c=0.0和c=0.5时,可以合理地将“个体经验”和“集体经验”结合起来,充分地发挥其各自优点.c的具体设置为:用esmax表示算法最大评价次数,在算法进化的前(1/4)esmax函数评价次数中,若随机生成的[0,1]之间的一个实数≤0.5,则c=0.0,否则c=0.5.在算法进化的后(3/4)esmax函数评价次数中,c的具体设置如下c=0.0   (K1≥K2);0.5   (其他), (8)式中:K1为在当代前的所有代中,当c=0.0时试验个体成功进入下一代的成功率;K2为在当代前的所有代中,当c=0.5时试验个体成功进入下一代的成功率.成功率Km(m=1,2)的更新如下Km=∑n=1G-1wm,n/∑n=1G-1wm,i+∑n=1G-1zm,n, (9)式中:w1和w2分别为在当代前的所有代中,当c=0.0和c=0.5时得到的试验个体成功进入下一代的数量;z1和z2分别为没有成功进入下一代的数量.基于个体经验和集体经验结合的参数自适应机制能够合理地利用个体经验和集体经验,共同指导参数F和R更新.一方面,个体利用自身已有的演化信息来帮助自己生成新的参数值,有利于得到符合个体演化进程的参数值;另一方面,个体利用种群中所有成功个体组成的集体经验来进行参数调整,借助于优秀的集体经验,有利于个体得到更优秀的后代.因此,基于个体经验和集体经验结合的参数自适应机制使得基于个体经验和基于集体经验的参数自适应机制优势互补,进一步提升了算法性能.2.2 改进的变异策略变异策略是差分进化算法的重要组成部分,对差分进化的性能有显著影响.因此,为了提高差分进化的性能,研究者已提出了许多变异策略.其中文献[18]提出的带外部存档的变异策略DE/current-to-pbest/1,因其可以使算法具备不错的寻优能力而受到广泛关注.然而该变异策略中用于调整贪婪性的控制参数是一个固定值,这导致变异策略在整个进化过程中贪婪性保持不变,不利于平衡算法的勘探和开采.通常情况下,算法在进化的前期倾向于勘探,这须要种群具有较强的多样性,因此变异策略的贪婪性应该较小.在进化后期算法倾向于开采,而贪婪性较强的变异策略有利于提高算法开采性,加快算法收敛;因此,变异策略的贪婪性应该随着算法的演化而逐渐增强.基于以上考虑,本研究在文献[18]提出的变异策略中引入动态变化的贪婪性控制参数来改进变异策略,提出了一种新的带外部存档的变异策略DE/current-to-pdbest/1.在该变异策略中,用Po表示当前种群,A表示外部存档,且外部存档大小|A|与种群大小|Po|相同.若父代个体的适应值差于试验个体,则将父代个体保存至外部存档A中.具体的变异策略如下Vi,G=Xi,G+Fi(Xpdbest,G-Xi,G)+Fi(Xr1,G-X˜PA,G), (10)式中:Xr1,G为从当前种群Po中随机选择的不同于Xi,G的个体;X˜PA,G为从Po⋃A并集中随机选择的个体;Xpdbest,G为从当前种群中前pd×Ns的优秀个体中随机选择的个体,参数pd为调整变异策略的贪婪性的控制参数,它不是一个定值,而是基于进化状态(即评价次数)动态变化的,pd=0.4-(es/esmax)3, (11)其中es为当前评价次数.若pd0.02,则pd=0.02.从式(10)和(11)可知:随着评价次数的增加,pd逐渐减小,进而使得变异策略的贪婪性逐渐增强.图1为pd随函数评价次数变化的曲线,直观地反映了pd的变化规律.从图1中可以发现:在进化10.13245/j.hust.240624.F001图1pd随函数评价次数的动态变化初期,pd数值较大,变异策略的贪婪性较小,种群更具多样性,算法可以在更大的范围中寻优,有利于算法勘探;随着评价次数增加,pd逐渐减小,种群中前pd×Ns的优秀个体数量减少,有利于个体向种群中的优秀个体学习,提高算法开采能力.因此,根据进化状态而动态调整的控制参数pd可以较好地平衡算法的勘探和开采.2.3 算法描述与复杂性分析双重经验结合的自适应差分进化算法的伪代码见算法1.在每一代中,双重经验结合的自适应差分进化过程包括四个部分,即基于个体经验与集体经验结合的参数自适应机制、改进的变异策略、交叉和选择.与传统差分进化相比,双重经验结合的自适应差分进化有两个部分与其不同,即参数自适应机制和改进的变异策略.对于参数自适应机制部分,其时间复杂度为O(Ns),而改进的变异策略为O(NsD+Ns).此外,双重经验结合的自适应差分进化中的交叉和选择与传统差分进化相同,时间复杂度为O(NsD+Ns).从前面的分析可知,在每一代中双重经验结合的自适应差分进化的总时间复杂度为O(NsD),而传统差分进化的每一代的总时间复杂度也为O(NsD)[21],因此双重经验结合的自适应差分进化与传统差分进化的时间复杂度相当.算法1 双重经验结合的自适应差分进化算法步骤1 输入种群大小Ns和个体维度D;步骤2 设置迭代次数G=0,初始化种群,初始化MR和MF为0.5,w1,w2,z1,z2为0;步骤3 设置索引计数器t=1;步骤4 设置外部存档A=∅;步骤5 判断是否满足迭代的终止条件,若满足则跳转到步骤17,若不满足则转步骤6;步骤6 设置SR=∅,SF=∅;步骤7 当es<(1/4)esmax时,在[0,1]之间生成一个随机数,若随机数≤0.5,则设置c=0.0,否则设置c=0.5;步骤8 当es≥(1/4)esmax时,则根据式(8)确定c的值;步骤9 根据式(4)和(5)生成Ri,G和Fi,G;步骤10 根据式(10)和(11)产生变异个体Vi,G;步骤11 根据式(2)产生试验个体Ui,G;步骤12 当f(Ui,G)优于f(Xi,G)时,令Xi,G+1为Ui,G并更新w1或者w2,同时将个体对应的Ri,G和Fi,G存入SR和SF,否则令Xi,G+1为Xi,G并更新z1或者z2;步骤13 更新最优个体;步骤14 若外部存档的大小超过|A|,则随机移除个体并满足|A|≤|Po|;步骤15 根据式(6)和(7)更新历史存储器;步骤16 跳转到步骤5;步骤17 输出最优个体.3 DECDE算法性能测试3.1 实验设计与测试函数为了测试双重经验结合的自适应差分进化算法的性能,在CEC2017[20]基准测试集的30个测试函数上进行数值实验,实验分别在维度为30,50,100下进行,终止条件设置为函数评价次数达到D×104.设置双重经验结合的自适应差分进化算法的种群规模为100,历史存储器大小H=100,所有对比算法的参数设置均与原文献保持一致.为了客观评价实验结果,各个算法在每个测试函数上都独立运行51次,并且采用差异显著性水平为0.05的Wilcoxon秩和检验和Friedman检验[22-23]来分析实验结果.实验中首先进行策略有效性分析,即分析基于个体经验与集体经验结合的参数自适应机制和带外部存档的变异策略DE/current-to-pdbest/1的有效性.然后,将双重经验结合的自适应差分进化算法与改进的差分进化算法进行比较.3.2 策略有效性分析为检验改进的参数自适应机制的有效性,设计了双重经验结合的自适应差分进化算法的变体DECDE-1.DECDE-1执行文献[19]中的基于集体经验的参数自适应机制,其他部分与双重经验结合的自适应差分进化算法一致.此外,为验证改进的带外部存档的变异策略DE/current-to-pdbest/1的有效性,设计了双重经验结合的自适应差分进化算法的变体DECDE-2.DECDE-2执行文献[18]提出的带外部存档的变异策略DE/current-to-pdbest/1,其余部分与双重经验结合的自适应差分进化算法一致.表2为在CEC2017基准函数[20]上,双重经验结合的自适应差分进化算法与算法DECDE-1和DECDE-2的Wilcoxon秩和检验[22-23]结果.分析表2可知:在3个维度上,双重经验结合的自适应差分进化算法在整体上均优于对比算法DECDE-1和DECDE-2;同时,随着维度的增加,双重经验结合的自适应差分进化算法能够在更多的测试函数上取得比DECDE-1和DECDE-2更优的结果.这说明与DECDE-1和DECDE-2相比,双重经验结合的自适应差分进化算法在处理复杂问题时具有较大的优势,体现了双重经验结合的自适应差分进化算法两个改进策略的有效性.10.13245/j.hust.240624.T002表2当D=30,50,100时DECDE与DECDE-1和DECDE-2的Wilcoxon秩和检验结果DDECDE vs DECDE-1DECDE vs DECDE-23012(+);0(-);18(≈)5(+);2(-);23(≈)5016(+);0(-);14(≈)6(+);1(-);23(≈)10016(+);1(-);13(≈)11(+);2(-);17(≈)注:“+,-,≈”对应的数据分别表示DECDE算法比对比算法更好、更差、相似的函数个数.3.3 与改进差分进化算法比较为了进一步测试双重经验结合的自适应差分进化算法的性能,将双重经验结合的自适应差分进化算法与6个改进的差分进化算法进行比较与分析,这6个改进的差分进化算法分别为jDE[13],JADE[18],CoDE[24],SHADE[19],SAMDE[25]和ITGDE[26].本实验分别从均值和标准差、非参数检验两个方面进行对比,实验结果如表3~6所示.10.13245/j.hust.240624.T003表3当D=30时DECDE与jDE,JADE,CoDE,SHADE,SAMDE和ITGDE的比较结果算法DECDE算法优于劣于相似于jDE[13]3000JADE[18]2109CoDE[24]14610SHADE[19]14016SAMDE[25]2523ITGDE[26]2613注:表中数据为DECDE算法比对比算法更优、更劣、相似的函数个数.10.13245/j.hust.240624.T004表4当D=50时DECDE与jDE,JADE,CoDE,SHADE,SAMDE和ITGDE的比较结果算法DECDE算法优于劣于相似于jDE[13]3000JADE[18]2415CoDE[24]2064SHADE[19]2208SAMDE[25]2424ITGDE[26]290110.13245/j.hust.240624.T005表5当D=100时DECDE与jDE,JADE,CoDE,SHADE,SAMDE和ITGDE的比较结果算法DECDE算法优于劣于相似于jDE[13]3000JADE[18]19110CoDE[24]2343SHADE[19]1839SAMDE[25]2721ITGDE[26]271210.13245/j.hust.240624.T006表6当D=30,50,100时各算法的Friedman检验排名DDECDESHADE[19]CoDE[24]JADE[18]SAMDE[25]ITGDE[26]jDE[13]301.852.803.053.574.655.087.00501.602.623.553.484.425.556.981001.572.203.873.135.075.206.97由表3可知:当D=30时,双重经验结合的自适应差分进化算法整体上优于其他改进的差分进化算法;具体地,双重经验结合的自适应差分进化算法在所有的测试函数上都优于jDE[13]算法,并且分别在21个和14个测试函数上表现优于JADE[18]算法和SHADE[19]算法,而且双重经验结合的自适应差分进化算法没有表现差于这两个对比算法的情况.与CoDE[24]算法、SMADE[25]算法及ITGDE[26]算法相比,双重经验结合的自适应差分进化算法分别在14个、25个和26个函数上获得了更好的求解精度,并且仅分别在6个、2个和1个测试函数上表现相对较差.此外,表4和表5分别给出了当维度为50和100时,双重经验结合的自适应差分进化算法与对比算法的Wilcoxon检验结果,从实验结果可以发现:函数维度增加后,双重经验结合的自适应差分进化算法在整体上依然取得了最优的表现.综合以上实验分析可以发现,与其他改进的差分进化算法相比较,不管是求解简单问题还是求解复杂问题,双重经验结合的自适应差分进化算法都具有较强的竞争性.分析原因有以下两点:a. 双重经验结合的自适应差分进化算法将个体经验和集体经验合理地结合在一起,同时利用这两种经验来指导重要参数自适应地更新,使算法具有较强的收敛能力和较佳的寻优能力;b. 双重经验结合的自适应差分进化算法将演化进程与变异策略融合在一起,使得变异策略的贪婪性随着算法的演化而逐渐增强,算法由前期的强勘探能力逐渐演变为后期的强开采能力,较好地平衡了算法的勘探能力和开采能力,提高了算法的优化性能.4 结语本研究提出了一种双重经验结合的自适应差分进化算法,该算法引入一种新的基于个体经验与集体经验结合的参数自适应机制,通过个体自身的经验和种群中所有优秀个体的集体经验来指导参数自适应生成,充分利用个体经验和集体经验来引导算法进化,进一步提升了算法的性能;同时,改进的变异策略利用动态参数pd适应性地调整变异策略的贪婪性,将变异策略与算法进化阶段契合在一起,更好地平衡算法的勘探能力和开采能力,从而提升算法性能,实验结果表明双重经验结合的自适应差分进化算法是一种性能较优的优化算法.后续会将个体经验与集体经验结合的思路推广到其他进化算法中,并用于解决工程优化等实际问题.

使用Chrome浏览器效果最佳,继续浏览,你可能不会看到最佳的展示效果,

确定继续浏览么?

复制成功,请在其他浏览器进行阅读