DE(Differential Evolution)算法

A. 基本算法原理

DE算法仍然是EA算法的一种,所以在学习DE算法之前,先让我们复习一下EA(Evolution Algorithm)算法的流程图:

在开始进行具体的流程介绍之前,先让我们来定义一些东西

Solution

根据问题的维度D,我们用一个D维的向量来表示为一个Solution
需要注意的是,每一个维度都应该有自己的上界和下界

Population

我们将固定数量(NP)个Solution打包起来,这样就形成了一个Population

B. 流程详解

1. 初始化

每个Solution中每一个维度的值都初始化为该维度上下限中的随机值,公式为
xi,j,0=Minj+randi,j[0,1]⋅(Maxj−Minj)x_{i,j,0}=Min_{j}+rand_{i,j}\left[ 0,1 \right]\cdot \left( Max_{j}-Min_{j} \right) xi,j,0​=Minj​+randi,j​[0,1]⋅(Maxj​−Minj​)

这里的i是Solution的序号、j是维度序号、0是第0代

2. 突变

对于每一个SolutionXi,GX_{i,G}Xi,G​,从同代中随机选择其它3个SolutionXr1i,G、Xr2i,G、Xr3i,GX_{r_{1}^{i},G}、X_{r_{2}^{i},G}、X_{r_{3}^{i},G}Xr1i​,G​、Xr2i​,G​、Xr3i​,G​来计算这个Solution的Mutant vectorVi,GV_{i,G}Vi,G​,公式如下
Vi,G=Xr1i,G+F⋅(Xr2i,G−Xr3i,G)V_{i,G}=X_{r_{1}^{i},G}+F\cdot(X_{r_{2}^{i},G}-X_{r_{3}^{i},G}) Vi,G​=Xr1i​,G​+F⋅(Xr2i​,G​−Xr3i​,G​)

iii是正在处理的Solution的序号,由于不同的Solution所使用到的三个随机Solution不同,因此打上了上标用以提醒
GGG是当前的代数
FFF是比例因子(Scaling factor),其取值为(0,1.5)的常数

3. 重组

有两种重组方式,但都离不开CrCrCr,它是该维度变量是否更新的依据,这个值是预先设定好的
1. Binomial/Uniform Crossover

公式如下
ui,j,G={vi,j,G,if(randi,j[0,1]≤Crorj=jrand)xi,j,G,otherwiseu_{i,j,G}=\left\{ \begin{aligned} v_{i,j,G}&,&& if\left( rand_{i,j}\left[ 0,1 \right]\le{C}r\quad or\quad j=j_{rand} \right) \\ x_{i,j,G}&,&& otherwise \end{aligned}\right. ui,j,G​={vi,j,G​xi,j,G​​,,​​if(randi,j​[0,1]≤Crorj=jrand​)otherwise​

ui,j,Gu_{i,j,G}ui,j,G​是经过重组之后生成的新的SolutionUi,GU_{i,G}Ui,G​在jjj位置处的值
vi,j,Gv_{i,j,G}vi,j,G​是经过突变之后生成的Mutant vectorVi,GV_{i,G}Vi,G​在jjj位置处的值
xi,j,Gx_{i,j,G}xi,j,G​是原SolutionXi,GX_{i,G}Xi,G​在jjj位置处的值
jrand=rand[0,D]j_{rand}=rand[0,D]jrand​=rand[0,D],为了避免CrCrCr太小,我们引入该值,来随机一些位置,强制它们发生改变

2. Exponential(two-point modulo) Crossover
这里需要先引入两个值n、Ln、Ln、L,nnn是直接随机得到的,LLL需要进行一些计算,这里给了LLL的伪代码

L=0;
DO
{L=L+1;
}WHILE((rand[0,1]<=Cr)AND(L<D))

nnn确定了Crossover的起点,LLL确定了Crossover的终点
Crossover的公式如下
ui,j,G={vi,j,G,forj=⟨n⟩D,⟨n+1⟩D,...,⟨n+L−1⟩Dxi,j,G,forallotherj∈[1,D]u_{i,j,G}=\left\{ \begin{aligned} v_{i,j,G}&,&& for\: j=\langle n\rangle _{D},\langle n+1\rangle _{D},...,\langle n+L-1\rangle _{D} \\ x_{i,j,G}&,&& for\; all\; other\; j\in [1,D] \end{aligned}\right. ui,j,G​={vi,j,G​xi,j,G​​,,​​forj=⟨n⟩D​,⟨n+1⟩D​,...,⟨n+L−1⟩D​forallotherj∈[1,D]​

ui,j,Gu_{i,j,G}ui,j,G​是经过重组之后生成的新的SolutionUi,GU_{i,G}Ui,G​在jjj位置处的值
vi,j,Gv_{i,j,G}vi,j,G​是经过突变之后生成的Mutant vectorVi,GV_{i,G}Vi,G​在jjj位置处的值
xi,j,Gx_{i,j,G}xi,j,G​是原SolutionXi,GX_{i,G}Xi,G​在jjj位置处的值

简而言之,就是将Xi,GX_{i,G}Xi,G​中nnn到n+L−1n+L-1n+L−1位置的值替换为Vi,GV_{i,G}Vi,G​中对应位置的值

4. 选择

使用f(Xi,G)f(X_{i,G})f(Xi,G​)表示Xi,GX_{i,G}Xi,G​的fitness,如果我们想要后代的fitness更小,那么使用如下公式生成后代Xi,G+1X_{i,G+1}Xi,G+1​
Xi,G+1={Ui,G,iff(Ui,G)≤f(Xi,G)Xi,G,iff(Ui,G)>f(Xi,G)X_{i,G+1}=\left\{ \begin{aligned} U_{i,G}&,&& if\: f(U_{i,G})\le f(X_{i,G})\\ X_{i,G}&,&& if\: f(U_{i,G})> f(X_{i,G}) \end{aligned}\right. Xi,G+1​={Ui,G​Xi,G​​,,​​iff(Ui,G​)≤f(Xi,G​)iff(Ui,G​)>f(Xi,G​)​

当Ui,GU_{i,G}Ui,G​和Xi,GX_{i,G}Xi,G​的fitness一样大时,我们都会选择Ui,GU_{i,G}Ui,G​

C. 例子

1.问题

我们想要通过DE算法得到使f(x,y)=x2+y2f(x,y)=x^2+y^2f(x,y)=x2+y2取到最小值时的点

2.解决问题

1. Initialization
根据问题得知,维度为2;我们初始化5个Solution,每个维度的取值范围都设为[-10,10]
X1,0=[3,0];X2,0=[7,2];X3,0=[−2,6];X4,0=[−1,7];X5,0=[7,−6];X_{1,0}=[3,0]; X_{2,0}=[7,2]; X_{3,0}=[-2,6]; X_{4,0}=[-1,7]; X_{5,0}=[7,-6]; X1,0​=[3,0];X2,0​=[7,2];X3,0​=[−2,6];X4,0​=[−1,7];X5,0​=[7,−6];
2. Mutation
为了得到X1,0X_{1,0}X1,0​的Mutant vector,我们随机选取X2,0、X3,0、X5,0X_{2,0}、X_{3,0}、X_{5,0}X2,0​、X3,0​、X5,0​,并随机F=1F=1F=1,得到
V1,0=[72]+1×{[−26]−[7−6]}=[−214]V_{1,0}={7\brack 2}+1\times \begin{Bmatrix}{-2\brack 6}-{7\brack -6}\end{Bmatrix}={-2\brack 14} V1,0​=[27​]+1×{[6−2​]−[−67​]​}=[14−2​]
3. Recombination
选择Uniform Crossover方法,设置CrCrCr为0.5
对x1,1,0x_{1,1,0}x1,1,0​,根据rand[0,1]rand[0,1]rand[0,1]生成随机数0.6>Cr0.6>Cr0.6>Cr,所以u1,1,0=x1,1,0=3u_{1,1,0}=x_{1,1,0}=3u1,1,0​=x1,1,0​=3
对x1,2,0x_{1,2,0}x1,2,0​,根据rand[0,1]rand[0,1]rand[0,1]生成随机数0.3<Cr0.3<Cr0.3<Cr,所以u1,2,0=v1,2,0=14u_{1,2,0}=v_{1,2,0}=14u1,2,0​=v1,2,0​=14
所以U1,G=[3,14]U_{1,G}=[3,14]U1,G​=[3,14]
4. Selection
计算X1,0X_{1,0}X1,0​的fitnessf(3,0)=32+02=9f(3,0)=3^2+0^2=9f(3,0)=32+02=9
计算U1,0U_{1,0}U1,0​的fitnessf(3,14)=32+142=205f(3,14)=3^2+14^2=205f(3,14)=32+142=205
因为205>9205>9205>9,所以X1,1=X1,0=[3,0]X_{1,1}=X_{1,0}=[3,0]X1,1​=X1,0​=[3,0]
5. 重复
同样的步骤计算完剩余Solution后,重复步骤2-4,直至结果达到可接受的地步

D. 补充

1. 突变

在突变时我们用到的为最基础的突变策略,被命名为“DE/rand/1”,另外还有4种突变策略
DE/rand/1
Vi,G=Xr1i,G+F⋅(Xr2i,G−Xr3i,G)V_{i,G}=X_{r_{1}^{i},G}+F\cdot(X_{r_{2}^{i},G}-X_{r_{3}^{i},G}) Vi,G​=Xr1i​,G​+F⋅(Xr2i​,G​−Xr3i​,G​)
DE/best/1
Vi,G=Xbest,G+F⋅(Xr1i,G−Xr2i,G)V_{i,G}=X_{best,G}+F\cdot(X_{r_{1}^{i},G}-X_{r_{2}^{i},G}) Vi,G​=Xbest,G​+F⋅(Xr1i​,G​−Xr2i​,G​)
DE/current-to-best/1
Vi,G=Xi,G+F⋅(Xbest,G−Xi,G)+F⋅(Xr1i,G−Xr2i,G)V_{i,G}=X_{i,G}+F\cdot(X_{best,G}-X_{i,G})+F\cdot(X_{r_{1}^{i},G}-X_{r_{2}^{i},G}) Vi,G​=Xi,G​+F⋅(Xbest,G​−Xi,G​)+F⋅(Xr1i​,G​−Xr2i​,G​)
DE/best/2
Vi,G=Xbest,G+F⋅(Xr1i,G−Xr2i,G)+F⋅(Xr3i,G−Xr4i,G)V_{i,G}=X_{best,G}+F\cdot(X_{r_{1}^{i},G}-X_{r_{2}^{i},G})+F\cdot(X_{r_{3}^{i},G}-X_{r_{4}^{i},G}) Vi,G​=Xbest,G​+F⋅(Xr1i​,G​−Xr2i​,G​)+F⋅(Xr3i​,G​−Xr4i​,G​)
DE/rand/2
Vi,G=Xr1i,G+F1⋅(Xr2i,G−Xr3i,G)+F2⋅(Xr4i,G−Xr5i,G)V_{i,G}=X_{r_{1}^{i},G}+F_{1}\cdot(X_{r_{2}^{i},G}-X_{r_{3}^{i},G})+F_{2}\cdot(X_{r_{4}^{i},G}-X_{r_{5}^{i},G}) Vi,G​=Xr1i​,G​+F1​⋅(Xr2i​,G​−Xr3i​,G​)+F2​⋅(Xr4i​,G​−Xr5i​,G​)

命名规则:DE/x/y/z中,DE指是Differential Evolution的mutation方法,x指的是基于哪个父代,y指的是用了几对随机父代的差,z指的是用的是哪种重组方法(exp与bin)
best:当前population中最好的solution

2. Cr的设置

当遇到可分的问题时,Cr一般取小值
当遇到不可分的问题时,Cr一般取较大的值

SaDE(Self-Adaptive DE)算法

SaDE算法是对DE算法的改进,所以基本逻辑不变,下面只介绍SaDE中比较特别的部分

A. 突变策略自适应

选取DE/rand/1/bin、DE/rand-to-best/2/bin、DE/rand/2/bin、DE/current-to-rand/1四种突变策略作为待选策略
通过LP(Learning Period)代的试验,得到每种策略的成功率

每次突变时记录使用的突变策略,经过LP代后,可以得到各个突变策略使用了多少次,假设A策略使用了N次
在进行选择时,如果选择的是生成的Ui,GU_{i,G}Ui,G​,那么生成这个Ui,GU_{i,G}Ui,G​时使用的策略被视为成功了1次,记录下每个策略各成功了多少次,假设A策略成功了n次
A策略的成功率就是n/Nn/Nn/N

LP代后,每个Solution在进行突变操作时,根据训练得到四种策略的成功率随机选取一种策略作为这次突变的策略

B. F值的设定

F值被设定为服从正态分布N(0.5,0.3)的随机数
每一个population内的F值是通用的

C. Cr值自适应

Cr值被设定为服从正态分布N(CRm,Std)N(CR_{m},Std)N(CRm​,Std)的随机数,其中Std=0.1Std=0.1Std=0.1;CRmCR_{m}CRm​的初始值为0.5,且会不断更新;
更新规律:

JADE算法

JADE算法是对DE算法的改进,所以基本逻辑不变,下面只介绍JADE中比较特别的部分

A. 突变策略的改进

1. 修改DE/current-to-best/1算法

(1) 使用Xbest,GpX_{best,G}^pXbest,Gp​代替Xbest,GX_{best,G}Xbest,G​
DE/current-to-best/1算法公式为
Vi,G=Xi,G+Fi⋅(Xbest,G−Xi,G)+Fi⋅(Xr1i,G−Xr2i,G)V_{i,G}=X_{i,G}+F_{i}\cdot(X_{best,G}-X_{i,G})+F_{i}\cdot(X_{r_{1}^{i},G}-X_{r_{2}^{i},G}) Vi,G​=Xi,G​+Fi​⋅(Xbest,G​−Xi,G​)+Fi​⋅(Xr1i​,G​−Xr2i​,G​)
使用Xbest,GpX_{best,G}^pXbest,Gp​代替Xbest,GX_{best,G}Xbest,G​,从而将公式改写为
Vi,G=Xi,G+Fi⋅Xbest,Gp−Xi,G)+Fi⋅(Xr1i,G−Xr2i,G)V_{i,G}=X_{i,G}+F_{i}\cdot X_{best,G}^p-X_{i,G})+F_{i}\cdot(X_{r_{1}^{i},G}-X_{r_{2}^{i},G}) Vi,G​=Xi,G​+Fi​⋅Xbest,Gp​−Xi,G​)+Fi​⋅(Xr1i​,G​−Xr2i​,G​)
Xbest,GpX_{best,G}^pXbest,Gp​与Xbest,GX_{best,G}Xbest,G​不同,它并不是直接选择这一个population中fitness最好的那个Solution,而是从当前population中随机选择fitness排名在100p100p100p%中一个Solution。

一般来说,p∈[0.05,0.2]p\in [0.05,0.2]p∈[0.05,0.2]
(2)改变Xr2i,GX_{r_{2}^{i},G}Xr2i​,G​的选择范围
Xi,G、Xbest,Gp、Xr1i,GX_{i,G}、X_{best,G}^p、X_{r_{1}^i,G}Xi,G​、Xbest,Gp​、Xr1i​,G​不变,仍然是从PPP(当前population)中选取,Xr2,GiX_{r_{2},G}^iXr2​,Gi​改为从P∪AP\cup AP∪A中选择
集合A:每当子代将父代取代时,我们将父代转存到集合A中,并不断随机从A中剔除一些父代,使得A的大小小于NP

2. Cr的自适应

每代中的每个Solution的Cr都是符合正态分布N(μCr,0.1)N(\mu _{Cr},0.1)N(μCr​,0.1)且大小被约束在[0,1]内的随机数
其中μCr\mu _{Cr}μCr​遵循自更新公式
μCr=(1−c)⋅μCr+c⋅meanA(SCr)\mu _{Cr}=(1-c)\cdot \mu _{Cr}+c\cdot mean_A(S_{Cr}) μCr​=(1−c)⋅μCr​+c⋅meanA​(SCr​)

μCr\mu _{Cr}μCr​初始值为0.5
c是一个常数,一般来说1/c∈[5,20]1/c\in[5,20]1/c∈[5,20]
meanAmean_AmeanA​指计算算术平均数
SCrS_{Cr}SCr​为本代中每次子代solution取代父代 solution时的Cr的集合

3. F的自适应

每代中的每个Solution的FiF_{i}Fi​都是符合柯西分布C(μF,0.1)C(\mu _{F},0.1)C(μF​,0.1)的随机数

当Fi>1F_i>1Fi​>1时会被直接设为1
当Fi≤0F_i\le 0Fi​≤0时会重新随机

μF\mu _FμF​比例参数为0.1,且符合自更新公式
μF=(1−c)⋅μF+c⋅meanL(SF)\mu _{F}=(1-c)\cdot \mu _{F}+c\cdot mean_L(S_{F}) μF​=(1−c)⋅μF​+c⋅meanL​(SF​)

μF\mu _FμF​初始值为0.5
c是一个常数,一般来说1/c∈[5,20]1/c\in[5,20]1/c∈[5,20]
meanL(SF)=∑F∈SFF2∑F∈SFFmean_L(S_F)={\sum_{F\in S_F}{F^2}\over \sum_{F\in S_F}{F}}meanL​(SF​)=∑F∈SF​​F∑F∈SF​​F2​
SFS_{F}SF​为本代中每次子代solution取代父代 solution时的F的集合

SHADE(Success-History based Adaptive DE)算法

SHADE算法是对JADE算法的修改
JADE算法使用单个的μCr\mu _{Cr}μCr​和μF\mu_ {F}μF​,SHADE则是在MCRM_{CR}MCR​和MFM_{F}MF​中随机选择μCr\mu _{Cr}μCr​和μF\mu_ {F}μF​来生成Cr和F

我们用MCRM_{CR}MCR​来表示存储了HHH个成功的μCr\mu_{Cr}μCr​的集合,用MFM_{F}MF​来表示存储了HHH个成功的μF\mu_{F}μF​的集合,HHH的值是自定义的


当更新完一轮后,从头覆盖原位置来更新数组

L-SHADE(SHADE with Linear Population Reduction)算法

L-SHADE算法实为增加了线性参数递减的SHADE算法
为了加快约束速度,我们根据当前已更新的参数个数线性减少一个population中的solution的数,参数的减少规律如图中黄线所示

LPSR:Linear Population Size Reduction

DE、SaDE、JADE、SHADE、L-SHADE算法整理相关推荐

  1. 最短路算法整理 七七八八的总结

    最短路算法整理 1.Dijkstra 算法 先讲讲朴素的Dijkstra算法的思路.朴素的Dijkstra算法先将起点入队.然后找到一个起点距离最近的点.再用这个点去更新其他所有的点.一共有多少个点就 ...

  2. 最短路径算法整理(二)

    本文是最短路径算法整理的第二篇,想阅读第一篇的朋友能够点击下面链接: http://blog.csdn.net/hjd_love_zzt/article/details/26739593 这一篇博客继 ...

  3. 常见数据结构与算法整理总结(下)

    原文链接:https://www.jianshu.com/p/42f81846c0fb 这篇文章是常见数据结构与算法整理总结的下篇,上一篇主要是对常见的数据结构进行集中总结,这篇主要是总结一些常见的算 ...

  4. 小L的算法课堂——博弈论

    嗨!这里是小L的算法课堂!我是小L 今天我们学习一下博弈论 我们先来讲一个故事: 小L和小Z喜欢玩石头剪刀布. 小L总是打不过小Z赢,于是,小L问小Z:"你是怎么赢我的?" 小Z告 ...

  5. SM4国密算法整理-流程图

    SM4国密算法整理–流程图 前一篇文章没有加入流程图,自己看着也有点晕,现在再次整理下 python代码看我之前的文章: 请点击. 加密 计算轮秘钥 #mermaid-svg-LmTcVIQC7cAr ...

  6. 精华游戏算法整理_整理游戏

    精华游戏算法整理 在HTML5 2D游戏开发系列的上一部分文章结尾,Snail Bait处于可玩但原始的状态. 在这一期的最后一部分中,我将向您展示如何将Snail Bait从该状态带到最终版本,如图 ...

  7. 百度算法整理,SEO工作者抓紧收藏了!(超详细)

    入行SEO这么长时间,要避免踩到百度算法的雷区就得经常查百度算法.而一个一个地去找算法就比较麻烦,于是我按照功能对应的算法整理了2013年以来的百度算法供大家参考(截止到2019年). 一.网站质量相 ...

  8. Terrain 算法整理。基本常识。

    Terrain 算法整理.基本常识. 制作地形的方法大致分为 Voxel, Height map, Mesh 这几种,会根据使用的技术有各自的长短处,常识上的长短处如下.Unity 用的是高度图,所以 ...

  9. 点云处理算法整理(超详细教程)

    点云处理算法整理(超详细教程) 目录 一. 线性回归_最小二乘法.梯度下降法 二. 线性回归_最小二乘法.RANSAC算法 三. 最近点迭代_ICP算法 四. 常见三角网格划分_voronoi图和De ...

最新文章

  1. 2020年人工神经网络第二次作业-参考答案第四题
  2. before css 旋转_七夕,当然少不了纯CSS的点缀啦
  3. 中国燃料电池行业供应规模及需求前景调研报告2021-2027年版
  4. HTML data属性简介以及低版本浏览器兼容算法
  5. 前端项目引入js文件写绝对目录还是相对目录_flask入门(三)静态文件
  6. 数据库基础:什么是行?什么是主键?
  7. FFMpeg新旧接口之间的一些对应关系
  8. VC2005工程常用设置系统环境变量设置
  9. 判断分解的无损连接性和保持函数依赖
  10. javaScript用函数的方式计算体重是否是标准体重(代码)
  11. uva10066-双塔
  12. geopandas read_file报错RTreeError: Coordinates must be in the form (minx,
  13. Address localhost:8080 is already in use
  14. php 24字母和 数字进行转化
  15. SMD元件尺寸大小公制英制对应说明
  16. python文本聚类 词云图_有哪些软件可以进行中文词频分析?
  17. [数据结构与算法]动态规划:扔鸡蛋问题
  18. 人工智能:语音识别技术介绍
  19. 有感腾讯入股搜狗,掌握入口才是王道
  20. 酷q服务器信息获取,酷Q获取加群QQ等级的解决方案

热门文章

  1. win7无法打开设备和打印机解决
  2. MySQL 下载和安装详解
  3. 谷歌的nofollow外链还有权重传递效果吗?【外贸知识】
  4. 广州的11个辖区_对不起,你真的不了解广州11个区!
  5. java是几位的unicode,下列说法错误的是()。A.Java的字符类型采用的是Unicode编码,每个Unicode码占16位比特B.Java的各种...
  6. SD卡数据恢复教程:3种工具一键恢复SD卡误删的照片
  7. 计算机专业的swot分析图,计算机专业学生个人SWOT分析示例.doc
  8. 新标准大学英语综合教程2(第二版)unit1答案截图
  9. 2017计算机考证结果
  10. C语言面试题大汇总之华为面试题 Eddy整理