• DE-Differential Evolution差分进化算法


    差分进化算法相对于遗传算法而言,相同点都是通过随机生成初始种群,以种群中每个个体的适应度值为选择标准,主要过程也都包括变异、交叉和选择三个步骤,和遗传算法几乎一致流程,只是细微变异选择操作不同。

    不同之处在于遗传算法是根据适应度值来控制父代杂交,变异后产生的子代被选择的概率值,在最大化问题中适应值大的个体被选择的概率相应也会大一些。而差分进化算法变异向量是由父代差分向量生成,并与父代个体向量交叉生成新个体向量,直接与其父代个体进行选择。显然差分进化算法相对遗传算法的逼近效果更加显著

    种群初始化:

    在每个维度的区间内,随机的产生相应初始解

    变异:

    在第g次迭代中,从种群中随机选择23个个体(策略不同有所不同):Xp1(g),Xp2(g),Xp3(g)且p1≠p2≠p3≠i,生成的变异向量为:

    通常还会依据适应度优越,对Xp1(g),Xp2(g),Xp3(g)进行排序,得到最好:Xb,最差Xw,中等Xm,然后这样计算:

    F缩放因子,可以是随机的[0,2]数,也可以按照如下自适应计算:

    其它变异策略:(Xbest当前全局最好)

    交叉:

    其中hi,j是上面变异步骤产生的Hi解的第j维的值,cr为一个取值率,既对第i=1,2,....N维上的值,以<=cr的概率取Hi中的第i维值,以>cr的概率取原先xi的值。最终产生新的解Vi,后面会用有产生的新解Vi,与原先父代解Xi进行对比,淘汰差的。

    cr也可以有自适应计算形式:

    选择:

    既计算适应度/函数值,不失一般性,这里求极小值,f(Vi)<f(Xi)我们就贪心的保留Vi而替换Xi,既Xi的g+1代解Xi(g+1)为Vi(g),否则不变保留:

    附经典伪代码:

    附自己实现的代码:

    https://github.com/425776024/DE/tree/master/src

  • 相关阅读:
    微软不也是从Altair Basic这丑小鸭长成白天鹅吗?
    互联网创业应该如何找到创意
    互联网创业创意养成记1
    安卓CTS官方文档之兼容性方案概览
    跨平台移动应用开发是否真的是一个好选择?
    Ubuntu安装MyEclise16 过程差不多
    Ubantu下安装jdk 教程
    最近出错总结
    使用Eclipse编译运行MapReduce程序 Hadoop2.6.0_Ubuntu/CentOS
    关于最近学习出现的错误,及解决的想法
  • 原文地址:https://www.cnblogs.com/onenoteone/p/12441768.html
Copyright © 2020-2023  润新知