| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> Python_差分进化算法入门学习_代码例程 -> 正文阅读 |
|
[Python知识库]Python_差分进化算法入门学习_代码例程 |
目录 前言差分进化算法DE是一种高效的全局优化算法。它也是基于群体的启发式搜索算法,群中的每个个体对应一个解向量。差分进化算法的进化流程则与遗传算法非常类似,都包括变异、杂交和选择操作,但这些操作的具体定义与遗传算法有所不同。这一点格外需要注意,特别是刚从遗传算法过度到差分进化算法的小伙伴。本文会跟大家一起学习,对基础概念进行简单讲解,最后以一个案例作为载体进行代码编写,熟悉差分进化算法。 基础概念希望大家阅读的时候已经有了基本的遗传算法的知识,这样学习差分进化算法就会快很多,我会尽量详细地介绍差分进化算法,如果实在有疑惑的同学可以参考一下我之前关于遗传算法的几篇博客。进入正文。 差分进化算法操作顺序与遗传算法类似,却有自己的独特之处。下面按顺序进行讲解。 初始化:可以理解为生成初代种群,但是与遗传算法不同的是,它的每一个个体是实数值参数向量,遗传算法可以是二进制编码,这一点的不同,也间接地暗示了之后在种群进行迭代的时候,遗传算法时采取的变异和交叉的方式,不再适用于差分进化算法。 变异:差分进化算法中有如下规定:其变异向量通过下面的方式产生。 其中三个x为种群中任取的三个个体,F为变异算子,有时会随着迭代次数而发生改变。变异操作不是在原有种群上的操作,而是利用原有种群,直接生成了一个新的种群,称为变异种群。这一点跟遗传算法极为不同。 交叉:差分进化算法一定是先变异,再进行交叉,因为交叉是这样规定的: 生成一个随机数j,j和预先定义好的交叉算子CR比大小。如果j大,把变异种群的某一列染色体给交叉种群,否则把原种群的某一列染色体给变异种群。交叉算子CR的取值在0~1之间。 这里参考了《智能优化算法及其matlab实例第二版》的说法,把交叉操作产生的新种群称为交叉种群,但其实我个人理解,就类似遗传算法中产生的新一代种群,最后把新种群和初代种群放在一起用适应度函数进行筛选,思路的本质是不变的。这里进行交叉目的也是为了增加种群的扰动因素。 选择:这个就跟遗传算法类似了,用适应的函数去评估新的种群与原始种群,从里面挑好的出来组成下一代,这部分就略过。 代码实现这里选的例子其实是十个变量让其平方和最小,我在这篇博客里面有利用遗传算法对其进行优化求解,以及对问题的详细说明,感兴趣的同学可以对比着看一下: 下面直接上代码了,都是很常规的操作,没有什么特殊的处理,所以就不讲解代码了。
结果展示收敛速度还是很快的,下面是对应的y值以及其中一个x的收敛情况。需要提出来强调的是,差分进化算法真的速度特别快,遗传算法求解的时候,需要等待一段时间,但是差分进化基本上是秒出结果,很厉害。
? ?参考资料[1]差分进化算法-百度百科 [2]《智能优化算法及其matlab实例第二版》 |
|
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/26 2:23:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |