代码链接放文末。

本文参考了很多张军老师《计算智能》的第四章内容。

本文来源:https://blog.csdn.net/qq_44186838/article/details/109181453

遗传算法

1.1 遗传算法简介

1.1.1 基本原理

重温高中生物哈哈!

遗传算法(Genetic Algorithm,GA)是进化计算的一个分支,是一种模拟自然界生物进化过程的随机搜索算法。

GA思想源于自然界“自然选择”和“优胜劣汰”的进化规律,通过模拟生物进化中的自然选择和交配变异寻找问题的全局最优解。它最早由美国密歇根大学教授John H. Holland提出,现在已经广泛应用于各种工程领域的优化问题之中。

遗传算法通过比较适应值区分染色体的优劣,适应值越大的染色体越优秀。评估函数涌过来计算染色体对应的适应值。

选择算子按一定的规则对群体的染色体进行选择,得到父代种群。(一般的,越优秀的染色体被选中的次数越多。)

交配算子作用于每两个成功交配的染色体,染色体交换各自部分的基因,形成两个子代染色体。子代染色体取代父代进入新种群,而没有交配的染色体自动进入新的种群。

变异算子使得新种群进行小概率的变异。染色体发生变异的基因改变数值,经过变异的新种群替代原种群进入下一次进化。


下面我们再来了解几个概念。


Holland的模式定理提出,遗传算法的实质是通过选择、交配和变异算子对模式进行搜索,低阶、定义长度较小且平均适应值高于群体平均适应值的模式在群体中的比例将呈指数级增长。即随着进化的不断进行,较优染色体的个数将快速增加。

积木块假设

积木块:指低阶、定义长度较小且平均适应值高于群体平均适应值的模式 。

积木块假设认为在遗传算法运行过程中,积木块在遗传算子的影响下能够相互结合,产生新的更加优秀的积木块,最终接近全局最优解 。

1.1.2 研究进展

这个大致看下就可以了。

1.2 遗传算法的流程

(1) 染色体编码
目前用于染色体编码的方法有格雷码编码、字母编码、多参数交叉编码等。这里仅给出两种常见的较为简单的编码方法:二进制编码方法和浮点数编码方法。

二进制编码方法


二进制编码操作简单,但当你的L较大时,计算难度会增大,难以解决精度要求高的问题,因此,我们需要寻求另外的编码方法。


(2) 群体的初始化

一般情况下,遗传算法在群体初始化阶段采用的是随机数初始化方法。采用生成随机数的方法,对染色体的每一维变量进行初始化赋值。初始化染色体时必须注意染色体是否满足优化问题对有效解的定义

如果在进化开始时保证初始群体已经是一定程度上的优良群体的话,将能够有效提高算法找到全局最优解的能力。

(3) 适应值评价

评估函数用于评估各个染色体的适应值,进而区分优劣。评估函数常常根据问题的优化目标来确定,比如在求解函数优化问题时,问题定义的目标函数可以作为评估函数的原型。
在遗传算法中,规定适应值越大的染色体越优。因此对于一些求解最大值的数值优化问题,我们可以直接套用问题定义的函数表达式。但是对于其他优化问题,问题定义的目标函数表达式必须经过一定的变换

(4) 选择算子

轮盘赌选择法

按适应值大小切分区域大小,即适应值越大的染色体占比越大,越有可能被选中,同时由于是随机选取,也保证了适应值小的染色体也有被选中的可能。

(5) 交配算子
在染色体交配阶段,每个染色体能否进行交配由交配概率Pc(一般取值为0.4到0.99之间)决定,其具体过程为:对于每个染色体,如果Random(0, 1)小于Pc则表示该染色体可进行交配操作(其中Random(0, 1)为[0, 1]间均匀分布的随机数),否则染色体不参与交配直接复制到新种群中。

每两个按照Pc交配概率选择出来的染色体进行交配,经过交换各自的部分基因,产生两个新的子代染色体。具体操作是随机产生一个有效的交配位置,染色体交换位于该交配位置后的所有基因。

注意:因为父代是两个染色体,生成的子代也是两个染色体,故种群染色体总数N值不会改变。

(6) 变异算子

染色体的变异作用于基因之上,对于交配后新种群中染色体的每一位基因,根据变异概率Pm判断该基因是否进行变异。

如果Random(0, 1)小于Pm,则改变该基因的取值(其中Random(0, 1)为[0, 1]间均匀分布的随机数)。否则该基因不发生变异,保持不变。


下面给出算法基本步骤




如果到这里有些困惑的话,没有关系,我们来看一个实例。


解题如下:





够简单理解吧。

**1.3 遗传算法的改进 **

没有完美的算法,只有适合的算法。下文会贴出每种问题对应的多种研究,感兴趣的可以自行上网查看。

1.3.1 算子选择



1.3.2 参数设置

群体规模N

影响算法的搜索能力和运行效率。
若N设置较大,一次进化所覆盖的模式较多,可以保证群体的多样性,从而提高算法的搜索能力,但是由于群体中染色体的个数较多,势必增加算法的计算量,降低了算法的运行效率。
若N设置较小,虽然降低了计算量,但是同时降低了每次进化中群体包含更多较好染色体的能力。
N的设置一般为20~100

染色体长度L

影响算法的计算量和交配变异操作的效果。
L的设置跟优化问题密切相关,一般由问题定义的解的形式和选择的编码方法决定。
对于二进制编码方法,染色体的长度L根据解的取值范围和规定精度要求选择大小。
对于浮点数编码方法,染色体的长度L 跟问题定义的解的维数D相同。
除了染色体长度一定的编码方法,Goldberg等人还提出了一种变长度染色体遗传算法Messy GA,其染色体的长度并不是固定的。

基因取值范围R

R视采用的染色体编码方案而定。
对于二进制编码方法,R ={0,1},而对于浮点数编码方法,R与优化问题定义的解每一维变量的取值范围相同。

交配概率Pc

决定了进化过程种群参加交配的染色体平均数目。
取值一般为0.4至0.99。也可采用自适应方法调整算法运行过程中的交配概率。

变异概率Pm

增加群体进化的多样性,决定了进化过程中群体发生变异的基因平均个数。
Pm的值不宜过大。因为变异对已找到的较优解具有一定的破坏作用,如果Pm的值太大,可能会导致算法目前处于的较好的搜索状态倒退回原来较差的情况。
Pm的取值一般为0.001至0.1之间。也可采用自适应方法调整算法运行过程中的Pm值。

适应值评价

影响算法对种群的选择,恰当的评估函数应该能够对染色体的优劣做出合适的区分,保证选择机制的有效性,从而提高群体的进化能力。
评估函数的设置同优化问题的求解目标有关。
评估函数应满足较优染色体的适应值较大的规定。
为了更好地提高选择的效能,可以对评估函数做出一定的修正。
目前主要的评估函数修正方法有:线性变换;乘幂变换;指数变换等。

终止条件

决定算法何时停止运行,输出找到的最优解,采用何种终止条件,跟具体问题的应用有关。
可以使算法在达到最大进化代数时停止,最大进化代数一般可设置为100~1000,根据具体问题可对该建议值作相应的修改。
也可以通过考察找到的当前最优解是否达到误差要求来控制算法的停止。
或者是算法在持续很长的一段进化时间内所找到的最优解没有得到改善时,算法可以停止。

1.3.3 混合遗传算法

提出混合遗传算法的原因有两个,一是遗传算法存在局部搜索能力较弱的缺陷,二是当遗传算法应用到专门的领域时往往不是最佳的方法。


1.3.4 并行遗传算法

并行计算
单指令流多数据流计算机
多指令流多数据流计算机
并行计算网络

串行计算
单指令流单数据流处理器

并行遗传算法一般有两种表现形式:标准型并行方法和分解型并行方法。



代码下载链接,有需要的请自行提取,不想hua前的朋友,可评论同我说,我会回复你,但可能会比较慢。祝好!

https://download.csdn.net/download/qq_44186838/62603353

智能优化算法大礼包

一文搞懂什么是遗传算法Genetic Algorithm【附应用举例】相关推荐

  1. 一文搞懂华为的流程管理系统(附关键流程图)

    官方网站 www.itilzj.com 文档资料: wenku.itilzj.com  前言: 任正非先生一直强调客户.流程与绩效是企业管理中最重要的三件事.事实上,华为导入咨询公司的一个重点就是&q ...

  2. 一文搞懂RNN(循环神经网络)

    基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...

  3. 一文搞懂 Python 的 import 机制

    一.前言 希望能够让读者一文搞懂 Python 的 import 机制 1.什么是 import 机制? 通常来讲,在一段 Python 代码中去执行引用另一个模块中的代码,就需要使用 Python ...

  4. python语言语句快的标记是什么_一文搞懂Python程序语句

    原标题:一文搞懂Python程序语句 程序流 Python 程序中常用的基本数据类型,包括: 内置的数值数据类型 Tuple 容器类型 String 容器类型 List 容器类型 自然的顺序是从页面或 ...

  5. 一文搞懂 Java 线程中断

    转载自   一文搞懂 Java 线程中断 在之前的一文<如何"优雅"地终止一个线程>中详细说明了 stop 终止线程的坏处及如何优雅地终止线程,那么还有别的可以终止线程 ...

  6. 一文搞懂HMM(隐马尔可夫模型)-Viterbi algorithm

    ***一文搞懂HMM(隐马尔可夫模型)*** 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度.熵越大,系统越无序,意味着系统结构和运动的不确定和无规则:反之,,熵越小,系统越有序, ...

  7. 一文搞懂如何使用Node.js进行TCP网络通信

    摘要: 网络是通信互联的基础,Node.js提供了net.http.dgram等模块,分别用来实现TCP.HTTP.UDP的通信,本文主要对使用Node.js的TCP通信部份进行实践记录. 本文分享自 ...

  8. 【UE·蓝图底层篇】一文搞懂NativeClass、GeneratedClass、BlueprintClass、ParentClass

    本文将对蓝图类UBlueprint的几个UClass成员变量NativeClass.GeneratedClass.BlueprintClass.ParentClass进行比较深入的讲解,看完之后对蓝图 ...

  9. 一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下

    B站实操视频更新 跟着拉面学习AWS--EC2, IGW, RT, NAT, SG 简介 长文多图预警,看结论可以直接拖到"总结"部分 本文承接上一篇文章介绍以下 AWS 基础概念 ...

最新文章

  1. PHP代理模式Proxy Mode
  2. 人脸关键点估计人头姿态
  3. python怎么随机生成数据_Python-随机生成数据
  4. [maven] springboot将jar包打包到指定目录
  5. 天池 在线编程 推荐朋友(哈希)
  6. ubuntu 文件及子文件夹的权限的查看及修改
  7. 分享开发HTML5手机游戏的5个注意要点
  8. 跨平台开发实践之Flutter
  9. java正整数正则表达式_Java 正则表达式
  10. 计算机信息安全技术 学习笔记
  11. 图文解析大二层网络及VxLAN技术
  12. c语言鼠标滚动条,xtraScrollableControl 滚动条随鼠标滚动
  13. 无法使用内置管理员账户打开Microsoft Edge
  14. 马斯克在 Clubhouse 上「开房」,讲创业、公司进展,还当了回记者
  15. word文档无法编辑且点击后每次跳到首页
  16. #css 盒子div属性
  17. 【入坑Java第二天】
  18. 安卓手机如何投屏到电脑--直播 反控 玩游戏
  19. Android跟我一起来开发--微影之架构补充篇
  20. 范德堡计算机科学硕士,范德堡大学计算机科学理学硕士研究生申请要求及申请材料要求清单...

热门文章

  1. 鬼吹灯java攻略_密室逃脱鬼吹灯攻略完美过关图文详解
  2. Pygame中blit( )方法讲解(Surface对象)
  3. 树和二叉树的基本概念及性质
  4. CCD相机和CMOS相机的区别
  5. 什么剪辑软件好用?视频剪辑这样做
  6. 每天坚持收小钱,能改命!
  7. 7 php 内存泄漏_PHP内存泄漏分析定位
  8. 二叉平衡树复杂度!!!
  9. 技术美术知识学习5200:光追相关概念介绍
  10. 微信网页开发wx.getLocation在安卓手机上的一个坑