草庐IT

关于差分进化算法(Differential Evolution)

武科大许志伟 2023-06-06 原文

关于差分进化算法(Differential Evolution)

觉得有用的话,欢迎一起讨论相互学习~

  • 最近因为论文和审稿等综合因素的影响,决定对DE进行多一些研究,发现原先自己的了解太肤浅了发现了不少非常经典和实用的参考文献以及论述

  • 包括但不限于以下专家和教授的文章
    [I] 差分演化算法的理论与应用 [M] 熊盛武,胡中波,苏清华
    [II] S. Das and P. N. Suganthan, “Differential Evolution: A Survey of the State-of-the-Art,” IEEE Transactions on Evolutionary Computation, vol. 15, no. 1, pp. 4–31, Feb. 2011, doi: 10.1109/TEVC.2010.2059031.
    [III] A. K. Qin, V. L. Huang, and P. N. Suganthan, “Differential Evolution Algorithm With Strategy Adaptation for Global Numerical Optimization,” IEEE Trans. Evol. Computat., vol. 13, no. 2, pp. 398–417, Apr. 2009, doi: 10.1109/TEVC.2008.927706.

  • 差分进化算法最具有特色的是它的自适应变异操作,在演化的初期阶段,因为种群中个体的差异较大,因此用来作为变异扰动的差向量也较大,个体的扰动就较大,有利于算法的全局搜索;随着演化的进行,当算法趋于收敛的时候,种群中个体的差异随之较小,因此用来变异扰动的差向量也随之自适应地变小,较小的扰动有利于局部搜索。正是由于这种简单又独具特色的变异操作有效地平衡了差分演化算法的全局搜索能力和局部搜索能力。值得注意的是,差分进化算法的变异操作对于搜索空间是不封闭的,即变异后得到的捐助向量有可能溢出搜索空间。

  • 差分演化算法仅有三个经验控制参数,即种群规模N,变异因子F和交叉概率CR,算法的表现对于参数的设置是敏感的,针对其中两个关键控制参数F和CR,已经研究出了较多简单有效的自适应控制方法。

  • 算子的搜素能力可以分为全局搜索和局部搜索能力,全局搜索能力可由种群的多样性反映,种群的多样性又可由种群的方差反映,沿着这一研究思路,Zaharie应用基于统计量的方法从理论上研究了差分演化算法的算子搜索机理。

Mutation with Difference Vectors

  • 生物学上,“突变(mutation)”是指染色体基因特征的突变。然而,在进化计算范式的背景下,突变也被视为随机元素的变化或扰动。在DE文献中,来自当前世代的亲本载体称为目标载体 (target vector),通过差分突变操作获得的突变载体称为供体载体(donor vector),最后通过将供体与目标载体重组形成的后代称为试验载体(trial vector)。在一种最简单的DE突变形式中,为了从当前种群中为每个第i个目标向量创建供体向量,还需要另外三个不同的参数向量,比如 X ⃗ r 1 i , X ⃗ r 2 i , X ⃗ r 3 i \vec{X}_{r^i_1},\vec{X}_{r^i_2},\vec{X}_{r^i_3} X r1i,X r2i,X r3i是从当前种群中随机采样的。索引 r 1 i , r 2 i , r 3 i r^i_1,r^i_2,r^i_3 r1i,r2i,r3i是从范围[1,NP]中随机选择的互斥整数,它们也不同于基向量索引i。这些索引对于每个突变向量随机生成一次。现在,这三个向量中任意两个向量的差按标量F(通常位于区间[0.4,1])缩放,并将缩放后的差加到第三个向量上,我们从那里获得供体向量 V ⃗ i , G \vec{V}_{i,G} V i,G。我们可以将过程表示为
    V ⃗ i , G = X ⃗ r 1 i , G + F ⋅ ( X ⃗ r 2 i , G − X ⃗ r 3 i , G ) ( 3 ) \vec{V}_{i, G}=\vec{X}_{r_1^i, G}+F \cdot\left(\vec{X}_{r_2^i, G}-\vec{X}_{r_3^i, G}\right) (3) V i,G=X r1i,G+F(X r2i,GX r3i,G)3

  • 决策空间示意图

DE Family of Storn and Price

  • DE中的突变是最重要的组成部分,上一节的公式使用随机选择的向量 X ⃗ r 1 i \vec{X}_{r^i_1} X r1i和带权值的差向量F*( X ⃗ r 2 i − X ⃗ r 3 i \vec{X}_{r^i_2}-\vec{X}_{r^i_3} X r2iX r3i)来扰动基向量。因此,在文献中,上节中使用的特定突变方案成为DE/rand/1,当其与二项式交叉结合使用时,其过程成为DE/rand/1/bin.我们现在可以知道不同的DE方案是如何命名的。上面使用的一般约定是DE/x/y/z,其中DE代表“微分进化”,x代表表示要被扰动的基向量的字符串,y是考虑扰动x的差向量的数量,z代表所使用的交叉类型(exp:指数;bin:二项式) Storn和Price[74]、[75]提出的其他四种不同突变方案总结如下
  • 索引ri1、ri2、ri3、ri4和ri5是从范围[1,NP]中随机选择的整数,并且都不同于基本索引i。这些索引对于每个供体向量随机生成一次。缩放因子F是用于缩放差向量的正参数。 X ⃗ b e s t , G \vec{X}_{best,G} X best,G 是种群中G代具有最佳适应度值(如果是最小化问题就是具有最低目标函数值)的最佳个体。注意,创建供体向量的一些策略可能是突变的重组个体。例如,(8)中供体向量即是一个两向量重组个体 X ⃗ i , G + F ⋅ ( X ⃗ best  , G − X ⃗ i , G ) \vec{X}_{i, G}+F \cdot\left(\vec{X}_{\text {best }, G}-\vec{X}_{i, G}\right) X i,G+F(X best ,GX i,G)

[74] K. Price, R. Storn, and J. Lampinen, Differential Evolution—A Practi-cal Approach to Global Optimization. Berlin, Germany: Springer, 2005.
[75] K. V . Price, “An introduction to differential evolution,” in New Ideas in Optimization, D. Corne, M. Dorigo, and V . Glover, Eds. London,U.K.: McGraw-Hill, 1999, pp. 79–108.
[92] R. Storn and K. Price, “Differential evolution: A simple and efficient heuristic for global optimization over continuous spaces,” J. Global Optimization, vol. 11, no. 4, pp. 341–359, 1997.

  • Storn和Price[74],[92]建议了总共十种不同的DE工作策略,以及将这些策略应用于任何给定问题的一些指南。这些策略源自上述五种不同的DE突变方案。每种突变策略都与“指数”型交叉或“二项式”型交叉相结合。这产生了总共5×2=10个DE策略。事实上,许多其他线性向量组合可以用于突变。一般来说,在(3)、(7)–(10)中所述的方法中,没有一种单一突变方法是最适合所有问题的。然而,各种突变方案需要进一步研究,以确定它们在何种情况下表现良好,以及在何种问题上产生较差的结果。MezuraMontes等人在这方面开展了一些初步工作,他在[56]中对13个基准问题的测试套件中的8个不同DE方案进行了经验比较。作者考虑了一种有趣的突变方案,称为DE/rand/2/dir[26],该方案结合了目标函数信息,以如下方式指导供体的方向:

V ⃗ i , G = X ⃗ r 1 , G + F 2 ⋅ ( X ⃗ r 1 , G − X ⃗ r 2 , G − X ⃗ r 3 , G ) \vec{V}_{i, G}=\vec{X}_{r_1, G}+\frac{F}{2} \cdot\left(\vec{X}_{r_1, G}-\vec{X}_{r_2, G}-\vec{X}_{r_3, G}\right) V i,G=X r1,G+2F(X r1,GX r2,GX r3,G)

[26] V . Feoktistov and S. Janaqi, “Generalization of the strategies in differential evolution,” in Proc. 18th IPDPS, Apr. 2004, p. 165a.
[56] E. Mezura-Montes, J. V elázquez-Reyes, and C. A. Coello Coello,“A comparative study of differential evolution variants for globaloptimization,” in Proc. Genet. Evol. Comput. Conf., 2006, pp. 485–492

  • 其中 X ⃗ r 1 , G , X ⃗ r 2 , G , X ⃗ r 3 , G \vec{X}_{r_1,G},\vec{X}_{r_2,G},\vec{X}_{r_3,G} X r1,G,X r2,G,X r3,G是独立的个体,并且满足 X ⃗ r 1 , G ≤ X ⃗ r 2 , G , X ⃗ r 3 , G \vec{X}_{r_1,G}\leq{\vec{X}_{r_2,G},\vec{X}_{r_3,G}} X r1,GX r2,G,X r3,G Mezura Montes等人进行的实验表明,基于结果的最终准确性和鲁棒性,DE/best/1/bin(始终使用最佳解决方案来寻找搜索方向,也使用二项式交叉)仍然是最具竞争力的方案,无论要解决的问题的特征如何。[56]中的作者还提到,对于单峰和可分离函数,DE/rand/2/dir取得了相当好的结果。对于单峰和不可分离函数,DE/best/1/bin始终获得最佳性能。该变型也成功地优化了多模态和可分离基准。DE/rand/1/bin和DE/rand/2/dir在这类函数上提供了类似质量的性能。然而,在多模态和不可分离函数上,DE/rand/2/dir仍然最具竞争力,收敛到全局最优的速度稍快。

  • 变异基矢量是best,即是对种群当前最优个体进行变异搜索,该变异方式具有良好局部搜索能力,而不是全局搜索能力,并且能够快速收敛;对于变异基矢量是rand的方式,其变异基底是一个随机选择的个体,该变异方式具有良好的全局搜索能力。

Trial Vector Generation Strategy

  • 依赖于迄今为止发现的最佳解决方案的策略,如“DE/rand to best/1/bin”、“DE/best/1/bin,”和“DE/best/2/bin”,通常具有较快的收敛速度,在解决单峰问题时表现良好。然而,在求解多模态问题时,它们更容易陷入局部最优,从而导致过早收敛。
  • “DE/rand/1/bin”策略通常表现出缓慢的收敛速度和更强的探索(exploration)能力。因此,它通常比依赖于迄今为止发现的最佳解决方案的策略更适合于解决多模态问题。
  • “DE/best/1/bin”策略是“DE/rand to best/1/bin”策略的退化情况,等于1。
  • 两种基于差分向量的策略可能比一种基于差分向量的策略产生更好的扰动。Storn[11]声称,根据中心极限定理,当前种群中所有目标向量对的差向量之和的随机变化略微向高斯方向偏移。在粒子群优化(PSO)环境中[35]也讨论了使用两个基于差向量的策略的优势,而所有两个差向量的总和的统计分布具有钟形,通常被认为是更好的扰动模式。
  • DE/current到rand/1是一种旋转不变策略。当应用于解决多目标优化问题时,其有效性已得到验证[34]。

[11] R. Storn, “On the usage of differential evolution for function optimiza-tion,” in Proc. Biennial Conf. North Amer. Fuzzy Inf. Process. Soc.,Berkeley, CA, 1996, pp. 519–523.
[34] A. Iorio and X. Li, “Solving rotated multi-objective optimization problems using differential evolution,” in Proc. Australian Conf. Artif. Intell., Cairns, Dec. 2004, pp. 861–872
[35] W. J. Zhang and X. F. Xie, “DEPSO: Hybrid particle swarm with differ-ential evolution operator,” in Proc. IEEE Int. Conf. Syst. Man Cybern.,Washington, DC, 2003, pp. 3816–3821

有关关于差分进化算法(Differential Evolution)的更多相关文章

  1. 报告回顾丨模型进化狂飙,DetectGPT能否识别最新模型生成结果? - 2

    导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri

  2. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  3. ruby-on-rails - 关于 Ruby 的一般问题 - 2

    我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia

  4. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

  5. ruby - 关于 Ruby 中 Dir[] 和 File.join() 的混淆 - 2

    我在Ruby中遇到了一个关于Dir[]和File.join()的简单程序,blobs_dir='/path/to/dir'Dir[File.join(blobs_dir,"**","*")].eachdo|file|FileUtils.rm_rf(file)ifFile.symlink?(file)我有两个困惑:首先,File.join(@blobs_dir,"**","*")中的第二个和第三个参数是什么意思?其次,Dir[]在Ruby中有什么用?我只知道它等价于Dir.glob(),但是,我对Dir.glob()确实不是很清楚。 最佳答案

  6. 100个python算法超详细讲解:画直线 - 2

    1.问题描述使用Python的turtle(海龟绘图)模块提供的函数绘制直线。2.问题分析一幅复杂的图形通常都可以由点、直线、三角形、矩形、平行四边形、圆、椭圆和圆弧等基本图形组成。其中的三角形、矩形、平行四边形又可以由直线组成,而直线又是由两个点确定的。我们使用Python的turtle模块所提供的函数来绘制直线。在使用之前我们先介绍一下turtle模块的相关知识点。turtle模块提供面向对象和面向过程两种形式的海龟绘图基本组件。面向对象的接口类如下:1)TurtleScreen类:定义图形窗口作为绘图海龟的运动场。它的构造器需要一个tkinter.Canvas或ScrolledCanva

  7. elasticsearch源码关于TransportSearchAction【阶段三】 - 2

    1.回顾.TransportServicepublicclassTransportServiceextendsAbstractLifecycleComponentTransportService:方法:1publicfinalTextendsTransportResponse>voidsendRequest(finalTransport.Connectionconnection,finalStringaction,finalTransportRequestrequest,finalTransportRequestOptionsoptions,TransportResponseHandlerT>

  8. 关于Qt程序打包后运行库依赖的常见问题分析及解决方法 - 2

    目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'

  9. ruby - 在 Ruby 中实现 Luhn 算法 - 2

    我一直在尝试用Ruby实现Luhn算法。我一直在执行以下步骤:该公式根据其包含的校验位验证数字,该校验位通常附加到部分帐号以生成完整帐号。此帐号必须通过以下测试:从最右边的校验位开始向左移动,每第二个数字的值加倍。将乘积的数字(例如,10=1+0=1、14=1+4=5)与原始数字的未加倍数字相加。如果总模10等于0(如果总和以零结尾),则根据Luhn公式该数字有效;否则无效。http://en.wikipedia.org/wiki/Luhn_algorithm这是我想出的:defvalidCreditCard(cardNumber)sum=0nums=cardNumber.to_s.s

  10. Ruby 斐波那契算法 - 2

    下面是我写的一个计算斐波那契数列中的值的方法:deffib(n)ifn==0return0endifn==1return1endifn>=2returnfib(n-1)+(fib(n-2))endend它工作到n=14,但在那之后我收到一条消息说程序响应时间太长(我正在使用repl.it)。有人知道为什么会这样吗? 最佳答案 Naivefibonacci进行了大量的重复计算-在fib(14)fib(4)中计算了很多次。您可以将内存添加到您的算法中以使其更快:deffib(n,memo={})ifn==0||n==1returnnen

随机推荐