差分进化算法

原创 2018年04月17日 20:32:02

原文链接:差分进化算法
差分进化算法(Differential Evolution,DE)是一种基于向量的元启发式算法,具有良好的收敛性。DE 变体有很多,并且已经在广泛的学科中得到应用。这里简要介绍基本差分进化及其主要实现细节和变体。讨论了种群方差的基本收敛性。

简介

差分进化(Differential Evolution,DE)是在 1996 年和 1997 年 R.Storn 和 K.Price 的论文中发展起来的[7, 8]。DE 是一种基于向量的元启发式算法,由于其交叉和变异的特点,与模式搜索和遗传算法有一定的相似性。实际上,DE 算法可以看作是对具有显式更新方程遗传算法的进一步发展,使理论分析成为可能。DE 算法是一种具有自组织倾向的随机搜索算法,不使用导数信息。因此,它是一种基于群体的、无导数的方法。此外,DE 使用实数作为解串,因此不需要编码和解码。

与遗传算法一样,d 维搜索空间中的设计参数被表示为向量,并且各种遗传算子对它们的位串进行操作。然而,与遗传算法不同,差分进化对每个组件(或解的每个维度)执行操作。几乎所有的事情都是用向量来完成的。例如,在遗传算法中,突变是在染色体的一个位点或多个位点进行的,而在差异进化中,使用两个随机选择的群体向量的差异向量来对现有向量进行调整。从实现的角度来看,这种向量化突变可以看作是一种更有效的方法。这种扰动是在每个群体向量上进行的,因此可以预期效率更高。类似地,交叉也是基于向量的染色体或向量段的分支交换。

除了使用变异和交叉作为差分算子外,DE 还具有显式的更新方程。这也使得实现和设计新的变体变得简单明了。

差分进化

对于具有 d 个参数的 d 维优化问题,首先生成具有 n 个解向量的种群。我们有 xi,其中 i=1,2,...,n。对第 t 代的解 xi,我们使用常规符号记为:

(1)xit=(x1,it,x2,it,...,xd,it),

其由 d 维空间中的 d 分量组成。这种向量可以被认为是染色体或基因组。

差分进化包括三个主要步骤:变异、交叉和选择。

通过变异方案进行变异。对于第 t 代的每个向量 xi,我们首先随机选择三个不同向量 xpxqxr(参见
图 1),然后我们通过变异方案产生变异个体(donor vector)

(2)vit+1=xpt+F(xqtxrt),

其中 F[0,2] 是一个参数,通常称为差分权重( differential weight)。这要求种群规模的最小值为 n4。原则上,F[0,2],但实际上,F[0,1] 的方案更有效和稳定。事实上,几乎所有的文献中都使用F(0,1)

Figure 1 Schematic representation of mutation vectors in differential evolution with movement δ=F(xqxr).

从图 1 可以看出,向量 xp 的扰动 δ=F(xqxr) 用于产生变异个体 vi,并且这种扰动是定向的(directed)。

交叉由交叉参数 Cr[0,1] 控制,控制交叉的速率或概率。实际的交叉可以用两种方式进行:二项式(binomial)和指数式(exponential)。二项式方案对 d 个分量中的每一个分量都进行交叉。通过生成服从均匀分布的随机数 ri[0,1]vi 的第 j 个分量被表示为

(3)uj,it+1={vj,iif riCr,xj,itotherwise,j=1,2,...,d.

这样,可以随机地决定是否与变异个体交换某一分量。

在指数方案中,选择变异个体的一段,且该段以具有随机长度为 L 的随机整数 k 开始,该随机整数 k 可以包含多个分量。在数学上,这是随机选择 k[0,d1]L[1,d],我们有

(4)uj,it+1={vj,itfor j=k,...,kL+1[1,d],xj,itotherwise.

由于二项式更易于实现,因此我们将在实现中使用二项式交叉。

选择基本上与遗传算法中使用的相同。我们选择适者(对于最小化问题,选择最小目标函数值)。因此,我们有

(5)xit=1={uit+1if f(uit+1)f(xit),xitotherwise.

在图 2 所示的伪代码中可以看到所有三个组件。这里值得指出的是,使用 J 是为了确保 vit+1xit,这可以增加进化或探索效率。整体搜索效率由两个参数控制:差分权重 F 和交叉概率 Cr。

Figure 2 Pseudo code of differential evolution.

算法变体

大多数研究集中在选择 F、Cr 和 n 以及式 2 的修改。事实上,在生成变异向量时,我们可以使用许多不同的方式来形成式 2,并且这产生了方案的命名约定:DE/x/y/z,其中 x 是变异方案(rand 或 best),y 是差分向量的数量,z 是交叉方案(bin 或 exp)。因此,DE/Rand/1/* 意味着该基本 DE 方案使用随机变异、一个差分向量以及二项式或指数交叉。

基本 DE/Rand/1/Bin 方案由式 2 给出。亦即:

(6)vit+1=xpt+F(xqtxrt),

如果我们用当前最佳 xbest 替换 xpt,我们就有所谓的 DE/Best/1/Bin 方案,

(7)vit+1=xbestt+F(xqtxrt).

我们没有理由不使用三个以上不同的向量。如果我们使用四个不同的向量加上当前的最佳向量,我们就有 DE/Best/2/Bin 方案

(8)vit+1=xbestt+F(xk1t+xk2txk3txk4t).

此外,如果我们使用 5 个不同的向量,那么我们有 DE/Rand/2/Bin 方案

(9)vit+1=xk1t+F1(xk2txk3t)+F2(xk4txk5t),

其中 F1F2 是取值在 [0, 1] 之间的差分权重。显然,为了简单起见,我们也可以取 F1=F2=F

遵循类似的策略,我们可以设计各种方案。 例如,这些变体可以用通用形式写成

(10)vit+1=xk1t+s=1mFs(xk2(s)txk3(s)t),

其中 m=1,2,3,...Fs(s=1,...,m) 为缩放参数。在右侧涉及的向量数为 2m+1。在前面的变体中,m=1 和 m=2 在文献 [9, 14] 有使用。

另一方面,另一种类型的变体使用另外的影响参数 λ(0,1)。例如 DE/rand-to-best/1/* 变体可以写成

(11)vit+1=λxbestt+(1λ)xk1t+F(xk2txk3t),

它引入了一个额外的参数 λ。这种类型的变体也可以用一种通用的形式写成:

(12)vit+1=λxbestt+(1λ)xk1t+Fs=1m(xk2(s)txk3(s)t).

事实上,已经有超过 10 个不同的方案,具体请参看 Price 等人的文献 [9]。

还有其他一些很好的 DE 变体,包括 Brest 等人的差分进化中的自适应控制参数(jDE)[2],自适应 DE(SaDE)[6],使用鹰策略的 DE [11]。

多目标变体也存在。有关详细的综述,请参阅 Das 和 Suganthan [4] 或 Chakraborty [3]。

参数的选择

参数的选择很重要。经验观察和研究都表明参数值应该进行微调 [4, 5, 9]。

缩放因子 F 是最敏感的因子。尽管 F[0,1] 在理论上是可以接受的,但 F(0,1) 在实践中更有效。事实上,F[0.4,0.95] 是一个很好的范围,首选可以是 F[0.7,0.9]

交叉参数 Cr[0.1,0.8] 似乎是一个很好的范围,首选可以使用 Cr=0.5

建议种群规模 n 应取决于问题的维数 d。也就是说,n = 5d 到 10d。由于种群规模可能很大,因此这可能对于高维问题来说是一个缺点。但是,没有理由不先尝试固定值(比如 n = 40 或 100)。

收敛性分析

文献 [4,5,10,12-14] 对收敛特性和差分进化的参数敏感性进行了较为广泛的研究。例如,已经观察到 DE 的性能对缩放因子 F 比 Cr 敏感。又如,Xue 等人 [10] 以式 12 的形式分析了一般变体。得出结论

(13)2mF2+(1λ)2>1,λ(0,1).

他们还指出,λ 应该相当大,以便更好地收敛。

本节其余部分的结果主要基于 Zaharie 的研究 [13, 14]。避免任何基于群体的算法早熟收敛的条件之一是保持群体中的高度多样性 [1]。任何 DE 变体的方差可以使用种群 P={P1,P2,...,Pn} 的 component-based 期望方差 E(var(P)) 来计算。因为我们前面提到的所有变量都是线性的,因此 DE 的期望方差线性依赖于当前种群 X=(x1,...,Xn) 的方差。即

(14)E(var(P))=cvar(X),

其中 c 是常数。

对于基本的 DE/rand/1/* 方案,Zaharie 计算了无选择时种群的方差,得到

(15)E(var(P))=(1+2pmF2pm(2pm)n)var(X),

其中 pm 是与交叉参数 Cr 相关的变异概率

(16)pm={Cr(11d)+1d(binomial crossover),1Crdd(1Cr)(exponential crossover).

如果初始种群为 X(t=0)=X(0),则第 t 代/迭代后的种群方差变为

(17)var(P)=(1+2F2pmpm(2pm)n)tvar(X(0)).

这定义了 F 的临界值

(18)1+2F2pmpm(2pm)n=1,

这使得

(19)Fc=(2pm)n.

因此,如果 F < Fc,则群体方差降低,如果 F > Fc,则群体方差增加。显然,当 F = Fc 时,群体方差将保持不变。

例如,对于二项式交叉 Cr = 0.5,d = 10 情况下,我们有

(20)pm=Cr(11d)+1d=0.5×(1110)+110=0.55.

经验观察表明 F[0.4,0.95],首选 F = 0.9 [4, 5, 9]。或者,对于给定的 pm,我们可以估算 Cr 值

(21)Cr=(pm1d)(11d).

所以,对于适中的 pm=0.5,d=10,我们有

(22)Cr=(0.21/10)(11/10)0.44.

有趣的是,当 d 时,Crpm

显然,这些结果对于基本的 DE/Rand/1/* 是有效的。对于其他变体,公式是相似的,其中一些修改包括参数 λ。

这些理论结果意味着当 var(P) 减小时,DE 算法正在收敛。换句话说,当 var(P)0 时,算法已经收敛。然而,这种收敛可能为时过早,因为收敛的状态可能不是问题真正的全局最优状态。

从前面的公式 17 可以看出,方差或种群多样性在很大程度上也取决于最初的种群数量,这是 DE 的重大缺陷。另外,在处理不可分的非线性函数时可能会出现一些困难。此外,没有足够的证据表明 DE 可以有效地处理组合问题,因为可能难以离散化差分算子和定义有效的邻域 [4, 3, 9]。

实现

与遗传算法相比,差分进化的实现相对简单。 如果使用基于矢量/矩阵的软件包(如 Matlab),则实现变得更加简单。

接下来给出的 Matlab/Octave 实现的简单无约束优化版本。

% Differential Evolution for global optimization
% Programmed by Xin-She Yang @Cambridge University 2008

% The basic version of scheme DE/RAND/1 is implemented
% Usage: de(para) or de;

function [best, fmin, N_iter] = de(para)
    % Default parameters
    if nargin < 1
        para = [10 0.7 0.9];
    end

    n = para(1); % Population >= 4, typically 10 to 25
    F = para(2); % DE parameter - scaling (0.5 to 0.9)
    Cr = para(3); % DE parameter - crossover probability

    % Iteration parameters
    tol = 10^(-5); % Stop tolerance
    N_iter = 0; % Total number of function evaluations

    % Simple bounds
    Lb = [-1 -1 -1];
    Ub = [2, 2, 2];

    % Dimension of the search variables
    d = length(Lb);

    % Initialize the populations/solutions
    for i = 1:n
        Sol(i,:) = Lb + (Ub - Lb).*rand(size(Lb));
        Fitness(i) = Fun(Sol(i,:));
    end
    % Find the current best
    [fmin, I] = min(Fitness);
    best = Sol(I, :)

    % Start the iterations by differential evolution
    while (fmin > tol)
        % Obtain donor vectors by permutation
        k1 = randperm(n); k2 = randperm(n);
        k1sol = Sol(k1,:); k2sol = Sol(k2,:);
        % Random crossover index/matrix
        K = rand(n, d) < Cr;
        % DE/RAND/1 scheme
        V = Sol + F*(k1sol - k2sol);
        V = Sol.*(1 - K) + V.*K;

        % Evaluate new solutions
        for i = 1:n
            Fnew = Fun(V(i,:));
            % If the solution improves
            if Fnew <= Fitness(i)
                Sol(i,:) = V(i,:);
                Fitness(i) = Fnew;
            end
            % Update the current best
            if Fnew <= fmin
                best = V(i,:);
                fmin = Fnew;
            end
        end
        N_iter = N_iter + n;
    end

    % Output/display
    disp(['Number of evaluations: ', num2str(N_iter)]);
    disp(['Best=', num2str(best), ' fmin=', num2str(fmin)]);
end

% Objective function -- Rosenbrock's 3D function
function  z = Fun(u)
    z = (1 - u(1)^2 + 100*(u(2) - u(1)^2)^2 + 100*(u(3) - u(2)^2)^2);
end

参考文献

[1] Beyer HG. On the dynamics of EAs without selection. In: Banzaf W, Reeves C, editors. Foundations of genetic algorithms. San Francisco, CA, USA: Morgan Kaufmann Publishers; 1999. p. 526.

[2] Brest J, Greiner S, Boskovic B, Mernik M, Zumer V. Self-adapting control parameters in differential evolution: a comparative study on numerical benchmark functions. IEEE Trans Evol Comput 2006;10(6):64657.

[3] Chakraborty UK. Advances in differential evolution. Studies in computational intelligence, vol. 143. Heidelberg, Germany: Springer; 2008.

[4] Das S, Suganthan PN. Differential evolution: a survey of the state-of-the-art. IEEE Trans Evol Comput 2011;15(1):431.

[5] Jeyakumar G, Velayutham CS. Convergence analysis of differential evolution variants on unconstrained global optimization functions. Int J Art Intell Appl 2011;2(2):11626.

[6] Qin AK, Huang VL, Suganthan PN. Differential evolution algorithm with strategy adaptation for global numerical optimization. IEEE Trans Evol Comput 2009;13(2):398417.

[7] Storn R. On the usage of differential evolution for function optimization. In: Biennial conference of the North American fuzzy information processing society (NAFIPS); 1996. p. 51923.

[8] Storn R, Price K. Differential evolution: a simple and efficient heuristic for global optimization over continuous spaces. J Global Optimization 1997;11:34159.

[9] Price K, Storn R, Lampinen J. Differential evolution: a practical approach to global optimization. Germany: Springer; 2005.

[10] Xue F, Sanderson AC, Graves RJ. Multiobjective differential evolution: algorithm, convergence analysis and applications. In: Proceedings of congress on evolutionary computation (CEC 2005), Edinburgh, vol. 1. Edinburgh, Scotland: IEEE Publication; 2005. p. 74350.

[11] Yang XS, Deb S. Two-stage eagle strategy with differential evolution. Int J Bio-Inspired Comput 2012;4(1):15.

[12] Zaharie D. A comparative analysis of crossover variants in differential evolution. In: Ganzha M, Paprzycki M, Pilichowski TP, editors. Proceedings of the international multiconferenceon computer science and information technology, October 1517, 2007. Poland: Wisla; 2007. p. 17181. (Polskie Towarzystwo Informatyczne, PIPS, Katowice).

[13] Zaharie D. Influence of crossover on the behavior of the differential evolution algorithm. Appl Soft Comput 2009;9(3):112638.

[14] Zaharie D. Differential evolution: from theoretical results to practical insights. In: Matousek R, editor. Proceedings of the 18th international conference on soft computing, June 2729, Brno. Czech Republic: Brno University of Technology Press; 2012. p. 12631.

本文翻译自:Nature-Inspired Optimization Algorithms. http://dx.doi.org/10.1016/B978-0-12-416743-8.00006-3

版权声明:本作品采用知识共享署名 4.0 国际许可协议进行许可。 https://blog.csdn.net/And_w/article/details/79980288

差分进化算法(Differential Evolution)

差分进化算法(Differential Evolution,DE)和GA,PSO,ACO等进化算法一样,都是基于群体智能的随机并行优化算法,通过模仿生物群体内个体间的合作与竞争产生的启发式群体智能来指...
  • u012176591
  • u012176591
  • 2015年11月21日 23:42
  • 7401

优化算法——差分进化算法(DE)

一、差分进化算法的介绍
  • google19890102
  • google19890102
  • 2014年11月18日 16:33
  • 20043

差分进化算法(Differential Evolution)

差分进化算法(Differential Evolution) 1.算法提出及思想来源 差分进化算法(Differential Evolution,DE)于1997年由Rainer Stor...
  • qq_37423198
  • qq_37423198
  • 2017年09月05日 21:24
  • 3100

差分进化算法DE

算法步骤如下: 初始化 输入进化参数:种群规模NP,个体维度D,交叉因子CR(范围[0,1]),最大进化代数Gm,自变量的上下界 DE利用NP个维数为D的实数值参数向量作为每一代的种群,每...
  • hehainan_86
  • hehainan_86
  • 2014年08月19日 18:32
  • 38732

遗传算法与差分进化算法总结比较

遗传算法的基本原理: 遗传算法是一种基于生物进化原理构想出来的搜索最优解的仿生算法,它是模拟基因重 组与进化的自然过程,把待解决问题的参数编成二进制码或十进制码(也可编成其他进制码)即基因,若干基因组...
  • misayaaaaa
  • misayaaaaa
  • 2017年01月15日 09:25
  • 6553

带约束条件的差分进化算法(python实现)

看这篇文章之前,读者应已经理解差分进化算法。   用python写带约束条件的差分进化的代码时,我参考了别人不带约束条件的代码。我解决的问题如下图所示。      我得到的结果如下     ...
  • Liujing_y
  • Liujing_y
  • 2017年11月03日 17:51
  • 483

遗传算法 差分进化算法 粒子群优化算法区别

一 遗传算法 遗传算法(GA)作为一种经典的进化算法,自 Holland提出之后在国际上已经形成了一个比较活跃的研究领域. 人们对 GA 进行了大量的研究,提出了各种改进算法用于提高算法的收敛速度和精...
  • try_again_later
  • try_again_later
  • 2018年01月17日 15:46
  • 987

自适应差分演化算法方面的Matlab和C++代码及论文

第一个网页(共2个) 点击打开链接 http://www1.osu.cz/~tvrdik/?page_id=18 Algorithms of global optimization and...
  • stereohomology
  • stereohomology
  • 2016年11月16日 21:08
  • 1069

numba版 自适应差分进化算法 速度超快 可以求解约束问题

自适应差分进化算法 求解约束问题 速度超快
  • dabenzi
  • dabenzi
  • 2016年06月13日 19:24
  • 543

一种简单的差分进化算法(DE)的R语言实现

差分进化算法是一种重要的进化算法,自提出差分进化算法以来,形成了很多变种。本文首先用R语言去实现一个简单的差分进化算法,然后通过一个极大化函数的例子说明差分进化算法(DE)的进化迭代过程。     ...
  • zakachen
  • zakachen
  • 2016年06月20日 15:17
  • 1759
收藏助手
不良信息举报
您举报文章:差分进化算法
举报原因:
原因补充:

(最多只允许输入30个字)