遗传算法是计算数学中用于解决最优化的搜索算法,是进化算法的一种。进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择以及杂交等。

一.遗传算法思想

  借鉴生物进化论,遗传算法将要解决的问题模拟成一个生物进化的过程,通过复制、交叉、突变等操作产生下一代的解,并逐步淘汰掉适应度函数值低的解,增加适应度函数值高的解。这样进化N代后就很有可能会进化出适应度函数值很高的个体。

  举个例子,使用遗传算法解决“0-1背包问题”的思路:0-1背包的解可以编码为一串0-1字符串(0:不取,1:取) ;首先,随机产生M个0-1字符串,然后评价这些0-1字符串作为0-1背包问题的解的优劣;然后,随机选择一些字符串通过交叉、突变等操作产生下一代的M个字符串,而且较优的解被选中的概率要比较高。这样经过G代的进化后就可能会产生出0-1背包问题的一个“近似最优解”。

交叉(Crossover):染色体交叉是以一定的概率发生的。2条染色体交换部分基因,来构造下一代的2条新的染色体。例如:

交叉前:

00000|011100000000|10000

11100|000001111110|00101

交叉后:

00000|000001111110|10000

11100|011100000000|00101

变异(Mutation):在繁殖过程,新产生的染色体中的基因会以一定的概率出错,称为变异。变异发生的概率记为Pm 。例如:

变异前:

000001110000000010000

变异后:

000001110000100010000

复制(Copy):每次进化中,为了保留上一代优良的染色体,需要将上一代中适应度最高的几条染色体直接原封不动地复制给下一代。

适应度函数 ( Fitness Function ):用于评价某个染色体的适应度。有时需要区分染色体的适应度函数与问题的目标函数。例如:0-1背包问题的目标函数是所取得物品价值,但将物品价值作为染色体的适应度函数可能并不一定适合。适应度函数与目标函数是正相关的,可对目标函数作一些变形来得到适应度函数。

二、遗传算法的流程

在算法初始阶段,它会随机生成N种可行解,也就是第一代染色体。

然后采用适应度函数分别计算每一条染色体的适应程度,并根据适应程度计算每一条染色体在下一次进化中被选中的概率

通过“交叉”,生成N-M条染色体;

再对交叉后生成的N-M条染色体进行“变异”操作;

然后使用“复制”的方式生成M条染色体;

到此为止,N条染色体生成完毕!紧接着分别计算N条染色体的适应度和下次被选中的概率。

这就是一次进化的过程,紧接着进行新一轮的进化。

进化终止条件:进化的次数达到限定次数,或者结果误差在允许范围之内。

三、遗传算法的优缺点

优点

1. 全局最优

遗传算法更有可能找到全局最大值。这是由于使用了一组候选解,而不是一个候选解,而且在许多情况下,交叉和变异操作将导致候选解与之前的解有所不同。只要设法维持种群的多样性并避免过早趋同(premature convergence),就可能产生全局最优解。

2. 处理复杂问题

由于遗传算法仅需要每个个体的适应度函数得分,而与适应度函数的其他方面(例如导数)无关,因此它们可用于解决具有复杂数学表示、难以或无法求导的函数问题。

3. 处理缺乏数学表达的问题

遗传算法可用于完全缺乏数学表示的问题。这是由于适应度是人为设计的。例如,想要找到最有吸引力颜色组合,可以尝试不同的颜色组合,并要求用户评估这些组合的吸引力。使用基于意见的得分作为适应度函数应用遗传算法搜索最佳得分组合。即使适应度函数缺乏数学表示,并且无法直接从给定的颜色组合计算分数,但仍可以运行遗传算法。

4. 耐噪音

遗传算法通常具有鲁棒性,这要归功于反复交叉和重新评估个体的操作。

缺点

1. 需要特殊定义

将遗传算法应用于给定问题时,需要为它们创建合适的表示形式——定义适应度函数和染色体结构,以及适用于该问题的选择、交叉和变异算子。

2. 超参数调整

遗传算法的行为由一组超参数控制,例如种群大小和突变率等。将遗传算法应用于特定问题时,没有标准的超参数设定规则。

3. 计算密集

种群规模较大时可能需要大量计算,在达到良好结果之前会非常耗时。

4. 过早趋同

如果一个个体的适应能力比种群的其他个体的适应能力高得多,那么它的重复性可能足以覆盖整个种群。这可能导致遗传算法过早地陷入局部最大值,而不是找到全局最大值。为了防止这种情况的发生,需要保证物种的多样性。

5. 无法保证的解的质量

遗传算法的使用并不能保证找到当前问题的全局最大值(但几乎所有的搜索和优化算法都存在此类问题,除非它是针对特定类型问题的解析解)。通常,遗传算法在适当使用时可以在合理的时间内提供良好的解决方案。

参考链接:

https://www.cnblogs.com/heaad/archive/2010/12/23/1914725.html

https://zhuanlan.zhihu.com/p/33042667

遗传算法(genetic algorithm)简介相关推荐

  1. 算法高级(4)-遗传算法(Genetic Algorithm)简介

    01 什么是遗传算法? 1.1 遗传算法的科学定义 遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过 ...

  2. 路径算法:遗传算法 (Genetic Algorithm, GA)

    遗传算法简介 遗传算法是受自然进化理论启发的一系列搜索算法.通过模仿自然选择和繁殖的过程,遗传算法可以为涉及搜索,优化和学习的各种问题提供高质量的解决方案.同时,它们类似于自然进化,因此可以克服传统搜 ...

  3. 遗传算法Genetic Algorithm

    文章目录 遗传算法Genetic Algorithm 1. 简介 1.1 简介 1.2 相关概念介绍 1.2.1 选择(复制) 1) 轮盘赌选择法 2) 随机遍历抽样法 3) 锦标赛选择法 4) 比例 ...

  4. 遗传算法 python包_遗传算法 (Genetic Algorithm)

    遗传算法( Genetic Algorithm )又叫基因进化算法,或进化算法.属于启发式搜索算法一种,这个算法比较有趣,并且弄明白后很简单,写个 100-200 行代码就可以实现.在某些场合下简单有 ...

  5. 【深度学习入门到精通系列】遗传算法 (Genetic Algorithm)

    文章目录 1 遗传算法概述 2 遗传算法 2.1 找一个好的fitness方程 2.2 DNA 编码 2.3 代码实现 3 配对句子 4 旅行商问题 5 Microbial Genetic Algor ...

  6. 遗传算法(Genetic Algorithm)从了解到实例运用(上)(python)

    前言 本文主要介绍了数学建模常用模型遗传算法,从原理出发到编程实现再到实例运用.笔者参与过大大小小五次数学建模,个人觉得该优化算法值得一学. 提示:以下是本篇文章正文内容 一.遗传算法由来 遗传算法的 ...

  7. 遗传算法(Genetic Algorithm,GA)实现数据排序,python

    遗传算法(Genetic Algorithm,GA)实现数据排序,python 遗传算法是一种比较广泛.通用的算法体系,为了说明遗传算法的原理和实现,现在用GA解决一个计算机科学最基本.最古老的问题: ...

  8. 【算法】超详细的遗传算法(Genetic Algorithm)解析

    转自:https://www.jianshu.com/p/ae5157c26af9 [算法]超详细的遗传算法(Genetic Algorithm)解析 00 目录 遗传算法定义 生物学术语 问题导入 ...

  9. uniform crossover(均匀交叉),遗传算法(Genetic Algorithm,GA),python

    uniform crossover(均匀交叉),遗传算法(Genetic Algorithm,GA),python 假设有双亲p1和p2的二进制基因染色体表达,子代的基因以等概率(50%)来自双亲中之 ...

最新文章

  1. CentOS6.5挂载windows共享文件夹
  2. JQuery面试题1
  3. 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 最简单用法 | 一行代码搞定权限申请 | 推荐用法 )
  4. IBASE save
  5. c 调用c语言写的dll文件路径,手把手教你用C/C++语言创建及调试动态库DLL程序
  6. [转帖]linux /proc目录下的文件为何无法用vi编辑保存
  7. 对飞行前请求的响应未通过访问控制检查:它没有http ok状态。_HTTP 缓存
  8. 据说程序员是这样写代码的
  9. API文档打开显示'已取消到该网页的导航'的解决方法
  10. 110 AddressBook
  11. php 鼠标 移动 手型,JS实现的鼠标跟随代码(卡通手型点击效果)
  12. python小海龟画房子编程_教孩子学Python编程之海龟画图(一)
  13. 鸿蒙合香丸是治胃的吗,何任大师治胃病的三个独家良方
  14. 【前端实例代码】使用 HTML CSS 和 JavaScript 实现具有彩色发光霓虹灯效果的数字时钟|前端开发 网页制作 基础入门教程
  15. java 当前时间戳_通过各种方法 获取当前系统时间、时间戳
  16. java 字节码操作图和JAVAssist库图
  17. Hexo-零基础搭建个人博客(详解)
  18. C语言实现选择法排序
  19. 23个PR导出视频渲染设置PR预设(Adobe Premiere Pro Media Encoder导出预设)
  20. Java线程安全集合

热门文章

  1. 时间序列计量经济模型
  2. mysql 浮动ip_MySQL配置HeartBeat实现心跳监控和浮动IP
  3. 如何在Windows 8 中关闭用户账户控制(UAC)
  4. 计算机操作系统实验,电脑模拟器使用Bochs需要的文件bochsrc
  5. 苹果ppt_苹果最新发布会中 库克的这段PPT演讲堪称惊艳!
  6. 春运购票时间范围一览
  7. 证券APP十佳排行,移动金融安全待提升
  8. 【Science】破解密码“AlphaGo”诞生,训练Gan破解27%LinkedIn测试集密码
  9. 输入三个班,每班10个学生的成绩,求和并求平均分
  10. Tips--对卷积的物理意义的理解