文章目录

  • 前言
  • 一、差分进化算法描述
  • 二、差分进化算法流程
  • 1.初始化
  • 2.变异
  • 3.交叉
  • 4.选择
  • 5。终结条件
  • 2.流程图
  • 总结

  • 前言

    差分进化算法(Differential Evolution Algorithm,DE)是一种高效的全局优化算法。它也是基于群体的启发式搜索算法,群中的每个个体对应一个解向量。差分进化算法的进化流程则与遗传算法非常类似,都包括变异、杂交和选择操作,但这些操作的具体定义与遗传算法有所不同。(百度百科)

    一、差分进化算法描述

    差分进化算法和遗传算法有些相似,但是比遗传算法简单好实现,但是差分进化算法的变种,或者说变形有很多,大家可以根据具体情况选择。
    差分进化算法也是在现有的解上面,根据一定的办法选择几个解,根据变异公式把这几个解融合成一个变异解,这个过程称为变异;把第i个变异解和第i个旧解的每个参数,跟据一定概率选择选择新解或者旧解的值,称为交叉,形成交叉解;把第i个交叉解和第i个旧解比较,选择较优的解保存作为下一次循环的解,这也是差分进化算法最不同于遗传算法的地方。

    二、差分进化算法流程

    1.初始化

    随机初始化数目为NP的D维参数向量xx(i)表示第i个解,每个解参数可以表示为x(i,j),i=1,2,…,NP,j=1,2,…,D
    解数目NP根据情况选择,一般选取[50,200]。

    2.变异

    对于每个解向量x(i),对应的变异向量v可以表示为:
    v(i)=x(r0)+F*(x(r1)-x(r2))
    r0,r1,r2为属于[1,…,NP]的三个随机数,并且i,r0,r1,r2都不相同,这要求NP必须大于等于4。
    变异算子 F 取值范围为[0,2],F过小可能陷入局部最优,F过大则不容易收敛,一般去[0.4,1]居多。
    边界问题:如果变异以后的值v(i,j)超出了边界,可以随机再选择一个数,或者直接去边界值都是可以的。

    3.交叉

    接下来求交叉向量u,对于u的每个值,有:
    如果 rand()<=CR: u(i,j)=v(i,j)
    如果 rand()>CR : u(i,j)=x(i,j)
    rand()是一个随机数,CR是交叉算子,[0,1],用来控制选择变异向量值还是原来的向量值。

    4.选择

    交叉向量原向量对比,选择较优的那个,这里交叉向量之和对应的原向量对比,也就是对比u(i)和x(i)哪个更优,就选择哪个作为新的解向量,更新向量x,进行下一步。

    5。终结条件

    当最后的解满足条件,或者遍历次数达到最大,则结束,否则重复2到4。

    2.流程图

    总结

    差分进化算法比较简答,容易实现,可修改的地方也不少,比如变异向量选择上面,可以选择x(best)+F*(x(r1)-x(r2)),x(best)是全局最优解。甚至说F*(…)里面的随机参数,可以是四个六个,这些都是差分进化算法的变形。

    来源:银子在学习

    物联沃分享整理
    物联沃-IOTWORD物联网 » 差分进化算法

    发表评论