Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >差分进化算法(DE)的详述

差分进化算法(DE)的详述

作者头像
用户7506105
发布于 2021-08-09 07:58:08
发布于 2021-08-09 07:58:08
3.8K0
举报
文章被收录于专栏:碎片学习录碎片学习录

之前对一篇和本文类似的生物进化优化算法——遗传算法做了一些解释,本文所述的差分进化算法和遗传算法本身有相通的地方当然也有较多的差异。差分进化算法也是基于群体智能理论的优化算法,它是通过群体内个体间的合作与竞争而产生的智能优化算法,字面意思即可看出它有别于遗传算法的自由组合自然选择,它更侧重的是个体与个体和个体与自身间的关系,包括合作与竞争。

思想

其实是尽可能的较好的穷举,本质上是依靠贪婪算法,其通过自变量差分及概率选择扩大自变量搜索空间,通过适应度值大小进行简单粗暴的选择。

在具体解释该算法前,先把和遗传算法相通但又不完全相同的一些概念做一些解释,差分进化算法也和遗产算法一样,也有变异,交叉,选择几个过程,下面分别解释。

一些概念

变异

遗传算法这里是在编码映射后的基因串长的位点突变

先得到种群中的两个成员向量(自变量可行解)的加权差向量(公式见后,差分体现在这),然后用得到的加权差向量与第三个成员向量相加即产生新的参数向量,因为变异在生物学中就是多样性的来源,所以这里的变异是为了试出更多的可行解

交叉

也有别于遗传算法,遗传算法是进行多个个体基因串间的重组

这里是在种群中先找到变异向量,然后与另外预先确定的目标向量按照一定的规则(见后)进行混合,所以交叉一定在变异操作的后面

选择

有别于遗传算法需要进行的轮盘选择

这里的选择是如果当前试验向量的代价函数比目标向量的代价函数低,则试验向量就在下一代中代替目标向量,比较简单粗暴,不像遗传算法需要计算累计概率判断每个基因染色体个体是否会在下一轮中被复制

适应度函数

即为要优化的目标函数,本文是取目标函数的最小化

步骤

1、初始化

  • 种群个体表示为自变量维数为D的
X_{i,G}

实数值参数向量,其中i表示当前代数的个体序号,

i

的范围为

[1,NP]

,NP为种群规模总数即个体总数,G表示进化代数,在算法过程中NP保持不变

  • 确定每个自变量维度j的上下限,即
[X_j^{(L)},X_j^{(U)}]
  • 需要初始化第0代的种群个体,假定每个种群个体
i

的每个自变量参数j的值都服从上下限之间的均匀分布,即

X_{ij,0} = rand[0,1] * (X_j^{(U)} - X_j^{(L)}) + X_j^{(L)}
其中i=1,2,...,NP;j=1,2,...,D

如果可以预先得到问题的初始解,则初始种群也可以通过对初步解加入正态分布随机偏差来产生,这样就可以提高重建效果

2、变异

对于当前的个体

X_{i,G}

在进入下一代时需要从种群中随机选择三个互不相同的个体进行变异,三个变量相互合作得到新变量

所以种群规模必须

NP>=4

变异公式为

v_{i,G+1} = X_{r1,G} + F*(X_{r2,G} - X_{r3,G})
v_{i,G+1}

为当前为第

i

个的个体在进入变异成下一代后的个体,

F

为缩放因子,一般取值范围为

[0,2]

,用于控制差向量值的放大

3、交叉

设在

G_0

代的个体i在发生变异后变异成为了

u_{i,G_0+1}

,则此时的交叉操作体现在

u_{ij, G_0+1} = \begin{cases} v_{ij, G_0+1}, 当randb(j)<=CR或j=rnbr(i) \\ X_{ij, G_0}, 当randb(j)>CR且j!=rnbr(i) \end{cases}

其中

randb(j)

为[0,1]随机数序列中的第j个估计值,rnbr(i)为表示第i个个体产生的在

[1,D]

范围上的随机数,CR为交叉概率

需要注意的是交叉操作是针对每个维度的自变量参数进行的操作,它要么依随概率变成变异后的下一代变量对应自变量位置的值,要么是保留当前代变量对应的自变量位置的值,由此产生的组合多样性。

4、边界的处理

因为变异和交叉最终会导致新个体的产生,所以难免新个体不满足约束,所以需要进行边界处理,一般有两种处理方式,假设在上面两个过程中的新变量的其中第j个参数

u_{ij,G+1}

不在

[X_j^{(L)},X_j^{(U)}]

之间:

  • 一种方式是忽略该参数直接用公式
u_{ij,G+1} = rand[0,1] * (X_j^{(U)} - X_j^{(L)}) + X_j^{(L)}

即在上下限之间取随机数来代替不在范围内的值

  • 第二种方式采用边界吸收处理,即
u_{ij, G+1} = \begin{cases} X_j^{(L)}, 当u_{ij, G+1}< X_j^{(L)} \\ X_j^{(U)}, 当u_{ij, G+1}>X_j^{(U)} \end{cases}

5、选择

依照的是贪婪算法,即每次选取当前状态下最优的解

将新变量

u_{i,G+1}

和之前的

X_{ij, G}

代入目标函数,如果前者小于后者,则用

u_{i,G+1}

代替

X_{ij, G}

,否则依然选择

X_{ij, G}

为新一代个体,所以这里就是产生的新变量和原来变量之间的竞争

注意这里的比较只是同一个个体i的目标函数之间的比较,而不是和种群中所有个体比较

值得强调的是当前的种群中的所有成员必须都分别当作目标向量

X_{i, G}

进行一次这样的操作,以便在下一代中出现相同个数竞争者(即种群规模一直不变)。在进化过程中对每一代的最佳参数向量都进行评价,以记录最小化过程。

因为该算法是利用随机偏差扰动产生新个体的方式,所以可以获得一个收敛性非常好的结果,引导搜索过程向全局最优解逼近

特点

自己和同代其他人相互合作,和不同时期的自己相互竞争,有被内涵到

  • 易于实现,因为算法只涉及向量的加减运算,采用的又是随机概率值进行搜索,并且控制的参数比较少,只有缩放因子、交叉概率和种群规模三个参数,而这三个参数又都是具有实际指导性意义的
  • 算法性能好,具有较好的可靠性、高效性和鲁棒性,是一种高效的并行搜索算法(每次都是随机选取,交叉变异又都是针对第i个自变量本身),适用于求解一些利用常规的数学规划方法很难求解甚至无法求解的复杂优化问题,且对于非线性和不可求导的连续问题(即不存在对目标函数的限定),其求解效率比其他进化方法好
  • 自适应性好(自适应的含义是根据不同环境自动进行参数的调整的特性),参数可以是固定常数,也可以具有变异步长和搜索方向随时变化的能力
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 碎片学习录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
差分进化算法 (Differential Evolution)概述
Differential Evolution(DE)是由Storn等人于1995年提出的,和其它演化算法一样,DE是一种模拟生物进化的随机模型,通过反复迭代,使得那些适应环境的个体被保存了下来。但相比于进化算法,DE保留了基于种群的全局搜索策略,采用实数编码、基于差分的简单变异操作和一对一的竞争生存策略,降低了遗传操作的复杂性。同时,DE特有的记忆能力使其可以动态跟踪当前的搜索情况,以调整其搜索策略,具有较强的全局收敛能力和鲁棒性,且不需要借助问题的特征信息,适于求解一些利用常规的数学规划方法所无法求解的复杂环境中的优化问题。
里克贝斯
2021/05/21
1.9K0
差分进化算法 (Differential Evolution)概述
优化算法——差分进化算法(DE)
   差分进化算法(Differential Evolution, DE)是一种基于群体差异的启发式随机搜索算法,该算法是由R.Storn和K.Price为求解Chebyshev多项式而提出的。DE算法也属于智能优化算法,与前面的启发式算法,如ABC,PSO等类似,都属于启发式的优化算法。DE算法是我在一篇求解盒子覆盖问题论文中使用的一种优化算法。
felixzhao
2019/02/13
4K0
遗传算法经典实例matlab代码_遗传算法编码方式
遗传算法(Genetic Algorithm,GA)是进化计算的一部分,是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。该算法简单、通用,鲁棒性强,适于并行处理。
全栈程序员站长
2022/09/30
1.5K0
遗传算法经典实例matlab代码_遗传算法编码方式
进化算法中的差分进化算法(Differential Evolution)
差分进化算法(Differential Evolution,DE)是一种全局优化算法,可用于解决复杂的优化问题。它源于遗传算法和进化策略,通过模拟自然界中的进化过程来搜索最优解。差分进化算法被广泛应用于函数优化、参数优化、机器学习等领域,具有较好的鲁棒性和全局搜索能力。
大盘鸡拌面
2023/09/29
1.5K0
人工智能算法:基于Matlab遗传算法的实现示例
作为一种进化算法,遗传算法(GA, Genetic Algorithm)的基本原理是将问题参数编码为染色体,进而利用优化迭代的方法进行选择、交叉和变异算子操作来交换种群中染色体的信息,最终生成符合优化目标的染色体。
用户1143655
2023/02/23
4.1K0
人工智能算法:基于Matlab遗传算法的实现示例
数学建模--智能算法之遗传算法
遗传算法(Genetic Algorithm, GA)是一种基于自然选择和遗传学原理的优化技术,它模仿自然界中的生物进化过程,通过一系列操作(如选择、交叉、变异等)来寻找最优解。其基本思想是将种群中的所有个体的表现型映射为数值即编码,并利用随机化技术对一个被编码的种群进行迭代优化,从而逐步逼近问题的最优解。
用户11315985
2024/10/16
5440
数学建模--智能算法之遗传算法
遗传算法简单实例_遗传算法的特点有哪些
为更好地理解遗传算法的运算过程,下面用手工计算来简单地模拟遗传算法的各 个主要执行步骤。 例:求下述二元函数的最大值:
全栈程序员站长
2022/11/04
1.5K0
遗传算法简单实例_遗传算法的特点有哪些
遗传算法的matlab代码_遗传算法实际应用
(1)初始化。设置进化代数计数器 \(g=0\),设置最大进化代数 \(G\),随机生成 \(NP\) 个个体作为初始群体 \(P(0)\)。
全栈程序员站长
2022/10/01
1.9K0
遗传算法的matlab代码_遗传算法实际应用
详解R语言中的遗传算法
前言 人类总是在生活中摸索规律,把规律总结为经验,再把经验传给后人,让后人发现更多的规规律,每一次知识的传递都是一次进化的过程,最终会形成了人类的智慧。自然界规律,让人类适者生存地活了下来,聪明的科学家又把生物进化的规律,总结成遗传算法,扩展到了更广的领域中。 本文将带你走进遗传算法的世界。 目录 遗传算法介绍 遗传算法原理 遗传算法R语言实现 1. 遗传算法介绍 遗传算法是一种解决最优化的搜索算法,是进化算法的一种。进化算法最初借鉴了达尔文的进化论和孟德尔的遗传学说,从生物进化的一些现象发展起来,这些现象
CDA数据分析师
2018/02/08
2.9K0
详解R语言中的遗传算法
遗传算法(二)
在上一节中我给大家讲解了如何安装遗传算法工具箱,并给出了代码,今天我就给大家讲解一下如何使用工具箱,并且讲解一下遗传算法的使用。还是按照上次的代码。
巴山学长
2019/07/15
1.2K0
遗传算法(二)
matlab优化算法之遗传算法(含代码)【数学建模】
前言:上一篇文章中我们学习的模拟退火算法是通过模拟物体的物理退火过程得以实现的,今天我们要学习的遗传算法则是通过模拟生物学中物种的进化过程来实现的!
巴山学长
2021/05/31
22.3K1
matlab优化算法之遗传算法(含代码)【数学建模】
遗传算法详解(LINGO及MatlabGA工具箱求解实现)
遗传算法 1.前言 遗传算法是一种基于生物界自然群体遗传进化机制的自适应全局优化概率搜索算法。它与传统算法不同,不依赖梯度信息,而是通过模拟自然进化过程来搜索最优解。 例子:兔子的遗传进化      
Angel_Kitty
2018/04/17
6.6K1
遗传算法详解(LINGO及MatlabGA工具箱求解实现)
干货 | 遗传算法(Genetic Algorithm) (附代码及注释)
本文目录 01遗传算法定义 02生物学术语 03问题导入 04大体实现 05具体细节 06代码实现 字数 6739 字 阅读 预计阅读时间20分钟 01 什么是遗传算法? 1.1 遗传算法的科学定义
用户1621951
2018/06/11
26.7K0
人工智能算法:Matlab遗传算法工具箱使用方法
作为一种进化算法,遗传算法(GA, Genetic Algorithm)的基本原理是将问题参数编码为染色体,进而利用优化迭代的方法进行选择、交叉和变异算子操作来交换种群中染色体的信息,最终生成符合优化目标的染色体。
用户1143655
2023/02/23
3.5K0
人工智能算法:Matlab遗传算法工具箱使用方法
转载 | 遗传算法求解混合流水车间调度问题(附C++代码)
各位读者大家好,好久没有介绍算法的推文了,感觉愧对了读者们热爱学习的心灵。于是,今天我们带来了一个神奇的优化算法——遗传算法!
短短的路走走停停
2019/06/04
1.4K0
转载 | 遗传算法求解混合流水车间调度问题(附C++代码)
遗传算法_aforge遗传算法
遗传算法组成: 1.编码 2.适应度函数 3.遗传算子:选择、交叉、变异 4.运行参数
全栈程序员站长
2022/10/02
9800
遗传算法_aforge遗传算法
遗传算法求解混合流水车间调度问题(附C++代码)
各位读者大家好,好久没有介绍算法的推文了,感觉愧对了读者们热爱学习的心灵。于是,今天我们带来了一个神奇的优化算法——遗传算法!
用户1621951
2019/10/18
2.1K0
【优化算法】遗传算法(Genetic Algorithm) (附代码及注释)
遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。
短短的路走走停停
2019/05/14
27.8K2
【优化算法】遗传算法(Genetic Algorithm) (附代码及注释)
遗传算法入门_遗传算法流程示意图
  遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 。 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。因此在介绍遗传算法前有必要简单的介绍生物进化知识。
全栈程序员站长
2022/09/20
1.2K0
遗传算法入门_遗传算法流程示意图
差分进化算法(DE)求函数最小值
差分进化算法求函数 Z = 3 * cos(X .* Y) + X + Y , -4 <= X <= 4, -4 <= Y <= 4。
mwangblog
2018/11/30
1.9K0
差分进化算法(DE)求函数最小值
推荐阅读
相关推荐
差分进化算法 (Differential Evolution)概述
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档