zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    对象实例化过程分析
    对象实例化过程分析
    QuickHit游戏
    QuickHit游戏
    java继承向上转型和向下转型和动态绑定
    java继承向上转型和向下转型和动态绑定
    洛谷:P1095 守望者的逃离(贪心+dp)
    Manacher算法-最长回文子串
    numpy array()
    CNN 卷积神经网络结构
  • 原文地址:https://www.cnblogs.com/onenoteone/p/12441768.html
Copyright © 2011-2022 走看看