遗传算法入门C1
遗传算法入门C1
觉得有用的话,欢迎一起讨论相互学习~Follow Me
遗传算法历史
- 遗传算法(GA)是从生物进化的角度考虑提出来的方法,19世纪达尔文在大量观察基础上总结了大自然进化规律,即优胜劣汰:后来孟德尔通过豌豆实验发现了遗传规律、分离规律和自由组合规律。遗传是指父代的基因将会遗传到子代中去,父代和子代具有相似性,同时,父代与子代也会有不同点,否则,从进化角度考虑,父代和子代无差别,物种没有出现进化。当子代中出现不适应生存的个体时,将会逐渐被环境淘汰,具有环境生存优势的个体将生存下来,这样遗传通过基因传递,并和环境相互作用,让基因朝着有利于生存的方向进化,优良的基因库就得以保存。
- 在19世纪60年代,科学家Fraser在其论文中首先提到了选择和突变操作。密西
根大学教授J.Holland在20世纪70年代研究自然和人工自适应系统时,首先提出了遗传算法基本形式。在80年代Goldberg根据前人研究成果,将遗传算法主要过程分为 选择、遗传和变异三部分 。由于遗传算法适应能力较强,同时具备较强的全局搜索能力,使遗传算法在各个领域都得到了广泛的应用,同时也促使遗传算法在理论上得到了很大的发展 运用遗传算法求解实际问题时, 我们需要将目标问题同遗传算法建立联系, 即通过遗传编码建立关联。 每一个编码可以称为个体或者染色体,多个解的个体构成了种群。 遗传算法通过模拟生物进化对种群中个体进行 选择、交叉、变异操作 ,能将优秀的基因保留下来,传递给后代,使种群向最优方向进化。
遗传编码
- 运用遗传算法寻求最优解时,在确定目标函数后,需要把函数变量转化成染色体表现形式,编码的过程必须满足以下条件:
- 必须保证解的空间中的所有解都在编码空间内
- 每一个解都能通过交叉和变异操作转化成解的空间中其他任意解
- 每一个染色体都是对应解的空间内的一个特定解
遗传编码方式很重要,同一问题不同的编码方式可能使遗传算法的出来的结果出现较大的差异,好的编码方式能提高求解效率,因此,需要根据求解问题的特点决定编码方式。根据前人总结,编码方式一般有二进制编码、浮点数编码和格雷码编码等编码形式。
适应度函数
遗传算法为了保证种群向着对环境适应能力较强的方向进化,就需要一个 评价标准 保证某一代中较优秀的个体能 有较大的概率将基因遗传给下一代 ,因此,遗传算法中就引入了 适应度函数 的概念。 个体中适应度值较大,其个体就有较大的概率遗传给下一代 反之,适应度值小的,其个体淘汰的概率就比较高,模拟进化过程中的优胜劣汰。
遗传操作
选择
选择操作的目的是为了将 当代 种群中 适应度值较高 的个体保存下来,将 适应度值低的个体淘汰 ,选择操作的过程中 本身不会产生任何新的个体 。但是选择操作由于是一个 随机选择过程 ,只是表示适应度值较高的个体将 有较高的概率 将自身基因遗传给下一代,并不表示适应度值较低的个体一定会淘汰, 但是,总体的趋势会是基因库中的基因越来越好,适应度值越来越高。选择操作的方法目前主要有 轮盘赌选择、最优保留法、期望值法 等等。
轮盘赌选择法
轮盘赌选择法又称为比例选择法,其选择方式是随机的,不过适应度值较高的被选择的概率大。设定种群规模为N,其中个体i的适应度值为\(f_i\),在选择操作中其被选中的概率为:\[P_i=\frac{f_i}{\sum^{N}_{i=1}f_{i}}\]
由于轮盘赌选择法是随机选择的,因此,有可能将适应度值较大的个体淘汰,导致最终结果可能不能寻找到最优解,通常,可以将 最优保留法和轮盘赌选择法结合选择 ,先通过 最优保留法 将适应度值最高的个体保留,之后再进行 轮盘赌选择法进行选择交叉
- 交叉操作在遗传算法中占据比较重要的作用,遗传算法中 产生新个体的主要就是通过交叉操作完成的 交叉操作的具体过程是 父代随机选取两个个体,按照某种规则对染色体上的基因相互交换,形成新的个体 ,这样做的目的是 为了将优秀的基因段通过交叉的方式有效进行整合,使下一代个体的适应度值比上一代更高 。常见的交叉规则有 单点交叉、多点交叉和均匀交叉 三种方式。
- 单点交叉 的方式是在染色体上随机选定一个基因点作为交叉位置,父代中两染色体在此处的基因信息互换,这样就形成了两个子代个体。如下图所示,对其基因采用二进制编码,若随机交叉点为第三基因位。

- 多点交叉 是指染色体中有 两个或两个以上的基因位点交叉 ,图中染色体同样采用二进制编码,假定多点交叉为随机取两个基因位点交叉。若交叉点发生在第二、三基因位。

- 均匀交叉 其交叉通过两父代染色体之间设置一个屏蔽码来实现的, 屏蔽码的长度需要与染色体上的基因为长度一致 如下图所示,图中在父代染色体中出现了一串屏蔽码,使用规则为: 凡是屏蔽码中码为1时,父代染色体中与之对应的基因位发生交叉互换;凡是屏蔽码中码为0,则与之对应的父代染色体基因位不进行交叉操作

- 单点交叉 的方式是在染色体上随机选定一个基因点作为交叉位置,父代中两染色体在此处的基因信息互换,这样就形成了两个子代个体。如下图所示,对其基因采用二进制编码,若随机交叉点为第三基因位。
遗传交叉操作方式的选取对遗传算法效率影响较大,具体采用何种交叉方式取决于实际问题情况,总之无论采取哪种交叉方式,都需要 保证种群基因多样性,不然容易使遗传算法陷入早熟。但是,交叉点太多,又极可能导致遗传算法无法收敛
变异
- 生物进化过程中,在外在环境发生较大变化时,某些物种大部分个体由于环境变化而消亡,但是有极少数个体能够生存下来,其原因是因为环境发生大的变化时,其个体内的基因发生了突变,基因突变导致出现了新的基因出现,而此基因能适应改变后的环境。显然,变异操作也在遗传算法中对保持种群多样性、防止早熟、丰富基因库有着重大意义。
- 变异操作的概念是指种群中任意个体以一定的概率使其染色体中一个或几个基因位发生突变。这种操作很有可能出现原有种群通过交叉获取不到的基因表现形式,在丰富种群基因库同时也能防止遗传算法过早的收敛。下图为对基因位的变异操作过程,取变异基因位为第一位

遗传编码、选择、交叉和变异组成了遗传算法的基本框架 ,即遗传算法的标准组成部分,其操作过程都是采用随机操作,有一定能力 跳出局部最优 ,具有较好的 全局搜索能力 。通过对遗传算法的编码形式的分析,可以得出遗传算法在面对 非线性、不连续、离散型 问题时,具有较强的处理能力,在解决实际问题中具有较强的适应能力。下图是一个标准遗传算法的程序流程图,严格按照选择、交叉和变异来进行,在达到终止条件时,遗传进化停止,输入所求得最优解。

遗传算法入门C1的更多相关文章
- NSGA-II入门C1
NSGA-II入门C1 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献1 参考文献2 白话多目标 多目标中的目标是个瓦特? 多目标即是优化问题中的优化目标在3个及以上,一般这些优化的 ...
- 优化算法系列-遗传算法(3)——NSGAII学习网址
JMetal https://www.cnblogs.com/denggaoshan/p/6306640.html https://www.cnblogs.com/denggaoshan/p/6308 ...
- css3复杂选择器+内容生成+Css Hack
1.复杂选择器2.内容生成3.多列4.CSS Hack(浏览器兼容性)=======================================1.复杂选择器 1.兄弟选择器 1.特点: 1.通过 ...
- 【Machine Learning】机器学习の特征
绘制了一张导图,有不对的地方欢迎指正: 下载地址 机器学习中,特征是很关键的.其中包括,特征的提取和特征的选择.他们是降维的两种方法,但又有所不同: 特征抽取(Feature Extraction): ...
- 外连接的用法 -- 《SQL进阶教程》 jupyter note
import pandas as pd import sqlite3 conn = sqlite3.connect('1-5.db') 用外连接进行行列转换1(行 -> 列): 制作交叉表 怎么 ...
- python的遗传算法--Hello World入门篇
本系列文章代码取材于书籍<Genetic Algorithms with Python>,本人是在校电气专业的研究生,立志从事于Python相关的代码工作,具体什么方向还有待深究. 众所周 ...
- XTU | 人工智能入门复习总结
写在前面 本文严禁转载,只限于学习交流. 课件分享在这里了. 还有人工智能标准化白皮书(2018版)也一并分享了. 绪论 人工智能的定义与发展 定义 一般解释:人工智能就是用 人工的方法在 **机器( ...
- 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 续关于C#的微信开发的入门记录一
前几天写了一篇博客<关于C#的微信开发的入门记录一>,原文地址:http://www.cnblogs.com/zhankui/p/4515905.html,现在继续完善: 目前很多小伙伴都 ...
随机推荐
- 团队计划backlog---DayTwo
任务索引卡(Two): 1. 季方:实现界面跳转,数据库相关数据的显示 的测试: 2. 司宇航:添加部分团队博客,并测试: 3. 王金萱.马佳慧:学习爬虫的相关内容,为将来统计博客部分做准备: ...
- Mysql常用配置及优化
[client]# 该目录下的内容常用来进行localhost登陆,一般不需要修改port = 3306 # 端口号socket = /var/lib/mysql/mysql.sock # 套接字文件 ...
- Java jdbc链接 mySQL 写的crud
1.JDBC(Java Data Base Connectivity java数据库连接)概念: 是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编 ...
- 1003 我要通过!| PAT (Basic Level) Practice
1003 我要通过! (20 分) "答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的"答案正确"大派送 -- 只要读入的字符串满足下列条件 ...
- Java 多生产者消费者问题
/* 生产者,消费者. 多生产者,多消费者的问题. if判断标记,只有一次,会导致不该运行的线程运行了.出现了数据错误的情况. while判断标记,解决了线程获取执行权后,是否要运行! not ...
- windows下python3.6安装pycryto or crypto or pycryptodome与使用
pycrypto,pycrytodome和crypto是一个东西,在很久以前,crypto在python上面的名字是pycrypto它是一个第三方库,但是已经停止更新三年了,所以不建议安装这个库: w ...
- [转帖]真TM长的:SQL Server 2008存储结构——GAM和SGAM、PFS结构、IAM结构、DCM&BCM
谈到GAM和SGAM,我们不得不从数据库的页和区说起. https://blog.csdn.net/snowfoxmonitor/article/details/49991015 一个数据库由用户定义 ...
- Android ComponentName的用法
ComponentName(组件名称)是用来打开其他应用程序中的Activity或服务的. 用法: Intent it=new Intent(); it.setComponent(new Compon ...
- java中的==操作符和equals函数
基本规则 “==”操作符的使用需要分成两种情况 判值类型相等 这一点很好理解,两个值类型代表的数值相等,则“==”表达式返回true “==”可以用与不同值类型的比较,语言会自动进行类型转换 判引用类 ...
- shell的sort命令
sort命令以行为单位对文本进行排序. 命令语法: sort [-b/d/f/g/i/M/n/r] [InFile] 参数解释: -b: ignore-leading-blanks,忽略前面空格符部分 ...