文案:段克邪

排版:随心390

hello,大家好。各位可点击此处,访问公众号官方店铺。谨防上当受骗,感谢各位支持!

今天我们有幸请到创新奇智运筹优化算法工程师朱小龙博士为大家科普差分进化算法,本次推文内容主要来源于作者博士论文《缩放因子自适应差分进化算法及其在航天器轨道优化中的应用》, 中国科学院大学, 2020。

文末有创新奇智公司的招聘信息,励志成为一名运筹优化算法工程师想在创新奇智公司实习的同学千万不要错过!!!

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

本篇推文主要从以下几个方面展开:

01优化能力

02 流程概述

03 算法特点

04 发展历史


01 |优化能力

1.1 IEEE CEC标准测试算例

元启发式算法由于缺乏严密的数学证明,因此难以从理论上确定哪一种元启发式算法是最佳的元启发式算法。为了详细评测各类元启发式方法的全局优化能力,一般采用数值优化的方式进行对比验证。自2005年以来,相关主办方每年都会举办一次IEEE 进化计算大会(Congress on Evolutionary Computation,CEC)单目标参数优化竞赛。竞赛中一般会提供大约30个标准测试算例,作为各类元启发式算法的测试对象。这些算例的全局最优解均为已知,特点也基本明确,表1给出了IEEE CEC 2014的前16个算例的问题特点。表中,参数可分离(Separable)指的是优化变量可以分别独立优化;参数不可分离(Non-separable)指的是优化变量不能独立优化。“N/A”表示无其他特点。IEEE CEC 2014的后14个算例是由前16个算例中的某几个函数组合而成,因此更加复杂。此外,对于每个算例,优化变量的个数从少到多共包含10、30、50和100共4种。在测评时,通常设定最大目标函数计算次数为优化变量个数的10,000倍,并将此时的优化结果,作为元启发式算法的最终结果。最终结果与全局最优解之间的差距越小,则认为该方法的全局寻优性能越好。

1.2 DE的优化结果排名

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

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

图1 DE算法在IEEE CEC竞赛中的最优排名及其对应的改进DE汇总

02 | 流程概述

设定优化问题如下:优化变量为

,变量维度为
,表示为
的上界
和下界
分别定义为

目标函数为最小化某一性能指标

针对以上的最小化问题,经典DE在求解过程中,一般包含4个步骤:初始化(initialization)、变异(Mutation)、交叉(Crossover)和选择(Selection)。

2.1 初始化

DE的种群可以表示为

其中,

是种群大小。初始化第
个个体
的常用方法为

其中,

之间的均匀随机数。

2.2 变异

定义

为第
代种群的第
个个体。

通过以下的变异算子生成与之对应的变异向量

其中,下标

是随机产生的整数值,范围是
,它们的数值互不相同,并且均不等于
。对于每个变异向量,这些下标都只随机产生一次。此处,
被称为
对应的目标向量,
为基向量,
是差分向量,
是缩放因子,范围是

2.3 交叉交叉算子

如(7)所示,其作用是通过组合

产生对应的试验向量

其中,

之间的随机整数,
是交叉概率,范围是
。该方式下,至少存在1维变量从
。图2为生成试验向量
的示意图。
图2 经典DE,生成试验向量示意图

生成

后,计算和比较

对应的目标函数,目标函数较小的对应向量可以保留到下一代。


03 | 算法特点

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

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

图3 2 维Schwefel函数的3-D曲面图和等高线图

使用刚刚介绍的经典DE进行求解。设置种群大小

,缩放因子
,交叉概率
。图4中记录了

不同代数时的变异向量末端点的所有可能位置。

初始化种群后,虽然种群大小

仅为30,但是变异向量几乎可以覆盖所有的搜索空间。此时,个体差异较大, DE可以在较大范围内进行搜索,因此这个阶段的全局探索能力较强;

12代时,优化过程逐渐摒弃中心位置,向边界附近搜索;

19代时,搜索范围聚集到4个角落;

23代时,优化区间已经减至2个小范围;

25代时,只剩下一个搜索区域。此时,个体间差异也变小,局部开发能力更强;

40代时,基本收敛。

因此,在优化过程中,差分向量可以利用个体差异的变化自适应地调整DE的全局探索和局部开发能力,从而保证DE具有非常好的综合优化性能。

图4 经典DE优化2维Schwefel函数时,变量向量演化图

04 | 发展历史

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

、缩放因子

和交叉概率

4.1 变异算子

为了区分不同类型的变异算子,一般使用“DE/x/y”对其简述。其中,x表示基向量,y表示差分向量。式(6)中的变异算子通常被标记为DE/rand/1。此后,学者们又提出了DE/best/1、DE/rand/2、DE/best/2和DE/current-to-pbest/1等变异算子。当前,DE/current-to-pbest/1变异算子是各种改进DE的最常用算子之一,其表达式如下

式中,

为第G代种群前
个最好的个体,
的范围是
为从
范围内随机选取的个体,
为从
与A(Archive)组成的集合中随机选取的个体,
互不相等。A中保存的是历史迭代过程中目标函数较差的个体。在优化开始阶段,A和第一代的种群相同;此后,逐渐向A中增加目标函数较差个体的数量;当A 中个体数量超过最大值时,将从中随机删除部分个体,并添加进新个体。图 5为DE/current-to-pbest/1变异算子,生成试验向量的示意图, 差分向量1为
,差分向量2为
图5 DE/current-to-pbest/1变异算子,试验向量示意图

4.2 种群大小

种群设置的方式主要包含2种,固定值和自适应方式。在固定值中,通常认为种群数

设置为变量个数5~10倍为宜;2006年,自适应的
设计技术首次被证明有利于提升DE的优化性能,2014年,L-SHADE(DE的改进算法)在IEEE CEC 2014 测试算例上的优化表现排名第一,它更直接地证明了

自适应种群设计技术的显著优势。该算法使用的是线性减少种群大小

的方法。此后陆续又提出了其他的自适应调整

值的方式,如基于

小生境(Niching-based)的

减少方法等。

4.3 缩放因子

设计缩放因子

的方式可以分为四类:

固定值、随机值、基于历史自适应和基于目标函数自适应。固定值指的是缩放因子

在整个优化过程中,都保持不变。一般认为,
取0.5,0.6或0.9为宜。随机值指的是每一代缩放因子
的值通过随机函数来确定。在研究过程中,

均匀分布函数和正态分布函数是最常用的两种方式

历史自适应缩放因子

的核心是借鉴以往迭代成功的缩放因子

值,作为设定当前缩放因子

值的参考基准。图 6(a)给出了历史自适应缩放因子

设计的示意图。该方法广泛应用于各种自适应DE算法,SHADE是其中最为典型的算法。

目标函数自适应缩放因子

是指利用当前种群的目标函数来确定当前的缩放因子

图 6(b)给出了目标函数自适应缩放因子

设计的示意图。
图6 历史自适应缩放因子F和目标函数自适应缩放因子F设计示意图

交叉概率

的设计方式与缩放因子
类似,本文不再赘述。

4.4 改进DE性能排名

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

图7 25种改进DE的优化性能排名

05 | 参考文献

[1] Al-Dabbagh R D, Neri F, Idris N, et al. Algorithmic design issues in adaptive differential evolution schemes: review and taxonomy [J]. Swarm and Evolutionary Computation. 2018, 43:284 – 311

创新奇智招聘信息

运筹优化算法工程师 & 实习生

地点:北京、青岛

01 工作职责

1、负责运筹优化方向的算法研究和开发,包括组合和连续优化、在线和离线优化、无约束和约束优化等;

2、负责新零售和制造业务场景的优化算法设计和实现,包括问题建模、算法选择、结果验证和分析等。

02 任职资格

1、硕士及以上学历,计算机,应用数学,运筹学,工业工程,统计学或相关专业;

2、精通运筹学领域的算法理论和应用,包括线性规划、启发式和元启发式算法;

3、有大型优化项目经验或数学建模竞赛获奖经历优先;

4、较强的编程能力,掌握C,C++,JAVA,Python至少一种语言;

5、有零售和制造从业经历或项目经历优先,有系统开发经验优先;

6、具有较强的团队合作精神,良好的沟通能力,出色的执行力。

03 简历投递邮箱

jiaziyu@ainnovation.com

更多精彩尽在公众号:优化算法交流地

往期推荐

遗传算法(GA)求解带时间窗的车辆路径(VRPTW)问题MATLAB代码

蚁群算法(ACO)求解带时间窗的车辆路径(VRPTW)问题(附MATLAB代码)

知乎 | bilibili:随心390

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

  1. 2019【创新奇智】【算法】【面经】

    创新奇智,一家以"AI赋能"为主题的公司,是创新工场的子公司,于2018年3月成立.也不知道水平怎么样,通知了面试,就去了. 岗位要求: 图像视觉算法实习生 250-280/天  ...

  2. 多目标人工秃鹫优化算法(MATLAB源码分享,智能优化算法) 提出了一种多目标版本的人工秃鹫优化算法(AVOA)

    多目标人工秃鹫优化算法(MATLAB源码分享,智能优化算法) 提出了一种多目标版本的人工秃鹫优化算法(AVOA),用于多目标优化问题. AVOA的灵感来源于非洲秃鹫的生活方式. 档案.网格和领导者选择 ...

  3. 如何成为一名合格的运筹优化算法工程师?

    作为算法工程师里的一小撮,相比机器学习.人工智能.视觉等算法工程师,运筹优化算法工程师在国内算是又小众又新鲜.作为近几年才慢慢进入大众视野的岗位,人们对其的认知和了解相对其他AI领域,还是较少的.比如 ...

  4. matlab优化算法案例分析与应用_最优化计算与matlab实现(18)——粒子群优化算法——权重改进的粒子群算法...

    参考资料 <精通MATLAB最优化计算(第二版)> 编程工具 Matlab 2019a 目录 石中居士:最优化计算与Matlab实现--目录​zhuanlan.zhihu.com 权重改进 ...

  5. matlab 随机森林算法_(六)如何利用Python从头开始实现随机森林算法

    博客地址:https://blog.csdn.net/CoderPai/article/details/96499505 点击阅读原文,更好的阅读体验 CoderPai 是一个专注于人工智能在量化交易 ...

  6. python目标识别算法_深度学习目标检测系列:一文弄懂YOLO算法|附Python源码

    摘要: 本文是目标检测系列文章--YOLO算法,介绍其基本原理及实现细节,并用python实现,方便读者上手体验目标检测的乐趣. 在之前的文章中,介绍了计算机视觉领域中目标检测的相关方法--RCNN系 ...

  7. 招募 | 大马鹿物流运筹优化算法工程师

    岗位描述 负责公司智能配送算法的开发.基于先进运筹优化理论结合实际场景和一线业务需求,联接信息系统,开发适合本公司的智能分单和路径规划算法. 负责智能配送算法的落地并不断迭代,保证实际应用的有效性与高 ...

  8. 杭州/北京内推 | 蚂蚁集团智能决策团队招聘运筹优化算法工程师/实习生

    合适的工作难找?最新的招聘信息也不知道? AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职! 蚂蚁集团 蚂蚁集团-CTO 线-智能决策团队,有来自国内外 top 互联网 ...

  9. 总结 贪心算法_这几道经典例题帮你轻松搞透贪心算法

    贪心算法概念叙述 运用贪心算法求解问题时,会将问题分为若干个子问题,可以将其想象成俄罗斯套娃,利用贪心的原则从内向外依次求出当前子问题的最优解,也就是该算法不会直接从整体考虑问题,而是想要达到局部最优 ...

最新文章

  1. poj 3164(最小树形图)
  2. kmean python实现
  3. java计算圆锥体积_六年级:美妙数学之“球的体积计算”(0430六)
  4. .net core grpc consul 实现服务注册 服务发现 负载均衡(二)
  5. 转载:使用 Frida 来 hook 加固的 Android 应用的 java 层
  6. 各种主流Linux操作系统概况
  7. Postman下载与安装
  8. HTML5中的WebSocket
  9. 2019-08-12 计划与安排
  10. Ubuntu安装GCC 3.4
  11. Jsonp 原理简述
  12. http web服务器
  13. H3C网络设备模拟器显示交换机的MAC地址表
  14. golang_逃逸分析
  15. 蓝牙beacon入门教程
  16. 产品经理入门——必备技能之【产品运营】
  17. 7种常用函数图象及4种函数图象变换规则
  18. 淘宝/天猫整店采集(店铺宝贝列表接口)
  19. 让卫浴间四季花香 最懂你的智能马桶 ——安华智能坐便器aB13017-1众测报告
  20. LINUX--创建新用户为新用户设置权限

热门文章

  1. 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView...
  2. ddos流量攻击有多少G_锐速云高防IP 专业防御大流量DDoS攻击
  3. 小程序剖析 | 小程序中Page的数据设置
  4. Python中的property类和@property装饰器
  5. __name__ == ‘__main__‘的原理
  6. Java继承注意事项难点理解
  7. VS 2008中的jQuery Intellisense
  8. 开启协程_软件特攻队|GCC10发布,GCC 11将支持C++20协程功能?
  9. 王道 —— 进程互斥的软件实现方法
  10. leetcode —— 面试题32 - III. 从上到下打印二叉树 III