好久没来更新了,今年一直在做一些还挺有意思的事情,最近一个月在研究遗传算法,学的也不是特别深,可以和大家分享一些很简单的心得,顺便自己再理理思路。


1 科学定义:

遗传算法(Genetic Algorithm,GA)起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,借鉴了达尔文的进化论和孟德尔的遗传学说。本质上是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地搜索过程以求得最佳解。

2  相关术语:

        1 基因型(genotype):性状染色体的内部表现

        2 表现型(phenotype):染色体决定的形状的外部表现,或者说,根据基因形成的个体的外部表现;

        3 进化(evolution):种群逐渐适应生存环境,品质不断得到改良。生物的进化是以种群的形式进行的;

        4 适应度(fitness):度量某个物种对生存环境的适应程度

        5 选择(selection):以一定的概率从种群中选择若干个个体。一般,选择过程是一种基于适应度的优胜劣汰的过程;

        6 复制(reproduction):细胞分裂时,遗传物质DNA通过复制而转移到新产生的细胞中,新细胞就继承了旧细胞的基因

        7 交叉(crossover):两个染色体的某一相同位置处DNA被切断,前后两串分别交叉组合形成两个新的染色体,也称为基因重组或杂交;

图2.1  一点交叉

图2.2  两点交叉

图2.3  均匀交叉

        8 变异(mutation):复制时可能(很小的概率)产生某些复制差错,变异产生新的染色体,表现出新的性状;

图2.4  变异

        9 编码(coding):DNA中遗传信息在一个长链上按一定的模式排列。遗传编码可看作从表现型到基因型的映射;

        10 解码(decoding):基因型到表现型的映射;

        11 个体(individual):指染色体带有特征的实体;

        12 种群(population):个体的集合,该集合中个体数称为种群的大小;

3  如何理解遗传算法

遗传算法中的每一条染色体,对应着遗传算法的一个解决方案,一般我们用适应性函数(fitness function)来衡量这个解决方案的优劣。所以从一个基因组到其解的适应度形成一个映射。可以把遗传算法的过程看作是一个在多元函数中寻找最优解的过程。可以这样想象,这个多维曲面里面有数不清的“山峰”,而这些山峰所对应的就是局部最优解。而其中也会有一个“山峰”的海拔最高,那么这个就是全局最优解。而遗传算法的任务就是尽量爬到最高峰,而不是陷落在一些小山峰。(另外,值得注意的是遗传算法不一定要找“最高的山峰”,如果问题的适应度评价是越小越好的话,那么全局最优解就是函数的最小值,对应的,遗传算法所要找的就是“最深的谷底”,即遗传算法所寻找的结果是根据适应度函数寻找到的最优解)。

4  遗传算法解决“袋鼠跳问题”

既然我们将函数曲线理解为一个一个山峰和山谷组成的山脉。那么我们可以设想得到的每一个解就是一只袋鼠,我们希望它们不断向更高处跳去,直到跳到最高的山峰。所以求最大值的过程就转化成一个“袋鼠跳”的过程。

遗传算法的实现过程实际上就像自然界的进化过程那样。首先寻找一种对问题潜在解进行“数字化”编码的方案(建立表现型和基因型的映射关系)。然后用随机数初始化一个种群(那么第一批袋鼠就被随意地分散在山脉上),种群里面的个体是解的数字化的编码。接下来,通过适当的解码过程之后(得到袋鼠的位置坐标),用适应性函数对每一个基因个体作一次适应度评估(袋鼠爬的越高其适应度也就越高)。用选择函数按照某种规定择优选择(每隔一段时间,在山上射杀一些所在海拔较低的袋鼠,以保证袋鼠总体数目持平)。让个体基因发生变异(让袋鼠可以随机地跳一跳),然后产生子代(希望存活下来的袋鼠是多产的)。

遗传算法并不保证你能获得问题的最优解(这一点在后续的实践中也会有相应说明),但是使用遗传算法的最大优点在于你不必去了解和操心如何去找最优解(不必去指导袋鼠往哪边跳,跳多远),只需要简单否定一些表现不好的个体就行了。

4.1  遗传算法的优点

1)与问题领域无关且快速随机的全局搜索能力。传统优化算法是从单个初始值迭代求最优解的;容易误入局部最优解。遗传算法从串集开始搜索,覆盖面大,利于全局择优。

2)搜索从群体出发,具有潜在的并行性,可以进行多个个体的同时比较鲁棒性高

3)搜索使用评价函数启发,过程简单

4)使用概率机制进行迭代,具有随机性。遗传算法中的选择、交叉和变异都是随机操作而不是确定的精确规则。这说明遗传算法是采用随机方法进行最优解搜索选择体现了向最优解迫近交叉体现了最优解的产生变异体现了全局最优解的覆盖

5)具有可扩展性,容易与其他算法结合。遗传算法求解时使用特定问题的信息极少,仅仅使用适应值这一信息进行搜索,并不需要问题导数等与问题直接相关的信息。遗传算法只需适应值和串编码等通用信息,故几乎可处理任何问题,容易形成通用算法程序。

6)具有极强的容错能力。遗传算法的初始串集本身就带有大量与最优解甚远的信息通过选择、交叉、变异操作能迅速排除与最优解相差极大的串;这是一个强烈的滤波过程;并且是一个并行滤波机制。故而,遗传算法有很高的容错能力。

遗传算法具有良好的全局搜索能力,可以快速将解空间中的全体解搜索出,而不会陷入局部最优解的快速下降陷阱;并且利用其内在的并行性,可以方便地进行分布式计算,加快求解速度。

4.2  遗传算法的缺点

​        1)遗传算法的编程实现比较复杂,首先需要对问题进行编码,找到最优解之后还要对问题进行解码

​        2)三个算子的实现也有许多参数,如交叉率和变异率,并且这些参数的选择严重影响解的品质,而目前这些参数的选择大部分依靠经验。

​        3)没有能够及时利用网络的反馈信息,故算法的搜索速度比较慢,需要较精确的解需要较多的训练时间。

​        4)算法对初始种群的选择有一定的依赖性,能够结合一些启发算法进行改进(这是重点后续也会讲到)。

​        5)算法的并行机制的潜在能力没有得到充分的利用,这也是当前遗传算法的一个研究热点方向。

遗传算法(一)-- 什么是遗传算法相关推荐

  1. 遗传算法c语言程序,遗传算法c语言代码.doc

    遗传算法c语言代码 遗传算法代码 #include #include #include #include #include struct group //染色体的结构 { int city[citie ...

  2. 遗传算法(四)——遗传算法的基本实现技术

    目录 3.遗传算法的基本实现技术 3.1编码方法 3.1.1二进制编码方法 3.1.2格雷码编码方法 3.1.3浮点数编码方法 3.1.4 符号编码方法 3.2适应度函数 3.2.1目标函数与适应度函 ...

  3. 遗传算法:一:遗传算法简介

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

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

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

  5. python遗传算法八皇后_遗传算法之:八皇后问题

    八皇后问题: 在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法.正确的解有很多个,遗传算法并不直接计算一共有多少个解,而是寻找满 ...

  6. 新安江遗传算法c语言,基于遗传算法的新安江模型参数优化率定(四)

    4.3.1新安江三水源模型 //新安江三水源模型.hios #include 算法 #include 函数 #include 优化 #include spa const intVariableNum ...

  7. 遗传算法占用计算机空间,遗传算法综述摘要.doc

    随着经济社会的迅猛发展, 人类科学研究与生产活动的广度与深度都大大拓展了,其中涌现出的大量具有各种非线性.不确定.不能精确解析以及建模机理复杂的新课题对信息与控制科学提出了前所未有的挑战.正是在这种背 ...

  8. python 遗传算法 agv_基于改进遗传算法的AGV路径规划

    基于改进遗传算法的 AGV 路径规划 苑光明,翟云飞,丁承君,张 鹏 [摘 要] [摘 要] 针对 AGV 在自动化生产线中原有路径规划算法存在路径拐 弯次数多,不利于 AGV 自动控制的问题,提出了 ...

  9. 异同点 模拟退火 遗传算法 邻域搜索_遗传算法与模拟退火算法比较

    一.遗传算法与模拟退火算法比较 分析模拟退火算法的基本原理可以看出,模拟退火算法是 通过温度的不断下降渐进产生出最优解的过程, 是一个列马尔科 夫链序列,在一定温度下不断重复 Metropolis 过 ...

  10. matlab 遗传算法 等式约束,关于MATLAB遗传算法工具箱不等式约束

    过去很久了,之前写论文的经验分享一下. 写毕业论文的时候需要用到遗传算法,网上查了很多资料,由于没时间认真去学算法的内部结构,最后还是选择了MATLAB自带的遗传算法工具箱(MATLAB2017-GA ...

最新文章

  1. Python学习笔记2 基本数据类型
  2. 前端 重构时需要注意的事项_驾驶式扫地车的功能特点和使用时需要注意事项...
  3. c++还有一个小时考试
  4. 什么是Java序列化,如何实现java序列化
  5. [HOW TO]-ubuntu20.10搭建openjrok服务指南
  6. 如何使用此功能强大的工具将Wemo添加到Homekit
  7. Mycat监控_监控平台安装zookeeper_作为配置中心注册发现用---MyCat分布式数据库集群架构工作笔记0036
  8. sina邮箱的发件服务器拒绝,新浪帮助-常见问题
  9. IDEA 的这款插件真是逆天了,代码那都不是事!
  10. 二十四节气之夏至养生篇
  11. 吉首大学期末计算机考试,吉首大学微机原理期末考试试卷.doc
  12. IEEE 投稿参考文献格式bib
  13. Python 格式化输出详解
  14. 等保2.0.第十一章.等保2.0实战(下)
  15. D - Petya and Array(树状数组,二分)
  16. 苹果手机免越狱群控无需硬件即插即用高清投屏控制操作
  17. 浅谈我国中小企业融资的问题及对策_毕业论文(20180404104959)
  18. 编程逻辑入门必备2:归纳推理
  19. 批量微信过滤开通助手 急速微信筛选开通助手
  20. 刚柔相济 端庄大方——张銅彦行楷书摭谈

热门文章

  1. PhP Socket+Redis 实现客户端
  2. 黑科技,用这个工具来对任意方法进行Hook
  3. 使用xdebug调试php详细教程 原创
  4. rockpi4b 烧写固件到SD卡
  5. [深度学习]人工神经网络中激励函数作用详解
  6. OutputDebugString函数
  7. android dialog 详解,详解android dialog自定义实例
  8. Silver Cow Party (最短路)
  9. win32下Qt5BLE蓝牙开发笔记
  10. 离散数学 第二章 谓词逻辑 2-6 前束范式