差分进化算法及其变体:从基础到自适应优化(DE,JADE,L-SHADE)

差分进化算法及其变体:从基础到自适应优化

一、引言

差分进化算法(Differential Evolution, DE)自1995年由Storn和Price提出以来,已成为解决连续空间优化问题的经典方法。其核心思想是通过种群个体间的差异向量进行变异、交叉和选择操作,逐步逼近最优解。然而,传统DE的固定参数策略(如固定缩放因子 F F F和交叉概率 C R CR CR)限制了其在复杂问题中的性能。为突破这一局限,研究者提出了多种自适应变体,其中JADE(自适应差分进化算法)和L-SHADE(带线性种群规模缩减的SHADE)表现尤为突出。本文将系统介绍DE的基本原理、核心变体及其关键改进,并结合案例与代码演示其实现。


二、差分进化算法基础

2.1 算法框架

DE的核心流程包括:

  1. 初始化:随机生成初始种群 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]
  2. 变异:对每个个体 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(xr2xr3)
    其中 r 1 , r 2 , r 3 r1, r2, r3 r1,r2,r3为随机选择的不同个体, F F F为缩放因子。
  3. 交叉:将变异向量 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为随机选择的维度。
  4. 选择:比较 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通过混合变异策略参数自适应机制提升性能:

  1. 变异策略:采用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,gpxi,g)+Fi(xr1,gx~r2,g)
    • x best , g p x_{\text{best},g}^p xbest,gp:随机选择前 p ⋅ N p p \cdot N_p pNp个优秀个体( 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
  2. 参数自适应
    • 参数生成
      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) CRiN(μCR,0.1),FiCauchy(μ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=(1c)μCR+cmeanA(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=(1c)μF+cmeanL(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)=FSFFFSFF2

3.2 L-SHADE算法(2014)

L-SHADE引入历史记忆参数更新线性种群规模缩减

  1. 历史记忆参数
    • 维护历史集 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) FiCauchy(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)=wkSkwkSk2
      权重 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=1D(xi210cos(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.5150
JADE 0.8 ± 0.3 0.8 \pm 0.3 0.8±0.3120
L-SHADE 0.2 ± 0.1 0.2 \pm 0.1 0.2±0.180

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

五、参考文献

  1. 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.
  2. Zhang J, Sanderson A C. JADE: Adaptive Differential Evolution with Optional External Archive[J]. IEEE Transactions on Evolutionary Computation, 2009, 13(5):945-958.
  3. 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通过自适应参数调整、历史记忆机制和种群规模控制,进一步提升了算法的效率和鲁棒性。实际应用中,可根据问题特性选择合适的变体,或结合多种策略以获得更优解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值