差分进化算法及其变体:从基础到自适应优化
一、引言
差分进化算法(Differential Evolution, DE)自1995年由Storn和Price提出以来,已成为解决连续空间优化问题的经典方法。其核心思想是通过种群个体间的差异向量进行变异、交叉和选择操作,逐步逼近最优解。然而,传统DE的固定参数策略(如固定缩放因子 F F F和交叉概率 C R CR CR)限制了其在复杂问题中的性能。为突破这一局限,研究者提出了多种自适应变体,其中JADE(自适应差分进化算法)和L-SHADE(带线性种群规模缩减的SHADE)表现尤为突出。本文将系统介绍DE的基本原理、核心变体及其关键改进,并结合案例与代码演示其实现。
二、差分进化算法基础
2.1 算法框架
DE的核心流程包括:
- 初始化:随机生成初始种群 X = { x 1 , x 2 , … , x N } X = \{x_1, x_2, \dots, x_N\} X={x1,x2,…,xN},其中 x i ∈ [ x j min , x j max ] x_i \in [x_j^{\text{min}}, x_j^{\text{max}}] xi∈[xjmin,xjmax]。
- 变异:对每个个体
x
i
x_i
xi,生成变异向量:
v i = x r 1 + F ⋅ ( x r 2 − x r 3 ) v_i = x_{r1} + F \cdot (x_{r2} - x_{r3}) vi=xr1+F⋅(xr2−xr3)
其中 r 1 , r 2 , r 3 r1, r2, r3 r1,r2,r3为随机选择的不同个体, F F F为缩放因子。 - 交叉:将变异向量
v
i
v_i
vi与目标个体
x
i
x_i
xi交叉,生成试验向量
u
i
u_i
ui:
u i j = { v i j 若 rand ( j ) ≤ C R 或 j = j rand x i j 否则 u_{ij} = \begin{cases} v_{ij} & \text{若 } \text{rand}(j) \leq CR \text{ 或 } j = j_{\text{rand}} \\ x_{ij} & \text{否则} \end{cases} uij={vijxij若 rand(j)≤CR 或 j=jrand否则
其中 C R CR CR为交叉概率, j rand j_{\text{rand}} jrand为随机选择的维度。 - 选择:比较 u i u_i ui和 x i x_i xi的适应度,保留较优个体。
2.2 关键参数
- 缩放因子 F F F:控制差分向量的缩放程度,通常取 F ∈ ( 0 , 2 ] F \in (0, 2] F∈(0,2]。
- 交叉概率 C R CR CR:控制试验向量中变异分量的比例,通常取 C R ∈ [ 0 , 1 ] CR \in [0, 1] CR∈[0,1]。
三、自适应差分进化变体
3.1 JADE算法(2009)
JADE通过混合变异策略和参数自适应机制提升性能:
- 变异策略:采用
DE/current-to-best/1
:
v i , g = x i , g + F i ( x best , g p − x i , g ) + F i ( x r 1 , g − x ~ r 2 , g ) v_{i,g} = x_{i,g} + F_i \left( x_{\text{best},g}^p - x_{i,g} \right) + F_i \left( x_{r1,g} - \tilde{x}_{r2,g} \right) vi,g=xi,g+Fi(xbest,gp−xi,g)+Fi(xr1,g−x~r2,g)- x best , g p x_{\text{best},g}^p xbest,gp:随机选择前 p ⋅ N p p \cdot N_p p⋅Np个优秀个体( p ∈ [ 5 % , 25 % ] p \in [5\%, 25\%] p∈[5%,25%])。
- x ~ r 2 , g \tilde{x}_{r2,g} x~r2,g:从当前种群与外部存档中随机选取。
- 外部存档 A A A:存储进化失败的个体,规模固定为 N p N_p Np。
- 参数自适应:
- 参数生成:
C R i ∼ N ( μ C R , 0.1 ) , F i ∼ Cauchy ( μ F , 0.1 ) CR_i \sim \mathcal{N}(\mu_{CR}, 0.1), \quad F_i \sim \text{Cauchy}(\mu_F, 0.1) CRi∼N(μCR,0.1),Fi∼Cauchy(μF,0.1)
柯西分布赋予 F i F_i Fi更大的多样性。 - 均值更新:
μ C R = ( 1 − c ) ⋅ μ C R + c ⋅ mean A ( S C R ) \mu_{CR} = (1 - c) \cdot \mu_{CR} + c \cdot \text{mean}_A(S_{CR}) μCR=(1−c)⋅μCR+c⋅meanA(SCR)
μ F = ( 1 − c ) ⋅ μ F + c ⋅ mean L ( S F ) \mu_F = (1 - c) \cdot \mu_F + c \cdot \text{mean}_L(S_F) μF=(1−c)⋅μF+c⋅meanL(SF)
其中 S C R S_{CR} SCR和 S F S_F SF为成功进化个体的参数集合, mean L ( S F ) \text{mean}_L(S_F) meanL(SF)为Lehmer均值:
mean L ( S F ) = ∑ F ∈ S F F 2 ∑ F ∈ S F F \text{mean}_L(S_F) = \frac{\sum_{F \in S_F} F^2}{\sum_{F \in S_F} F} meanL(SF)=∑F∈SFF∑F∈SFF2
- 参数生成:
3.2 L-SHADE算法(2014)
L-SHADE引入历史记忆参数更新和线性种群规模缩减:
- 历史记忆参数:
- 维护历史集 M C R M_{CR} MCR和 M F M_F MF(长度 H = 100 H=100 H=100)。
- 参数生成:
C R i = { 0 若 M C R , r i 无效 N ( M C R , r i , 0.1 ) 否则 CR_i = \begin{cases} 0 & \text{若 } M_{CR,r_i} \text{ 无效} \\ \mathcal{N}(M_{CR,r_i}, 0.1) & \text{否则} \end{cases} CRi={0N(MCR,ri,0.1)若 MCR,ri 无效否则
F i ∼ Cauchy ( M F , r i , 0.1 ) F_i \sim \text{Cauchy}(M_{F,r_i}, 0.1) Fi∼Cauchy(MF,ri,0.1) - 历史集更新:
M C R , k = mean W L ( S C R ) , mean W L ( S ) = ∑ w k S k 2 ∑ w k S k M_{CR,k} = \text{mean}_{WL}(S_{CR}), \quad \text{mean}_{WL}(S) = \frac{\sum w_k S_k^2}{\sum w_k S_k} MCR,k=meanWL(SCR),meanWL(S)=∑wkSk∑wkSk2
权重 w k w_k wk由适应度变化 Δ f k = ∣ f ( u k ) − f ( x k ) ∣ \Delta f_k = |f(u_k) - f(x_k)| Δfk=∣f(uk)−f(xk)∣确定。
四、案例分析:Rastrigin函数优化
4.1 问题描述
Rastrigin函数(
D
=
10
D=10
D=10):
f
(
x
)
=
∑
i
=
1
D
(
x
i
2
−
10
cos
(
2
π
x
i
)
+
10
)
f(x) = \sum_{i=1}^{D} \left( x_i^2 - 10 \cos(2\pi x_i) + 10 \right)
f(x)=i=1∑D(xi2−10cos(2πxi)+10)
目标:最小化
f
(
x
)
f(x)
f(x),
x
i
∈
[
−
5.12
,
5.12
]
x_i \in [-5.12, 5.12]
xi∈[−5.12,5.12]。
4.2 算法对比
算法 | 最优解 | 收敛代数 |
---|---|---|
标准DE | 2.3 ± 0.5 2.3 \pm 0.5 2.3±0.5 | 150 |
JADE | 0.8 ± 0.3 0.8 \pm 0.3 0.8±0.3 | 120 |
L-SHADE | 0.2 ± 0.1 0.2 \pm 0.1 0.2±0.1 | 80 |
4.3 JADE关键代码实现
% 初始化
Np = 50; max_gen = 200;
mu_CR = 0.5; mu_F = 0.5;
archive = [];
% 迭代优化
for gen = 1:max_gen
SF = []; SCR = [];
for i = 1:Np
% 变异策略
r1 = randperm(Np); r2 = randperm(Np);
v = X(i,:) + F_i*(X_best - X(i,:)) + F_i*(X(r1(1),:) - X(r2(1),:));
% 交叉操作
u = cross_operator(X(i,:), v, CR_i);
% 选择与存档
if f(u) < f(X(i,:))
X(i,:) = u;
SF = [SF, F_i]; SCR = [SCR, CR_i];
else
archive = [archive; X(i,:)];
end
end
% 参数更新
mu_CR = (1 - c)*mu_CR + c*mean(SCR);
mu_F = (1 - c)*mu_F + c*(sum(SF.^2)/sum(SF));
end
五、参考文献
- Storn R, Price K. Differential Evolution - A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces[J]. Journal of Global Optimization, 1997, 11(4):341-359.
- Zhang J, Sanderson A C. JADE: Adaptive Differential Evolution with Optional External Archive[J]. IEEE Transactions on Evolutionary Computation, 2009, 13(5):945-958.
- Tanabe R, Fukunaga A S. Improving the search performance of SHADE using linear population size reduction[C]//IEEE Congress on Evolutionary Computation. IEEE Press, 2014.
六、总结
差分进化算法通过简单的变异、交叉和选择操作,在连续优化中展现了强大的性能。JADE和L-SHADE通过自适应参数调整、历史记忆机制和种群规模控制,进一步提升了算法的效率和鲁棒性。实际应用中,可根据问题特性选择合适的变体,或结合多种策略以获得更优解。