遗传算法(GA)
来自:https://blog.csdn.net/u010451580/article/details/51178225
遗传算法是模仿生物进化机制的随机全局搜索和优化方法。借鉴达尔文进化论和孟德尔的遗传学说。
相关术语:
基因型(genotype):性状染色体的内部表现;
表现形(phenotype):性状外部表现。或个体的外部表现。
进化(evolution):种群逐渐适应生存环境。生物进化是以种群的形式进行。
适应度(fitness):度量某个物种对生存环境的适应程度。
选择(selection):以一定的概率从种群中选择若干个个体。一般,选择过程是基于适应度的优胜劣汰的过程。
复制(reproduction):细胞分裂时,DNA通过复制转移到新细胞,新细胞继承旧细胞的基因。
交叉(crossover):两个染色体相同位置DNA被切断,前后两串分别交叉组合成两个新染色体。
变异(mutation):复制时小概率产生差错,产生新染色体,表现出新性状。
编码(coding):DNA中遗传信息在一个长链上按一定模式排列。
解码(decoding):基因型到表现型的映射。
遗传算法中每条染色体对应遗传算法的一个解决方案,用适应性函数衡量解决方案的优劣。所以从一个基因组到其解的适应度形成一个映射。遗传算法过程可以看作是一个多元函数求最优解的过程。
实例:已知一元函数 f(x) = xsin(10πx)+2 x∈[-1,2],求函数最大值。

“袋鼠跳”问题
函数曲线理解成山峰和山谷的组成,设想得到的每个解就是一只袋鼠,求最大值转换为袋鼠不断的向更高处跳,直到最高的山峰。
爬山法:
爬山法中,袋鼠只上坡,没下坡,但不能保证是全局最高峰。
模拟退火:
模拟退火中,袋鼠喝醉了,而且随机地大跳很长时间。运气好的话,从一个山峰跳过山谷,到了另外一个更高的山峰上。但最后,它渐渐清醒了并朝着它所在的峰顶跳去。
遗传算法:
遗传法中,有很多袋鼠,降落到不同地方,这些袋鼠不知道它们的任务是寻找全局最高峰。但每过几年,就在一些海拔较低的山峰射杀一些袋鼠,并希望存活的袋鼠是多产的,在所处地方生儿育女。最后袋鼠都聚拢到全局最高峰上。
遗传算法实现过程:
- 首先寻找一种对问题潜在解进行“数字化”编码的方案。
- 然后用随机数初始化一个种群(那么第一批袋鼠被随意分散在山上),种群里面的个体就是这些数字化的编码。
- 接下来,通过适当的解码(得到袋鼠的位置坐标),用适应性函数对每个基因个体做一次适应度评估(袋鼠爬的越高,适应度越高)。
- 用选择函数按照某种规定择优选择(每隔一段时间,射杀海拔较低的袋鼠,保持袋鼠总数平衡)。
- 让个体基因变异(让袋鼠随机跳跳)。
- 然后产生子代(希望存活下来的袋鼠多产,在那生儿育女)。
遗传算法并不保证获得问题最优解,它的最大优点在于不必操心如何“找”最优,只是“否定”不好的(把表现不好的,射杀)。
遗传算法一般步骤:
- 评估每条染色体所对应个体的适应度。
- 遵照适应度越高,选择概率越大原则,从中群中选择两个个体作为父方和母方。
- 抽取父母双方的染色体,进行交叉,产生子代。
- 对子代的染色体进行变异。
- 重复2,3,4步骤,直到新种群产生。
遗传算法过程的细节:
绘制袋鼠的染色体——基因编码方式
- 采用二进制编码,如:010010011011011110111110
- 采用浮点数编码,如:1.2 –3.3 – 2.0 –5.4 – 2.7 – 4.3
- 采用符号编码。
在遗传算法中关心的是袋鼠的位置(海拔低的被射杀),所以以袋鼠的位置作为特征进行编码,具体来说位置就是横坐标。 接着建立表现型到基因型的映射关系。就是如何用编码来变现出袋鼠所在的横坐标。由于横坐标是一个实数,说透了我们就是对这个实数编码。
袋鼠的染色体就是横坐标上实数的二进制编码。
物竞天择——适应性评分与选择函数
1.物竞——适应度函数
袋鼠的海拔高度作为它的适应性评分。即适应度函数直接返回函数值就行了。
2.天择——选择函数
常用选择方法——轮盘赌
比如有5条染色体,他们所对应的适应度评分分别为:5,7,10,13,15。
所以累计总适应度为:

所以各个个体被选中的概率分别为:


注:还有精英选择机制
遗传变异——基因重组(交叉)与基因突变
这两种遗传操作,二进制编码与浮点型编码处理上很大差异。
1. 基因重组、交叉
(1)、二进制编码
类似高中生物中同源染色体的联会过程(随机把其中几个位于同一位置的编码进行交换,产生新的个体。)

(2)、浮点数编码
遗传算法(GA)的更多相关文章
- 用遗传算法GA改进CloudSim自带的资源调度策略(2)
遗传算法GA的核心代码实现: 最核心: private static ArrayList<int[]> GA(ArrayList<int[]> pop,int gmax,dou ...
- 机器学习笔记之遗传算法(GA)
遗传算法是一种大致基于模拟进化的学习方法,假设常被描述为二进制串.在遗传算法中,每一步都根据给定的适应度评估准则去评估当前的假设,然后用概率的方法选择适应度最高的假设作为产生下一代的种子.产生下一代的 ...
- 【比较】遗传算法GA和遗传编程GP有什么不同?
遗传算法GA 本质上有一个固定的长度,这意味着所产生的功能有限的复杂性 通常会产生无效状态,因此需要以非破坏性方式处理这些状态 通常依赖于运算符优先级(例如,在我们的例子中,乘法发生在减法之前),这可 ...
- 【比较】粒子群算法PSO 和 遗传算法GA 的相同点和不同点
目录 PSO和GA的相同点 PSO和GA不同点 粒子群算法(PSO)和遗传算法(GA)都是优化算法,都力图在自然特性的基础上模拟个体种群的适应性,它们都采用一定的变换规则通过搜索空间求解. PSO和G ...
- 遗传算法GA
遗传算法(Genetic Algorithms,GA)是一种全局优化方法,它借用了生物遗传学的观点,通过自然选择.遗传.变异等作用机制,实现种群中个体适应性的提高,体现了自然界中“物竞天择.适者生存” ...
- 【优化算法】遗传算法GA求解混合流水车间调度问题(附C++代码)
00 前言 各位读者大家好,好久没有介绍算法的推文了,感觉愧对了读者们热爱学习的心灵.于是,今天我们带来了一个神奇的优化算法--遗传算法! 它的优点包括但不限于: 遗传算法对所求解的优化问题没有太多的 ...
- 用遗传算法GA改进CloudSim自带的资源调度策略
首先理解云计算里,资源调度的含义: 看了很多云计算资源调度和任务调度方面的论文,发现很多情况下这两者的意义是相同的,不知道这两者是同一件事的不同表述还是我没分清吧,任务调度或者资源调度大概就是讲这样一 ...
- 遗传算法的C语言实现(二)-----以求解TSP问题为例
上一次我们使用遗传算法求解了一个较为复杂的多元非线性函数的极值问题,也基本了解了遗传算法的实现基本步骤.这一次,我再以经典的TSP问题为例,更加深入地说明遗传算法中选择.交叉.变异等核心步骤的实现.而 ...
- 遗传算法的C语言实现(一):以非线性函数求极值为例
以前搞数学建模的时候,研究过(其实也不算是研究,只是大概了解)一些人工智能算法,比如前面已经说过的粒子群算法(PSO),还有著名的遗传算法(GA),模拟退火算法(SA),蚁群算法(ACA)等.当时懂得 ...
- 遗传算法入门C1
遗传算法入门C1 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 遗传算法历史 遗传算法(GA)是从生物进化的角度考虑提出来的方法,19世纪达尔文在大量观察基础上总结了大自然进化规律 ...
随机推荐
- Python selenium根据class定位页面元素
在日常的网页源码中,我们基于元素的id去定位是最万无一失的,id在单个页面中是不会重复的.但是实际工作中,很多前端开发人员并未给每个元素都编写id属性.通常一段html代码如下: <div cl ...
- VMware密匙
5A02H-AU243-TZJ49-GTC7K-3C61N 新版本密室:FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA
- SecureCRT通过密钥登录(网上也有很多教程,但是有些不详细,此教程本人亲测)
1.先打开SecureCRT,标题标--工具---创建公钥,如图: 2.点击创建公钥,弹出选项点下一步 3.继续点下一步: 4.继续点下一步: 5.继续点下一步(密钥长度默认1024即可),生成密钥需 ...
- 解决c# progressBar更新出现界面假死
最近一个项目需求中的一个功能是需要用progressBar反映处理文件的进度. 研究了Invoke和BeginInvoke方法. Control.Invoke 方法 (Delegate) :在拥有此控 ...
- ASP.NET页面之间传值的方式之Cookie(个人整理)
Cookie Cookie 提供了一种在 Web 应用程序中存储用户特定信息的方法.例如,当用户访问您的站点时,您可以使用 Cookie 存储用户首选项或其他信息.当该用户再次访问您的网站时,应用程序 ...
- 使用 dom4j 处理 xml (3)
今天想在使用 dom4j 选择节点时,顺便去重,可没有单独去重的方法:倒是有一个可以去重的,还必须提供一个 xpath 作为 排序和去重 的依据. 1.xml 文件 <?xml version= ...
- js数组创建两种方法
一.数组直接量形式创建数组 var arr=[];//空数组 ,,,,,]; ,,,],{x:,y:}]; ; ,x+,x+]; console.log(arr3); //[1,3,3,4] ,,]; ...
- 初学javascript《一》break和continue的标签问题
<script>var iNum = 0;outermost:for (var i=0; i<3; i++) { for (var j=0; j<3; j++) { ...
- -bash: belts.awk: command not found
执行awk命令时,没有问题.可是执行awk脚本时,出现这个问题:-bash: belts.awk: command not found. 既然之前直接执行awk命令没有问题,说明awk已经装了,本身是 ...
- RC4加密解密
package util; public class RC4Util { public static String decry_RC4(byte[] data, String key) { if (d ...