遗传算法入门C1

觉得有用的话,欢迎一起讨论相互学习~Follow Me

参考文献

遗传算法历史

  • 遗传算法(GA)是从生物进化的角度考虑提出来的方法,19世纪达尔文在大量观察基础上总结了大自然进化规律,即优胜劣汰:后来孟德尔通过豌豆实验发现了遗传规律、分离规律和自由组合规律。遗传是指父代的基因将会遗传到子代中去,父代和子代具有相似性,同时,父代与子代也会有不同点,否则,从进化角度考虑,父代和子代无差别,物种没有出现进化。当子代中出现不适应生存的个体时,将会逐渐被环境淘汰,具有环境生存优势的个体将生存下来,这样遗传通过基因传递,并和环境相互作用,让基因朝着有利于生存的方向进化,优良的基因库就得以保存。
  • 在19世纪60年代,科学家Fraser在其论文中首先提到了选择和突变操作。密西
    根大学教授J.Holland在20世纪70年代研究自然和人工自适应系统时,首先提出了遗传算法基本形式。在80年代Goldberg根据前人研究成果,将遗传算法主要过程分为 选择、遗传和变异三部分由于遗传算法适应能力较强,同时具备较强的全局搜索能力,使遗传算法在各个领域都得到了广泛的应用,同时也促使遗传算法在理论上得到了很大的发展
  • 运用遗传算法求解实际问题时, 我们需要将目标问题同遗传算法建立联系, 即通过遗传编码建立关联。 每一个编码可以称为个体或者染色体,多个解的个体构成了种群。 遗传算法通过模拟生物进化对种群中个体进行 选择、交叉、变异操作 ,能将优秀的基因保留下来,传递给后代,使种群向最优方向进化。

    遗传编码

  • 运用遗传算法寻求最优解时,在确定目标函数后,需要把函数变量转化成染色体表现形式,编码的过程必须满足以下条件:
    1. 必须保证解的空间中的所有解都在编码空间内
    2. 每一个解都能通过交叉和变异操作转化成解的空间中其他任意解
    3. 每一个染色体都是对应解的空间内的一个特定解
  • 遗传编码方式很重要,同一问题不同的编码方式可能使遗传算法的出来的结果出现较大的差异,好的编码方式能提高求解效率,因此,需要根据求解问题的特点决定编码方式。根据前人总结,编码方式一般有二进制编码、浮点数编码和格雷码编码等编码形式。

    适应度函数

  • 遗传算法为了保证种群向着对环境适应能力较强的方向进化,就需要一个 评价标准 保证某一代中较优秀的个体能 有较大的概率将基因遗传给下一代 ,因此,遗传算法中就引入了 适应度函数 的概念。 个体中适应度值较大,其个体就有较大的概率遗传给下一代 反之,适应度值小的,其个体淘汰的概率就比较高,模拟进化过程中的优胜劣汰。


遗传操作

选择

选择操作的目的是为了将 当代 种群中 适应度值较高 的个体保存下来,将 适应度值低的个体淘汰 ,选择操作的过程中 本身不会产生任何新的个体 。但是选择操作由于是一个 随机选择过程 ,只是表示适应度值较高的个体将 有较高的概率 将自身基因遗传给下一代,并不表示适应度值较低的个体一定会淘汰, 但是,总体的趋势会是基因库中的基因越来越好,适应度值越来越高。选择操作的方法目前主要有 轮盘赌选择、最优保留法、期望值法 等等。

轮盘赌选择法

  • 轮盘赌选择法又称为比例选择法,其选择方式是随机的,不过适应度值较高的被选择的概率大。设定种群规模为N,其中个体i的适应度值为\(f_i\),在选择操作中其被选中的概率为:\[P_i=\frac{f_i}{\sum^{N}_{i=1}f_{i}}\]
    由于轮盘赌选择法是随机选择的,因此,有可能将适应度值较大的个体淘汰,导致最终结果可能不能寻找到最优解,通常,可以将 最优保留法和轮盘赌选择法结合选择 ,先通过 最优保留法 将适应度值最高的个体保留,之后再进行 轮盘赌选择法进行选择

    交叉

  • 交叉操作在遗传算法中占据比较重要的作用,遗传算法中 产生新个体的主要就是通过交叉操作完成的 交叉操作的具体过程是 父代随机选取两个个体,按照某种规则对染色体上的基因相互交换,形成新的个体 ,这样做的目的是 为了将优秀的基因段通过交叉的方式有效进行整合,使下一代个体的适应度值比上一代更高 。常见的交叉规则有 单点交叉、多点交叉和均匀交叉 三种方式。
    • 单点交叉 的方式是在染色体上随机选定一个基因点作为交叉位置,父代中两染色体在此处的基因信息互换,这样就形成了两个子代个体。如下图所示,对其基因采用二进制编码,若随机交叉点为第三基因位。
    • 多点交叉 是指染色体中有 两个或两个以上的基因位点交叉 ,图中染色体同样采用二进制编码,假定多点交叉为随机取两个基因位点交叉。若交叉点发生在第二、三基因位。
    • 均匀交叉 其交叉通过两父代染色体之间设置一个屏蔽码来实现的, 屏蔽码的长度需要与染色体上的基因为长度一致 如下图所示,图中在父代染色体中出现了一串屏蔽码,使用规则为: 凡是屏蔽码中码为1时,父代染色体中与之对应的基因位发生交叉互换;凡是屏蔽码中码为0,则与之对应的父代染色体基因位不进行交叉操作
  • 遗传交叉操作方式的选取对遗传算法效率影响较大,具体采用何种交叉方式取决于实际问题情况,总之无论采取哪种交叉方式,都需要 保证种群基因多样性,不然容易使遗传算法陷入早熟。但是,交叉点太多,又极可能导致遗传算法无法收敛

    变异

  • 生物进化过程中,在外在环境发生较大变化时,某些物种大部分个体由于环境变化而消亡,但是有极少数个体能够生存下来,其原因是因为环境发生大的变化时,其个体内的基因发生了突变,基因突变导致出现了新的基因出现,而此基因能适应改变后的环境。显然,变异操作也在遗传算法中对保持种群多样性、防止早熟、丰富基因库有着重大意义。
  • 变异操作的概念是指种群中任意个体以一定的概率使其染色体中一个或几个基因位发生突变。这种操作很有可能出现原有种群通过交叉获取不到的基因表现形式,在丰富种群基因库同时也能防止遗传算法过早的收敛。下图为对基因位的变异操作过程,取变异基因位为第一位
  • 遗传编码、选择、交叉和变异组成了遗传算法的基本框架 ,即遗传算法的标准组成部分,其操作过程都是采用随机操作,有一定能力 跳出局部最优 ,具有较好的 全局搜索能力 。通过对遗传算法的编码形式的分析,可以得出遗传算法在面对 非线性、不连续、离散型 问题时,具有较强的处理能力,在解决实际问题中具有较强的适应能力。下图是一个标准遗传算法的程序流程图,严格按照选择、交叉和变异来进行,在达到终止条件时,遗传进化停止,输入所求得最优解。

遗传算法入门C1的更多相关文章

  1. NSGA-II入门C1

    NSGA-II入门C1 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献1 参考文献2 白话多目标 多目标中的目标是个瓦特? 多目标即是优化问题中的优化目标在3个及以上,一般这些优化的 ...

  2. 优化算法系列-遗传算法(3)——NSGAII学习网址

    JMetal https://www.cnblogs.com/denggaoshan/p/6306640.html https://www.cnblogs.com/denggaoshan/p/6308 ...

  3. css3复杂选择器+内容生成+Css Hack

    1.复杂选择器2.内容生成3.多列4.CSS Hack(浏览器兼容性)=======================================1.复杂选择器 1.兄弟选择器 1.特点: 1.通过 ...

  4. 【Machine Learning】机器学习の特征

    绘制了一张导图,有不对的地方欢迎指正: 下载地址 机器学习中,特征是很关键的.其中包括,特征的提取和特征的选择.他们是降维的两种方法,但又有所不同: 特征抽取(Feature Extraction): ...

  5. 外连接的用法 -- 《SQL进阶教程》 jupyter note

    import pandas as pd import sqlite3 conn = sqlite3.connect('1-5.db') 用外连接进行行列转换1(行 -> 列): 制作交叉表 怎么 ...

  6. python的遗传算法--Hello World入门篇

    本系列文章代码取材于书籍<Genetic Algorithms with Python>,本人是在校电气专业的研究生,立志从事于Python相关的代码工作,具体什么方向还有待深究. 众所周 ...

  7. XTU | 人工智能入门复习总结

    写在前面 本文严禁转载,只限于学习交流. 课件分享在这里了. 还有人工智能标准化白皮书(2018版)也一并分享了. 绪论 人工智能的定义与发展 定义 一般解释:人工智能就是用 人工的方法在 **机器( ...

  8. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  9. 续关于C#的微信开发的入门记录一

    前几天写了一篇博客<关于C#的微信开发的入门记录一>,原文地址:http://www.cnblogs.com/zhankui/p/4515905.html,现在继续完善: 目前很多小伙伴都 ...

随机推荐

  1. python learning GUI

    Hello world1 from tkinter import * # 第一步是导入Tkinter包的所有内容 class Application(Frame): # 第二步是从Frame派生一个A ...

  2. 关于mybatis的思考(1)——mybatis的使用实例

    架构分析 MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架. MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索.MyBatis 可以使用简 ...

  3. 团队作业5-Alpha版本测试报告

    1.在测试过程中总共发现了多少Bug?每个类别的Bug分别为多少个? 修复的Bug: a. 修复的bug: 页面打开后比例改变: 出现中文乱码: 点击按钮时不能响应: 导航栏加入显示错误: 上传图片后 ...

  4. 预则立&&他山之石--团队计划、访谈优秀前辈

    团队计划&访谈内容 一.团队计划 序号 任务内容 计划完成时间 主要负责人 备注 1 对接教师报课系统 决定是否重构代码 2016.10.16 陈少铭.黄家俊 阅读CourseManageme ...

  5. npm 镜像修改

    1, 修改 下载仓库为淘宝镜像  npm config set registry http://registry.npm.taobao.org/ 2, 如果要发布自己的镜像需要修改回来  npm co ...

  6. 最小费用流spfa算法模板(pascal)

    以前写过,现在的码风与以前有些变化,主要是用数组模拟邻接表存图,以前是用指针存图. 以前的博文:http://www.cnblogs.com/Currier/p/6387732.html 洛谷可评测. ...

  7. 自定义smokeping告警(邮件+短信)

    前段时间接到公司IT同事需求,帮助其配置smokeping的告警功能,之前配置的姿势有些问题,告警有些问题,现在调试OK,在此将关键配置点简单记录下. 关键的配置项主要有: 定义告警规则并配置将告警信 ...

  8. java实现函数指针

    在Java程序员面试笔试宝典中看到的东西,感觉很有用,特开此文 函数指针一般作为函数的参数来使用,开发人员在使用是可以根据自己的需求传递自动以的函数来实现指定的功能,例如,在实现排序算法时,可以通过传 ...

  9. XOR and Favorite Number CodeForces - 617E(前缀异或+莫队)

    题意原文地址:https://blog.csdn.net/chenzhenyu123456/article/details/50574169 题意:有n个数和m次查询,每次查询区间[l, r]问满足a ...

  10. [洛谷P4723]【模板】线性递推

    题目大意:求一个满足$k$阶齐次线性递推数列$a_i$的第$n$项. 即:$a_n=\sum\limits_{i=1}^{k}f_i \times a_{n-i}$ 题解:线性齐次递推,先见洛谷题解, ...