遗传算法(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世纪达尔文在大量观察基础上总结了大自然进化规律 ...
随机推荐
- openssh-win64 on windows2016 ssh pub key config
DO NOT follow the official M$ documentation at https://docs.microsoft.com/en-us/windows-server/admin ...
- CJSON在项目中的应用
无需编译,只需将 cJSON.c.cJSON.h 添加到项目中即可使用
- 用原生js+canvas实现五子棋
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- 客户端不能连接MySQL - 2003-Can't connect to MySQL server on '192.168.43.180'(10060 "Unknown error")
客户端不能连接MySQL 场景: 数据库(此处以MySQL为例)安装在虚拟机里面,在宿主机上进行连接数据库的时候始终不能连接,但在虚拟机中使用正常. 针对上面的场景: 1. 在虚拟机里面可以正常使用M ...
- vuepress 学习心得
vuepress是一个静态网站生成器,在我看来就是写博客和教程的好工具.教程请见官网:https://www.vuepress.cn 安装方法建议局部安装:node8.0以上,新建vue项目,可能会出 ...
- PAT (Basic Level) Practice (中文)1001 害死人不偿命的(3n+1)猜想
1001 害死人不偿命的(3n+1)猜想 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n+1) 砍掉一半.这样一直反复砍下去,最后一 ...
- caffe中train过程的train数据集、val数据集、test时候的test数据集区别
val是validation的简称.training dataset 和 validation dataset都是在训练的时候起作用.而因为validation的数据集和training没有交集,所以 ...
- [Docker] sh: docker-compose: not found
有点坑爹,在使用 alpine 镜像的时候,明明在里面安装了docker-compose,/usr/local/bin/docker-compose也是存在的,却报 sh: docker-compo ...
- Unity3D 粒子系统 属性
- CentOS7中GreVPN的配置
目前只实现了三层的GRE隧道,但其实二层也可以实现的,但是没有找到很好的方法,待研究 环境如下: host A : 121.207.22.123 host B: 111.2.33.28 1. 在ho ...