差分进化算法(Differential Evolution)

原博客地址:https://blog.csdn.net/qq_37423198/article/details/77856744

差分进化算法(Differential Evolution)

1.算法提出及思想来源

差分进化算法(Differential Evolution,DE)于1997年由Rainer Storn和Kenneth Price在遗传算法等进化思想的基础上提出的,本质是一种多目标(连续变量)优化算法(MOEAs),用于求解多维空间中整体最优解。

差分进化思想来源即是早期提出的遗传算法(GeneticAlgorithm,GA),模拟遗传学中的杂交(crossover)、变异(mutation)、复制(reproduction)来设计遗传算子。

差分进化算法相对于遗传算法而言,相同点都是通过随机生成初始种群,以种群中每个个体的适应度值为选择标准,主要过程也都包括变异、交叉和选择三个步骤。不同之处在于遗传算法是根据适应度值来控制父代杂交,变异后产生的子代被选择的概率值,在最大化问题中适应值大的个体被选择的概率相应也会大一些。而差分进化算法变异向量是由父代差分向量生成,并与父代个体向量交叉生成新个体向量,直接与其父代个体进行选择。显然差分进化算法相对遗传算法的逼近效果更加显著。

2.算法过程:

这里写图片描述
DE的群体由突变和选择过程驱动。突变过程,包括突变和交叉操作,这两步操作被设计用于利用或探索搜索空间,而选择过程被用于确保有希望的个体的信息可以进一步利用。

(1)种群初始化

在解空间中随机均匀产生M个个体,每个个体由n维向量组成

Xi(0)=(xi,1(0),xi,2(0),xi,3(0),,xi,n(0))i=1,2,3,,MXi(0)=(xi,1(0),xi,2(0),xi,3(0),…,xi,n(0))i=1,2,3,…,M

(2)变异:

在第g次迭代中,从种群中随机选择3个个体Xp1(g),Xp2(g),Xp3(g)Xp1(g),Xp2(g),Xp3(g),生成的变异向量为:

Hi(g)=Xp1(g)+F(Xp2(g)Xp3(g))Hi(g)=Xp1(g)+F·(Xp2(g)−Xp3(g))

变异策略:

DE/rand/1:Vi(g)=Xp1(g)+F(Xp2(g)Xp3(g))DE/rand/1:Vi(g)=Xp1(g)+F·(Xp2(g)−Xp3(g))

(3)交叉:

vi,j={hi,j(g)xi,j(g),rand(0,1)cr,elsevi,j={hi,j(g),rand(0,1)≤crxi,j(g),else

其中cr[0,1]cr∈[0,1]为交叉概率

(4)选择:

Xi(g+1)={Vi(g)Xi(g),f(Vi(g))<f(Xi(g)),elseXi(g+1)={Vi(g),f(Vi(g))
,通过变异,交叉,选择达到全部最优。
伪代码:
这里写图片描述

你可能感兴趣的:(Algorithm)