差分进化算法(Differential Evolution)
1.算法提出及思想来源
差分进化算法(Differential Evolution,DE)于1997年由Rainer Storn和Kenneth Price在遗传算法等进化思想的基础上提出的,本质是一种多目标(连续变量)优化算法(MOEAs),用于求解多维空间中整体最优解。
差分进化思想来源即是早期提出的遗传算法(GeneticAlgorithm,GA),模拟遗传学中的杂交(crossover)、变异(mutation)、复制(reproduction)来设计遗传算子。
差分进化算法相对于遗传算法而言,相同点都是通过随机生成初始种群,以种群中每个个体的适应度值为选择标准,主要过程也都包括变异、交叉和选择三个步骤。不同之处在于遗传算法是根据适应度值来控制父代杂交,变异后产生的子代被选择的概率值,在最大化问题中适应值大的个体被选择的概率相应也会大一些。而差分进化算法变异向量是由父代差分向量生成,并与父代个体向量交叉生成新个体向量,直接与其父代个体进行选择。显然差分进化算法相对遗传算法的逼近效果更加显著。
2.算法过程:
DE的群体由突变和选择过程驱动。突变过程,包括突变和交叉操作,这两步操作被设计用于利用或探索搜索空间,而选择过程被用于确保有希望的个体的信息可以进一步利用。
(1)种群初始化:
在解空间中随机均匀产生M个个体,每个个体由n维向量组成
第i个个体的第j维值取值方式如下:
对于群体规模参数M,一般介于 5×n 5 × n 与 10×n 10 × n 之间,但不能少于 4×n 4 × n
(2)变异:
在第g次迭代中,从种群中随机选择3个个体 Xp1(g),Xp2(g),Xp3(g) X p 1 ( g ) , X p 2 ( g ) , X p 3 ( g ) ,且 p1≠p2≠p3≠i p 1 ≠ p 2 ≠ p 3 ≠ i ,生成的变异向量为:
其中 Δp2,p3(g)=Xp2(g)−Xp3(g) Δ p 2 , p 3 ( g ) = X p 2 ( g ) − X p 3 ( g ) 是差分向量, F F 是缩放因子
对于缩放因子,一般是在[0,2]之间选择,通常取0.5
参数 F F 的自适应调整:
将变异算子中随机选择的三个个体进行从优到劣的排序,得到,对应适应度 fb,fm,fw f b , f m , f w ,变异算子改为:
同时,F的取值根据生成差分向量的两个个体自适应变化:
变异策略:
DE/rand/1:Vi(g)=Xp1(g)+F⋅(Xp2(g)−Xp3(g))
D
E
/
r
a
n
d
/
1
:
V
i
(
g
)
=
X
p
1
(
g
)
+
F
·
(
X
p
2
(
g
)
−
X
p
3
(
g
)
)
DE/best/1:Vi(g)=Xbest(g)+F⋅(Xp1(g)−Xp2(g))
D
E
/
b
e
s
t
/
1
:
V
i
(
g
)
=
X
b
e
s
t
(
g
)
+
F
·
(
X
p
1
(
g
)
−
X
p
2
(
g
)
)
DE/current to best/1:Vi(g)=Xi(g)+F⋅(Xbest(g)−Xi(g))+F⋅(Xp1(g)−Xp2(g))
D
E
/
c
u
r
r
e
n
t
t
o
b
e
s
t
/
1
:
V
i
(
g
)
=
X
i
(
g
)
+
F
·
(
X
b
e
s
t
(
g
)
−
X
i
(
g
)
)
+
F
·
(
X
p
1
(
g
)
−
X
p
2
(
g
)
)
DE/best/2:Vi(g)=Xbest(g)+F⋅(Xp1(g)−Xp2(g))+F⋅(Xp3(g)−Xp4(g))
D
E
/
b
e
s
t
/
2
:
V
i
(
g
)
=
X
b
e
s
t
(
g
)
+
F
·
(
X
p
1
(
g
)
−
X
p
2
(
g
)
)
+
F
·
(
X
p
3
(
g
)
−
X
p
4
(
g
)
)
DE/rand/2:Vi(g)=Xp1(g)+F⋅(Xp2(g)−Xp3(g))+F⋅(Xp4(g)−Xp5(g))
D
E
/
r
a
n
d
/
2
:
V
i
(
g
)
=
X
p
1
(
g
)
+
F
·
(
X
p
2
(
g
)
−
X
p
3
(
g
)
)
+
F
·
(
X
p
4
(
g
)
−
X
p
5
(
g
)
)
(3)交叉:
其中
cr∈[0,1]为交叉概率
c
r
∈
[
0
,
1
]
为
交
叉
概
率
参数
cr
c
r
的自适应调整:
其中
fi
f
i
是个体
Xi
X
i
的适应度,
fmin
f
m
i
n
与
fmax
f
m
a
x
分别是当前种群中最差和最优个体的适应度,
f¯
f
¯
是当前种群适应度平均值,
crl
c
r
l
和
cru
c
r
u
分别是
cr
c
r
的下限与上限,一般
crl=0.1,cru=0.6
c
r
l
=
0.1
,
c
r
u
=
0.6
(4)选择:
对于每个个体, Xi(g+1) X i ( g + 1 ) 要好于或持平于 Xi(g) X i ( g ) ,通过变异,交叉,选择达到全部最优。
伪代码: