差分演化算法在连续优化问题中的应用

差分演化算法在连续优化问题中的应用

1. 算法概述

差分演化算法(Differential Evolution,DE)是由Storn等人于1995年为求解切比雪夫多项式提出的,一种以种群为基础的全局启发式搜索技术,具有易于实现、全局优化性能好和收敛性好等特点。该算法和其它演化算法一样,是一种模拟生物进化的随机模型,重要步骤包括初始化、变异交叉和选择,基本思路为:先随机生成一个初始种群,然后计算种群中每个个体的适应度函数值,在此基础上使用选择算子、交叉算子和变异算子等进行迭代,选出最优解成为新一代,反复迭代直至满足终止条件。

2. 算法思想

第一步 初始化种群:设置初始状态种群规模为NP,最大迭代次数为G,交叉因子为CR,缩放因子为F,求解问题的自变量维数为D。
第二步 评估种群个体:计算种群中每一个个体Xi,j的适应度函数值。
第三步 判断:判断是否满足终止条件,满足跳至第七步,否则进行第四步。
第四步 变异:对于种群种每一个个体Xi,j,随机生成三个彼此不同的整数r1,r2,r3∈{1,2, … ,NP},且i与r1,r2,r3也不同,由Vi,t=Xr1,t+F(Xr2,t -Xr3,t)生成变异个体。
第五步 杂交:杂交操作的对象是变异个体与目标个体,具体流程为:先利用randi([1,D],1,1)随机成生一个整数,通过如图1所示式子进行操作,至少保证一位基因来自变异个体。图1  杂交
第六步 选择:采用“贪婪选择”策略,由适应值比较进行选择。
第七步 终止:种群达到最大迭代次数或其他终止条件,输出最优解。

3. 测试函数

选择典型单多峰函数对差分演化算法不同参数情况进行分析,以此优化参数选择,找出最佳参数,测试函数如表1所示。
差分演化算法在连续优化问题中的应用_第1张图片
采用上述函数进行测试分析,并将DE算法主要参数优化进行对比,通过测试发现,测试函数的维数为7时差异比较明显,便于下一步参数的调整。

4. 测试结果

在测试过程中,我选择了9组参数进行本次测试,每个函数执行10次,取其均值、最大值、最小值和方差四项数据,参数设定根据前面的实验结果调整方向,截止条件设置为演化50代,结果如表2,红色为最优解,绿色为次优解。
差分演化算法在连续优化问题中的应用_第2张图片

在处理5种函数优化问题性能最优的组的算法收敛图如下

  • H组在处理Sphere函数算法收敛图
    差分演化算法在连续优化问题中的应用_第3张图片
  • I组在处理Schwefel函数算法收敛图
    差分演化算法在连续优化问题中的应用_第4张图片
  • I组在处理Rosenbrock函数算法收敛图
    差分演化算法在连续优化问题中的应用_第5张图片
  • G组在处理Ackley函数算法收敛图
    差分演化算法在连续优化问题中的应用_第6张图片
  • F组在处理Rastrigrin函数算法收敛图
    差分演化算法在连续优化问题中的应用_第7张图片

5. 结果分析

从目前已做的实验结果上来看,各组函数所对应的最优解的参数各不相同,下面将从具体函数针对最优解以及次优解进行分析:

  • Sphere函数
    由图可知,其函数有唯一一个全局最小值,没有较多的局部最优干扰,因此为了加快收敛速度,可以确定交叉因子范围为[0.6,0.8];由于不必控制差分向量对其进行较大扰动,从而跳出局部最优,且图5-1可知,差分演化算法在第10代基本将结果确定在100以内,此时其需要的是局部精细化搜索,所以缩放因子F∈[0,0.5]。
    因此可以确定CR∈[0.6,0.8],F∈[0,0.5],结合D、E、G组结果发现其值在缩放因子取值为0.3时取得结果较为理想,随着交叉因子取值升高,其结果接近最优,因此交叉因子的取值仍有提升空间,通过进一步实验,确定Sphere函数在迭代次数为50的前提下,其种群规模为30,交叉因子为0.6,缩放因子为0.3时取得最优解。

  • Schwefel函数
    由图可知,其梯度方向不会沿着轴线方向变化,同Sphere函数一样,也是有唯一一个全局最小值,无较多的局部最优干扰,因此,为了加快收敛速度,可确定CR∈[0.6,0.8],F∈[0,0.5],结合E、G、H组实验结果,发现其缩放因子值为0.3时取值较为理想,其值随着交叉因子CR取值升高而降低,因此朝着升高CR参数方向进行试验,通过进一步试验,确定Schwefel函数在迭代次数为50的前提下,其种群规模为30,交叉因子为0.7,缩放因子为0.3时取得最优解。

  • Rosenbrock函数
    由图可知,其全局最小值位于一个狭窄的抛物线谷中,其收敛到最小值是极其困难的,由于其全局最小值唯一,为所有维度取值全为1时取得,少有局部最优值干扰,因此参数试探方向同前面两组一致。
    结合G、H两组结果发现,其值随着交叉因子的增大逐步减小,因此确定I组参数,通过进一步实验,确定Rosenbrock函数在迭代次数为50的前提下,其种群规模为30,交叉因子为0.7,缩放因子为0.3时取得最优解。

  • Ackley函数
    由图可知,其全局最小值位于所有维度均为0的情况,少有局部最优值干扰,其参数确定过程与前几组类似,但其最优解种群规模为50。
    通过进一步实验发现,E组种群规模为30时其自用时间0.533s,均值为0.54147,G组种群规模为50时其自用时间0.761s,均值为0.44275。在数据上,G组领先22.297%,但在时间上,E组领先42.777%。因此,依靠种群规模来提升适应值是有时间代价的,在此次实验中,G组虽然适应值较为领先,但相对而言还是E组性能够好。

  • Rastrigrin函数
    由图可知,其函数增加了一个余弦调制传递函数来产生频繁的局部最小值。在该情况下,要考虑适当增加F来进行局部最优值的跳出,由于上述仅做了9组参数,所以对该函数的考虑不是很到位,仅得出在此9种情况下其最佳均值为13.7553,在撰写本次报告的过程中,我又针对该函数做了几组数据,我将种群规模保持30不变,交叉因子保持0.5,控制缩放因子在[0.6,0.8]范围内变化,其值始终要比F组所得13.7553要大,局部最佳情况是缩放因子取0.6时,其均值为25.0707。
    因此,该函数根据实际参数数据可知,确定Rastrigrin函数在迭代次数为50的前提下,其种群规模为30,交叉因子为0.5,缩放因子为0.2时取得最优解。

6. 总结

针对差分演化算法解决连续优化问题,要针对函数进行具体分析,确定参数的选择方向,如本次选取的前4个函数,其局部最优解较少,因此可以选择缩放因子较小,增加其局部精细化搜索能力,当局部最优解较多时,就要思考适当增加缩放因子,增大差分向量的扰动,有利于跳出局部最优;针对交叉因子亦是如此,交叉因子越大,有利于加速收敛,但同时也容易陷入局部最优;对于种群规模也有一定的限制,其值过大时,会降低收敛速度,也会造成时间成本的增加,如本次实验中的Ackley函数中E组与G组。
因此,在种群规模、缩放因子、交叉因子的选择上,首先要根据函数的图像有一个初步的判断,然后在此范围内进行参数调整,逐步试探,在确定范围内找到最优解后,在其反方向找几组值进行验证,如本次课程实验的Rastrigrin函数,按理论来说其F值应在[0.8,1],但通过实际验证,其在F=0.2时取得最优解。

你可能感兴趣的:(智能优化)