遗传算法Genetic Algorithm

好家伙,回回都是这个点,再这样下去人估计没了,换个bgm《夜泊秦淮》,要是经典咏流传能投票选诗词,投票选歌,俺一定选这个

开始瞎叨叨

遗传算法的理论以及背景

这个东西其实就是一个根据大自然的规律——适者生存,优胜劣汰的现象所提出的随机算法,说白了,就是一种借鉴了自然界生物的进化的机制和自然遗传机制的一个随机算法,是美国的Holland教授首先于20世纪70年代提出的,其通过模拟自然界的生物进化的遗传规律来达到寻找最优解的目的,其是收到了达尔文进化论的物竞天择,适者生存的思想的启发,将优化问题和生物进化结合起来,进行对照,将生物进化引入到复杂问题的思想中,在此基础上,提出了求解复杂问题的遗传算法

遗传算法一般是通过使用数学的形式,通过计算机来进行仿真运算,将这些复杂问题的求解过程转换成类似生物进化的过程,其过程包含生物进化中的染色体基因的交叉、变异等情况,使用遗传算法,通常可以在求解较为复杂的组合优化问题时,能够比一些常规的优化算法获得到更好的结果,遗传算法作为一种有效的工具,已被人们广泛地应用在最优化问题的求解上

在遗传算法中呢,首先就是对优化问题的解进行编码,既然是生物进化的思想,那么编码后的一个解我们将其称为一个染色体,组成染色体的元素称为基因。一个群体由若干个染色体组成,染色体的个数称为群体的规模。

与自然界中的生存环境相对应,在遗传算法中用适应函数表示环境,它是已编码的解的函数,是一个解适应环境程度的评价。适应函数的构造一般与优化问题的指标函数相关。简单的情况下,直接用指标函数或者指标函数经过简单的变换后作为适应面数使用。一般情况下,适应函数值大则表示所对应的染色体适应环境的能力强。适应函数起着自然界中环境的作用。

当适应函数确定后,自然选择规律将以适应函数值的大小来决定一个染色体是否继续生存下去的概率。生存下来的染色体成为种群,它们中的部分甚至全部以一定的概率进行交配、繁行,从而得到下一代的群体。

交配是一个生殖过程,发生在两个染色体中间,作为双亲的两个染色体,交换部分基因之后,生殖出两个新的染色体,即问题的新解。交配或者称为杂交,是遗传算法区别于其他优化算法的最主要的特征。在进化的过程中,染色体的某些基因可能会产生变异,即表示染色体的编码发生了某些变化。一个群体的进化需要染色体的多样性,而变异对保持群体的多样性具有一定的作用。

如果将生物进化和遗传算法进行对比可以发现

生物进化中的环境,对应遗传算法里的适应函数

生物进化中的染色体,对应遗传算法里的解的编码

生物进化中的基因,对应遗传算法里的编码的元素

生物进化中的适应性,对应遗传算法里的适应值函数

生物进化中的个体,对应遗传算法里的问题的一个解

生物进化中的群体,对应遗传算法里的被选定的一组解

生物进化中的种群,对应遗传算法里的根据适应函数选择的一组解

生物进化中的交配,对应遗传算法里的以一定方式由双亲产生后代的过程

生物进化中的变异,对应遗传算法里的编码的某些分量发生了变化的过程

生物进化中的适者生存,对应遗传算法里的适应函数值最大的解被保留的概率最大

主要操作

在遗传算法中,选择,交配和变异是其三个主要的操作

选择方面,要依据适应值的大小,选择操作从规模为N的群体中随机的选择若干染色体构成种群,种群的规模可以自由设置,由于是依据适应值的大小进行随机选择的,适应值大的染色体肯那个会被多次选出,而适应值小的就有可能没有机会被选中,这就导致了可能一些适应值小的染色体会被淘汰,体现出了优胜劣汰的生物进化规律,有很多种方式进行选择,经常使用的是一种“轮盘赌”的方法,不过这个后面再说

在进化过程中,交配不是100%进行的

变异就是在二进制编码的时候,1变成了0,0变成了1,这对于一个群体保持多样性是有着不错的作用的,但是过量的变异也会对群体造成破坏,所以需要以一个很小的概率来限制变异的规模

具体描述遗传算法过程

其中,每一代中群体的规模是固定的,变量t表示当前的代数,以适应值最大者为最优解。遗传算法的具体过程为:

①首先给定群体规模N,交配概率p和变异概率pm,此时t=0

②然后随机生成N个染色体作为初始群体

③对于群体中的每一个染色体x(1, 2....,N)分别计算其适应值F(x)

④如果算法满足停止准则,则转⑩

⑤对群体中的每一个染色体x,使用下式计算概率

⑥依据计算得到的概率值,从群体中随机的选取N个染色体,得到种群

⑦依据交配概率p从种群中选择染色体进行交配,其子代进入新的群体,种群中未进行交配的染色体,直接复制到新群体中

⑧依据变异概率pm从新群体中选择染色体进行变异,用变异后的染色体代替新群体中的原染色体

⑨用新群体代替旧群体,使代数增加1,即t=t+1,转③

⑩进化过程中适应值最大的染色体,经解码后作为最优解输出

然后结束遗传算法

遗传算法的特点

遗传算法具有以下特点:

第一,遗传算法作为一个随机搜索算法,适用于数值求解具有多参数,多变量,多目标的复杂最优化问题

第二,遗传算法对待求解间题的指标函数没有什么特殊的要求,比如不要求诸如连续性、导数存在、单峰值假设等,甚至不需要显式地写出指标函数

第三,在经过编码以后,遗传算法几乎不需要任何与问题有关的知识,唯一需要的信息是适应值的计算,也不需要使用者对问题有很深入的了解和求解技巧,通过选择、交配和变异等简单的操作求解复杂的问题,是一个比较通用的优化算法

第四,遗传算法具有天然的并行性,适用于并行求解

由于遗传算法是一个随机搜索算法,程序的每一次运行,得到的结果可能是不一样的,那么遗传算法得到的解的质量是否有保证呢?得到最优解的可能性如何呢?这些就引出了遗传算法的收敛性定理

遗传算法的收敛性定理:如果在代的进化过程中,遗传算法每次保留到目前为止的最好解,并且算法以交配和变异为其随机化操作,则对于一个全局最优化问题,当进化代数趋于无穷时,遗传算法找到最优解的概率为1。

该定理从理论上保证了只要进化的代数足够多,则遗传算法找到最优解的可能性会非常大,在实际使用中,由于要考虑在可接受的有限时间内算法停止的问题,因此解的质量与算法的控制参数,如群体的规模、交配概率、变异概率和进化代数等有很大的关系

(未完,后面补全)

遗传算法Genetic Algorithm的更多相关文章

  1. 基于遗传算法(Genetic Algorithm)的TSP问题求解(C)

    基于遗传算法的TSP问题求解(C) TSP问题: TSP(Travelling salesman problem): 译作“旅行商问题”, 一个商人由于业务的需要,要到n个城市,每个城市之间都有一条路 ...

  2. 超详细的遗传算法(Genetic Algorithm)解析

    https://blog.csdn.net/u010451580/article/details/51178225 https://www.jianshu.com/p/c82f09adee8f 00 ...

  3. 遗传算法 Genetic Algorithm

    2017-12-17 19:12:10 一.Evolutionary Algorithm 进化算法,也被成为是演化算法(evolutionary algorithms,简称EAs),它不是一个具体的算 ...

  4. 【智能算法】超详细的遗传算法(Genetic Algorithm)解析和TSP求解代码详解

    喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 文章声明 此文章部分资料和代码整合自网上,来源太多已经无法查明出处,如侵犯您的权利,请联系我删除. 00 目录 遗传算法定义 生 ...

  5. 遗传算法(Genetic Algorithm)——基于Java实现

    一.遗传算法原理介绍 遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法.遗传算法是从代表问 ...

  6. MIP启发式算法:遗传算法 (Genetic algorithm)

    *本文主要记录和分享学习到的知识,算不上原创 *参考文献见链接 本文主要讲述启发式算法中的遗传算法.遗传算法也是以local search为核心框架,但在表现形式上和hill climbing, ta ...

  7. 遗传算法(Genetic Algorithm, GA)及MATLAB实现

    遗传算法概述: • 遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择.适者生存”的演化法则,它最初由美国Michigan大学的J. Hollan ...

  8. Evolutionary Computing: 2. Genetic Algorithm(1)

    本篇博文讲述基因算法(Genetic Algorithm),基因算法是最著名的进化算法. 内容依然来自博主的听课记录和教授的PPT. Outline 简单基因算法 个体表达 变异 重组 选择重组还是变 ...

  9. Evolutionary Computing: 3. Genetic Algorithm(2)

    承接上一章,接着写Genetic Algorithm. 本章主要写排列表达(permutation representations) 开始先引一个具体的例子来进行表述 Outline 问题描述 排列表 ...

随机推荐

  1. js实现页面下拉,区块(文字,图片等)左右淡入淡出效果

    html: <div class="box"> <span class="historybox"> </span> < ...

  2. Hadoop:Hadoop的安装

    CentOS7安装Hadoop需要有JDK,所以先下载安装JDK后,在进行安装Hadoop 下载Hadoop #联网状态下使用wget命令 wget http://archive.apache.org ...

  3. 压力测试工具:apache bench(ab)

    作为php后端工程师,除了实现业务需求之外,需要考虑的就是自己写的服务,在大并发下是否能正常运行了,例如在我之前文章讲到的,在并发下,数据库查询可能会造成脏读幻读等情况,导致业务不正常. 但是,在一般 ...

  4. Java on Visual Studio Code的更新 – 2021年6月

    Nick Zhu from Microsoft VS Code Java Team 大家好,欢迎来到 Visual Studio Code Java 更新的特别年中版.作为这篇文章的重点,我们将看看接 ...

  5. 前端-Vue基础3(父子组件交互)

    1.子组件往父组件传值 点击子组件的值,子组件自增,父组件的值也跟着自增 通过:this.$emit('change')方法向父组件暴露事件,在子组件中引用,可以调用父组件的方法 点击子组件触发cli ...

  6. SHELL 变量引用

    shell变量的引用非常重要,运用技巧灵活多变 变量的引用主要包含四类:双引号引用.单引号引用.反引号引用.反斜线引用 " " 双引号 屏蔽除美元符号$.反引号( ` )和反斜线( ...

  7. PYTHON 错误提示:ModuleNotFoundError: No module named 'cv2'

    ModuleNotFoundError: No module named 'cv2' 解决方法: pip install -i https://pypi.tuna.tsinghua.edu.cn/si ...

  8. AcWing 1086. 恨7不成妻(【代码简洁】标准记忆化搜索+超详解!!)

    看到这题用循环写的dp代码瑟瑟发抖~ 数位dp一般记忆化搜索的写法思维难度较低,也比较常用,这题的简洁代码应该就可以显现出其优越性 (用时4ms,可能比用循环写的dp还要快) 那这里补充一下记忆化搜索 ...

  9. 高校表白App-团队冲刺第十天

    今天要做什么 做一个类似于淘宝的小云播报 做了什么 没有完全实现,轮转实现,功能没有 遇到的问题 遇到的问题好多啊,感觉写一天都写不完,我还是好好学习一下再重新写吧

  10. 【16位RAW图像处理三】直方图均衡化及局部直方图均衡用于16位图像的细节增强。

    通常我们生活中遇到的图像,无论是jpg.还是png或者bmp格式,一般都是8位的(每个通道的像素值范围是0-255),但是随着一些硬件的发展,在很多行业比如医疗.红外.航拍等一些场景下,拥有更宽的量化 ...