DE(Differential Evolution)算法
A. 基本算法原理
DE算法仍然是EA算法的一种,所以在学习DE算法之前,先让我们复习一下EA(Evolution Algorithm)算法的流程图:
在开始进行具体的流程介绍之前,先让我们来定义一些东西
Solution
根据问题的维度D,我们用一个D维的向量来表示为一个Solution
需要注意的是,每一个维度都应该有自己的上界和下界
Population
我们将固定数量(NP)个Solution打包起来,这样就形成了一个Population
B. 流程详解
1. 初始化
每个Solution中每一个维度的值都初始化为该维度上下限中的随机值,公式为
x i , j , 0 = M i n j + r a n d i , j [ 0 , 1 ] ⋅ ( M a x j − M i n j ) x_{i,j,0}=Min_{j}+rand_{i,j}\left[ 0,1 \right]\cdot \left( Max_{j}-Min_{j} \right) xi,j,0=Minj+randi,j[0,1]⋅(Maxj−Minj)
这里的i是Solution的序号、j是维度序号、0是第0代
2. 突变
对于每一个Solution X i , G X_{i,G} Xi,G,从同代中随机选择其它3个Solution X r 1 i , G 、 X r 2 i , G 、 X r 3 i , G X_{r_{1}^{i},G}、X_{r_{2}^{i},G}、X_{r_{3}^{i},G} Xr1i,G、Xr2i,G、Xr3i,G来计算这个Solution的Mutant vector V i , G V_{i,G} Vi,G,公式如下
V i , G = X r 1 i , G + F ⋅ ( X r 2 i , G − X r 3 i , G ) V_{i,G}=X_{r_{1}^{i},G}+F\cdot(X_{r_{2}^{i},G}-X_{r_{3}^{i},G}) Vi,G=Xr1i,G+F⋅(Xr2i,G−Xr3i,G)
i i i是正在处理的Solution的序号,由于不同的Solution所使用到的三个随机Solution不同,因此打上了上标用以提醒
G G G是当前的代数
F F F是比例因子(Scaling factor),其取值为(0,1.5)的常数
3. 重组
有两种重组方式,但都离不开 C r Cr Cr,它是该维度变量是否更新的依据,这个值是预先设定好的
1. Binomial/Uniform Crossover
公式如下
u i , j , G = { v i , j , G , i f ( r a n d i , j [ 0 , 1 ] ≤ C r o r j = j r a n d ) x i , j , G , o t h e r w i s e u_{i,j,G}=\left\{ \begin{aligned} v_{i,j,G}&,&& if\left( rand_{i,j}\left[ 0,1 \right]\le{C}r\quad or\quad j=j_{rand} \right) \\ x_{i,j,G}&,&& otherwise \end{aligned}\right. ui,j,G={
vi,j,Gxi,j,G,,if(randi,j[0,1]≤Crorj=jrand)otherwise
u i , j , G u_{i,j,G} ui,j,G是经过重组之后生成的新的Solution U i , G U_{i,G} Ui,G在 j j j位置处的值
v i , j , G v_{i,j,G} vi,j,G是经过突变之后生成的Mutant vector V i , G V_{i,G} Vi,G在 j j j位置处的值
x i , j , G x_{i,j,G} xi,j,G是原Solution X i , G X_{i,G} Xi,G在 j j j位置处的值
j r a n d = r a n d [ 0 , D ] j_{rand}=rand[0,D] jrand=rand[0,D],为了避免 C r Cr Cr太小,我们引入该值,来随机一些位置,强制它们发生改变
2. Exponential(two-point modulo) Crossover
这里需要先引入两个值 n 、 L n、L n、L, n n n是直接随机得到的, L L L需要进行一些计算,这里给了 L L L的伪代码
L=0;
DO
{
L=L+1;
}WHILE((rand[0,1]<=Cr)AND(L<D))
n n n确定了Crossover的起点, L L L确定了Crossover的终点
Crossover的公式如下
u i , j , G = { v i , j , G , f o r j = ⟨ n ⟩ D , ⟨ n + 1 ⟩ D , . . . , ⟨ n + L − 1 ⟩ D x i , j , G , f o r a l l o t h e r j ∈ [ 1 , D ] u_{i,j,G}=\left\{ \begin{aligned} v_{i,j,G}&,&& for\: j=\langle n\rangle _{D},\langle n+1\rangle _{D},...,\langle n+L-1\rangle _{D} \\ x_{i,j,G}&,&& for\; all\; other\; j\in [1,D] \end{aligned}\right. ui,j,G={
vi,j,G