文章目录

  • 综合表现
  • 流程概述
    • 初始化
    • 变异
    • 交叉
    • 选择
  • 算法特点
  • 算法改进
    • 变异算子
    • 种群数量 N P NP NP
    • 缩放因子 F F F和变异率 C r Cr Cr
    • 改进DE排名
  • 发展方向
    • 超参数改进
    • 变异算子改进
    • 应用范围扩展

差分进化算法(Differential Evolution,以下简称 DE)由Storn等人于1995年提出,其最初的设想是用于解决切比雪夫多项式问题,后来发现它也可用于求解复杂优化问题。当前,它已经成为求解 连续变量非线性全局优化问题的最有效方法之一。与遗传算法类似,DE是一种基于种群进化的元启发式算法。

PS:博主的博士课题以改进DE为主。研究过程中,走了很多弯路。以下内容,主要为这些年针对DE的相关总结。希望此文可以帮助朋友们降低了解和认识DE的准入门槛,若真如此,幸甚。若有相关问题,欢迎留言或私信讨论。

综合表现

下表列举了2005-2020年IEEE CEC 单目标参数优化竞赛的前三名优化算法。其中,2005年和2016年未针对算法进行总排名,不参与统计(用N/A表示); 2007年为多目标优化问题,不参与统计(用N/A表示);2009年和2014 年的第二名和第三名算法,未在网站上公布,表中也未列出(用N/A表示)。

上表中的DE算法和改进DE算法用黑体标注。从表中可以看出,DE在求解标准测试算例时,具有较为明显的优势。下图汇总了DE在各届IEEE CEC竞赛中的最优排名及其对应的改进DE。除了2013年排名第4外(图中未标出),DE在其他所有年份的排名都位列前三。在2006和2009等7个年份中,DE取得了第一名的成绩。在最近三年的竞赛中,即2018年、2019年和2020年,DE依然保持着领先的地位。

流程概述

设定优化问题如下:优化变量为 x \bm x x,变量维度为 D D D,表示为
x = ( x 1 , x 2 , . . . , x D ) {{\bm{x}}}=\left( {{x}^{1}},{{x}^{2}},...,{{x}^{D}} \right) x=(x1,x2,...,xD)
x \bm x x的上界 x m a x \bm x_{\rm{max}} xmax​和下界 x m i n \bm x_{\rm{min}} xmin​分别定义为
{ x min ⁡ = ( x min ⁡ 1 , x min ⁡ 2 , . . . , x min ⁡ D ) x max ⁡ = ( x max ⁡ 1 , x max ⁡ 2 , . . . , x max ⁡ D ) \left\{\begin{array}{l} {{\bm{x}}_{\min }}=\left( x_{\min }^{1},x_{\min }^{2},...,x_{\min }^{D} \right) \\ {{\bm{x}}_{\max }}=\left( x_{\max }^{1},x_{\max }^{2},...,x_{\max }^{D} \right) \\ \end{array}\right. {xmin​=(xmin1​,xmin2​,...,xminD​)xmax​=(xmax1​,xmax2​,...,xmaxD​)​
目标函数为最小化某一性能指标
min ⁡ f ( x ) \min \;f\left( {\bm{x}} \right) minf(x)
针对以上的最小化问题,经典DE在求解过程中,一般包含4个步骤:初始化(Initialization)、变异(Mutation)、交叉(Crossover)和选择(Selection)。

初始化

DE的种群可以表示为
x i = ( x i 1 , x i 2 , . . . , x i D ) , i = 1 , 2 , . . . , N P {{\bm{x}}_i} = \left( {x_i^1,x_i^2,...,x_i^D} \right), i=1,2,...,NP xi​=(xi1​,xi2​,...,xiD​),i=1,2,...,NP
其中, N P NP NP是种群大小。

初始化第 i i i个个体 x i , 1 x_{i,1} xi,1​的常用方法为
x i , 1 j = x min ⁡ j + r a n d ( 0 , 1 ) ⋅ ( x max ⁡ j − x min ⁡ j ) , j = 1 , 2 , . . . , D x_{i,1}^{j}=x_{\min }^{j}+\mathrm{rand}\left( 0,1 \right)\cdot \left( x_{\max }^{j}-x_{\min }^{j} \right),j=1,2,...,D xi,1j​=xminj​+rand(0,1)⋅(xmaxj​−xminj​),j=1,2,...,D
其中, r a n d ( 0 , 1 ) \rm{rand}(0,1) rand(0,1)是0~1之间的均匀随机数。

变异

定义 x i , G \bm x_{i,G} xi,G​为第 i i i代种群的第 G G G个个体。 x i , G \bm x_{i,G} xi,G​通过以下的变异算子生成与之对应的变异向量 v i , G \bm v_{i,G} vi,G​
v i , G = x r 1 i , G + F ⋅ ( x r 2 i , G − x r 3 i , G ) {{\bm{v}}_{i,G}}={{\bm{x}}_{r_{1}^{i},G}}+F\cdot \left( {{\bm{x}}_{r_{2}^{i},G}}-{{\bm{x}}_{r_{3}^{i},G}} \right) vi,G​=xr1i​,G​+F⋅(xr2i​,G​−xr3i​,G​)

其中,下标 r 1 i r_1^i r1i​、 r 2 i r_2^i r2i​ 和 r 3 i r_3^i r3i​是随机产生的整数值,范围是1~ N P NP NP,它们的数值互不相同,并且均不等于 i i i。对于每个变异向量,这些下标都只随机产生一次。此处, x i , G \bm x_{i,G} xi,G​被称为 v i , G \bm v_{i,G} vi,G​对应的目标向量, x r 1 i , G \bm{x}_{r_{1}^{i},G} xr1i​,G​为基向量, x r 2 i , G − x r 3 i , G {{\bm{x}}_{r_{2}^{i},G}}-{{\bm{x}}_{r_{3}^{i},G}} xr2i​,G​−xr3i​,G​是差分向量, F F F是缩放因子,范围是0~1。

交叉

交叉算子如下所示,其作用是通过组合 x i , G \bm x_{i,G} xi,G​和 v i , G \bm v_{i,G} vi,G​产生对应的试验向量 u i , G \bm u_{i,G} ui,G​
u i , G j = { v i , G j , if ( j = j rand ) or ( r i j ≤ C r ) x i , G j , otherwise u_{i,G}^{j}=\left\{ \begin{array}{l} v_{i,G}^{j},~~\text{if}\left( j={{j}_{\text{rand}}} \right)\text{or}\left(r_i^j\le Cr \right) \\ x_{i,G}^{j},~~\text{otherwise} \\ \end{array}\right. ui,Gj​={vi,Gj​,  if(j=jrand​)or(rij​≤Cr)xi,Gj​,  otherwise​其中, j rand {j}_{\text{rand}} jrand​是1~ D D D之间的随机整数, r i j = r a n d ( 0 , 1 ) r_i^j=\mathrm{rand}(0,1) rij​=rand(0,1) , C r Cr Cr是交叉概率,范围是0~1。该方式下,至少存在1维变量从 v i , G \bm v_{i,G} vi,G​到 u i , G \bm u_{i,G} ui,G​。下图为生成试验向量 u i , G \bm u_{i,G} ui,G​的示意图。

选择

生成 u i , G \bm u_{i,G} ui,G​后,计算和比较 u i , G \bm u_{i,G} ui,G​和 x i , G \bm x_{i,G} xi,G​对应的目标函数,目标函数较小的对应向量可以保留到下一代
x i , G + 1 = { u i , G , f ( u i , G ) ≤ f ( x i , G ) x i , G , otherwise {{\bm{x}}_{i,G+1}}=\left\{ \begin{array}{l} {{\bm{u}}_{i,G}},f\left( {{\bm{u}}_{i,G}} \right)\le f\left( {{\bm{x}}_{i,G}} \right) \\ {{\bm{x}}_{i,G}},\ \text{otherwise} \\ \end{array} \right. xi,G+1​={ui,G​,f(ui,G​)≤f(xi,G​)xi,G​, otherwise​

算法特点

相比其他元启发式算法,DE的主要特点在于它使用差分向量来指导当前种群的进化方向。为了直观地展示差分向量(变异向量)的变化特点,本节结合经典DE求解2维Schwefel函数的优化实例,进行详细描述。

下图为2维Schwefel函数的3-D曲面图,其中 x x x和 y y y的范围均为-500~500。从图上可知,该函数中除了全局最优解外,还包含数量众多的局部最优解。

接下来,使用刚刚介绍的经典DE进行求解。设置种群大小 N P = 30 NP=30 NP=30,缩放因子 F = 0.5 F=0.5 F=0.5,交叉概率 C r = 0.1 Cr=0.1 Cr=0.1。下图记录了不同代数时的变异向量末端点的所有可能位置。在初始化种群后,虽然种群大小 N P NP NP仅为30,但是变异向量几乎可以覆盖所有的搜索空间。此时,个体差异较大, DE可以在较大范围内进行搜索,因此这个阶段的全局探索能力较强;12代时,优化过程逐渐摒弃中心位置,向边界附近搜索;19代时,搜索范围聚集到4个角落;23代时,优化区间已经减至2个小范围;25代时,只剩下一个搜索区域。此时,个体间差异也变小,局部开发能力更强,在40代时,基本收敛。因此,在优化过程中,差分向量可以利用个体差异的变化,自适应地调整DE的全局探索和局部开发能力,从而保证DE具有非常好的综合优化性能。

算法改进

经典DE虽然为求解全局优化问题提供了一种可行的途径,但是它还存在一些不足,比如易陷入局部最优、出现早熟收敛或搜索停滞等现象。为了提升DE的全局优化性能,许多学者致力于改进DE的相关工作。总的来说,改进DE的方法可以分别或同时从以下4个方面入手,包括:变异算子、种群大小 N P NP NP、缩放因子 F F F和交叉概率 C r Cr Cr。

变异算子

为了区分不同类型的变异算子,一般使用“DE/x/y”对其简述。其中, x x x表示基向量, y y y表示差分向量。经典DE中的变异算子通常被标记为DE/rand/1。此后,学者们又提出了DE/best/1、DE/rand/2、DE/best/2和DE/current-to- p p pbest/1等变异算子。当前,DE/current-to- p p pbest/1变异算子是各种改进DE的最常用算子之一,其表达式如下
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 ) \boldsymbol{v}_{i, G}=\boldsymbol{x}_{i, G}+F_{i}\left(\boldsymbol{x}_{\text {best }, G}^{p}-\boldsymbol{x}_{i, G}\right)+F_{i}\left(\boldsymbol{x}_{r 1, G}-\tilde{\boldsymbol{x}}_{r 2, G}\right) vi,G​=xi,G​+Fi​(xbest ,Gp​−xi,G​)+Fi​(xr1,G​−x~r2,G​)式中, x best  , G p \boldsymbol{x}_{\text {best }, G}^{p} xbest ,Gp​为第 G G G代种群前 N P ∗ p NP*p NP∗p个最好的个体, p p p的范围是0~1 。 x r 1 , G \boldsymbol{x}_{r 1, G} xr1,G​为从1~ N P NP NP范围内随机选取的个体, x ~ r 2 , G \tilde{\boldsymbol{x}}_{r 2, G} x~r2,G​为从1~ N P NP NP与A(Archive)组成的集合中随机选取的个体, i i i、 r 1 r1 r1和 r 2 r2 r2互不相等。A中保存的是历史迭代过程中目标函数较差的个体。在优化开始阶段,A和第一代的种群相同;此后,逐渐向A中增加目标函数较差个体的数量;当A 中个体数量超过最大值时,将从中随机删除部分个体,并添加进新个体。下图为DE/current-to- p p pbest/1变异算子下,生成试验向量的示意图, 差分向量1为 x best  , G p − x i , G \boldsymbol{x}_{\text {best }, G}^{p}-\boldsymbol{x}_{i, G} xbest ,Gp​−xi,G​,差分向量2为 x r 1 , G − x ~ r 2 , G \boldsymbol{x}_{r 1, G}-\tilde{\boldsymbol{x}}_{r 2, G} xr1,G​−x~r2,G​。

种群数量 N P NP NP

种群设置的方式主要包含2种,固定值和自适应方式。在固定值中,通常认为种群数 N P NP NP设置为变量个数5~10倍为宜;2006年,自适应的 N P NP NP设计技术首次被证明有利于提升DE的优化性能,2014年,L-SHADE(DE的改进算法)在IEEE CEC 2014 测试算例上的优化表现排名第一,它更直接地证明了自适应种群设计技术的显著优势。该算法使用的是线性减少种群大小 N P NP NP值的方法。此后陆续又提出了其他的自适应调整 N P NP NP值的方式,如基于小生境(Niching-based)的 N P NP NP减少方法等。

缩放因子 F F F和变异率 C r Cr Cr

设计缩放因子 F F F的方式可以分为四类:固定值、随机值、基于历史自适应和基于目标函数自适应。固定值指的是缩放因子 F F F在整个优化过程中,都保持不变。一般认为, F F F取0.5,0.6或0.9为宜。随机值指的是每一代缩放因 F F F的值通过随机函数来确定。在研究过程中,均匀分布函数和正态分布函数是最常用的两种方式。

历史自适应缩放因子 F F F的核心是借鉴以往迭代成功的缩放因子 F F F值,作为设定当前缩放因子 F F F值的参考基准。下图(a)给出了历史自适应缩放因子 F F F设计的示意图。该方法广泛应用于各种自适应DE算法,SHADE是其中最为典型的算法。目标函数自适应缩放因子 F F F是指利用当前种群的目标函数来确定当前的缩放因子 F F F。下图 (b)给出了目标函数自适应缩放因子 F F F设计的示意图。

交叉概率 C r Cr Cr的设计方式与缩放因子 F F F类似,本文不再赘述。

改进DE排名

下图依据全局寻优能力的的区别,绘制了25种不同DE算法之间的相互关系 。各类改进DE从下到上,全局寻优能力逐渐提升。每两条红色虚线区间内的DE认为其全局寻优性能类似。DE之间的箭头指向表示来源关系,例如EsDEr-NR是JADEw的改进版。

发展方向

超参数改进

在DE算法中,超参数主要是指缩放因子 F F F、交叉概率 C r Cr Cr和 N P NP NP。针对 F F F和 C r Cr Cr的改进策略最近几年以历史自适应为主,如果不能从基本策略上有新的自适应设计,难以再有突破。博主针对该问题曾有部分新的想法,可惜不过限于时间约束,没能仔细研究透彻,略有可惜。

N P NP NP的改进设计具有通用性,可以用于DE的 N P NP NP自适应方案理论上也可以用于其他智能优化算法。如果能有技术突破,也是非常有价值的。

变异算子改进

DE的核心在于变异算子。不同的变异算子,具有不同的特点。现在还有很多学者去尝试提出新的变异算子。不过更有前途的,博主认为是去融合不同类型的变异算子。IMODE(IEEE CEC 2020冠军)是其中的一个典型代表。相信未来几年,这将成为DE的研究热点之一。

某种意义上,变异算子可以认为是不同智能优化算法融合的另一种体现。举个例子,DE/current-to- p p pbest/1的来源之一是粒子群算法。所以,强行想从概念上去融合DE与其他智能优化算法,不如直接去研究融合多个变异算子,更加有意义。

应用范围扩展

针对连续变量非线性全局优化问题,DE当前几乎可以判定为当之无愧的Number 1了。但是在其他问题类型上的综合表现,是否具有统治地位,并不明朗。一个显然的实例,针对组合优化问题,DE的全局搜索能力并不亮眼。大规模优化问题和多目标优化问题是近几年的热点优化问题,DE的表现,就有待各位大佬去探索了。

一文了解差分进化算法的前世今生相关推荐

  1. 差分进化算法_基于差分进化的水泥烧成系统动态优化算法

    基于差分进化的水泥烧成系统动态优化算法 郝晓辰, 冀亚坤, 郑立召, 史鑫, 赵彦涛 燕山大学电气工程学院,河北 秦皇岛 066004 [摘  要]针对水泥烧成过程的资源浪费以及难以建立有效数学机理模 ...

  2. 差分进化算法_特邀嘉宾 | 科普差分进化算法(创新奇智运筹优化算法工程师朱小龙博士)...

    文案:段克邪 排版:随心390 hello,大家好.各位可点击此处,访问公众号官方店铺.谨防上当受骗,感谢各位支持! 今天我们有幸请到创新奇智运筹优化算法工程师朱小龙博士为大家科普差分进化算法,本次推 ...

  3. 差分进化算法_基于状态估计反馈的策略自适应差分进化算法

    差分进化算法框架下,借鉴闭环控制思想,设计状态评价因子,通过计算种群个体的进化状态估计值,实现变异策略的自适应切换,指导下一代种群的进化,以提高算法搜索性能. 王柳静, 张贵军, 周晓根. 基于状态估 ...

  4. Python实现DE差分进化算法优化支持向量机分类模型(SVC算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 差分进化算法(Differential Evolution,DE ...

  5. Python实现VRP常见求解算法——差分进化算法(DE)

    基于python语言,实现经典差分进化算法(DE)对车辆路径规划问题(CVRP)进行求解. 目录 1. 适用场景 2. 求解效果 3. 问题分析 4. 数据格式 5. 分步实现 6. 完整代码 参考 ...

  6. 2018-4-7 差分进化算法

    首先差分进化算法是进化算法的一种,它包括变异,交叉,选择,边界检测. 来源: 差分进化算法_百度百科 https://baike.baidu.com/item/%E5%B7%AE%E5%88%86%E ...

  7. 差分进化算法_差分进化算法

    差分进化算法(Differential Evolution Algorithm,DE)是一种高效的全局优化算法.是一种模拟生物进化的随机模型,通过反复迭代,使得那些适应环境的个体被保存了下来.它的进化 ...

  8. 优化算法:粒子群算法,遗传算法,差分进化算法

    目录 1.粒子群算法(PSO) 2.遗传算法 3.差分进化算法 1.粒子群算法(PSO) 整个粒子群优化算法的算法框架如下: step1种群初始化,可以进行随机初始化或者根据被优化的问题设计特定的初始 ...

  9. 差分进化算法_OPTIMUS软件功能特性介绍【全局优化算法模块】

    导读:面向应用工程师的商业软件咨询.自研软件定制开发服务的仿真公众号,点击关注进入菜单,查看更多精彩内容. OPTIMUS提供自适应进化算法(Self-adaptive Evolution),从用户给 ...

最新文章

  1. 352万帧标注图片,1400个视频,亮风台推最大单目标跟踪数据集
  2. html(超链接定义锚点与特殊符号转义)
  3. 【数据结构与算法】之单向循环链表的创建/遍历/插⼊/查找/删除算法实现
  4. HDU 2897 (博弈 找规律) 邂逅明下
  5. 笨办法学 Python · 续 中文版
  6. Java刷新Jpanel_java – 刷新JPanel
  7. 更改TFS项目中的SharePoint网站端口
  8. android新运行时权限
  9. 微信api接口调用-微信群管理
  10. 知识蒸馏(Knowledge Distillation)
  11. 火狐浏览器启动参数_火狐浏览器启动参数介绍
  12. Linux block multi-queue (blk-mq) 机制
  13. 2018年「编码美丽」公众号精华帖总结,建议收藏(文末赠书)!
  14. 计算机二级office知识框架,计算机二级Office:Excel模拟分析和图表知识点讲解
  15. 基于DLNA的移动端网络视频投屏技术
  16. 制造业质量管理如何实现数字化?
  17. 单片机SFR是什么意思?
  18. 个人如何获取微信小程序的APPID
  19. Handler中MessageQueue的enqueueMessage笔记
  20. 使用百度AI实现视频的人流量统计(静态+动态)代码及效果演示

热门文章

  1. Android自定义控件等打包成arr文件
  2. java正则匹配括号_java正则表达式方括号匹配的认识
  3. eclipse 快捷键ctrl + o 的使用
  4. Presto读取Parquet文件的流程
  5. Symbian的中文字体s60sc.ccc,ttfdump与iType
  6. NFS高可用方案:NFS+keepalived+Sersync
  7. 中专计算机专业好的学校,中专计算机专业学校排名
  8. 词性标注POS tagging
  9. Minor GC、Major GC、Full GC的触发场景
  10. 金山词霸2007专业版 破解补丁