遗传算法(Genetic Algorithm,GA),是什么?在理解遗传算法之前,首先需要了解两部分内容:一个是进化算法,一个是算法背后的生物学背景。
不论是遗传算法,还是进化算法,顾名思义,都是在做一种对生物进化论的仿真。以下是关于进化论的一些生物学术语:
基因型(genotype):性状染色体的内部表现;
表现型(phenotype):染色体决定的性状的外部表现,或者说,根据基因型形成的个体的外部表现;
进化(evolution):种群逐渐适应生存环境,品质不断得到改良。生物的进化是以种群的形式进行的。
适应度(fitness):度量某个物种对于生存环境的适应程度。
选择(selection):以一定的概率从种群中选择若干个个体。一般,选择过程是一种基于适应度的优胜劣汰的过程。
复制(reproduction):细胞分裂时,遗传物质DNA通过复制而转移到新产生的细胞中,新细胞就继承了旧细胞的基因。
交叉(crossover):不是交叉步过人 两个染色体的某一相同位置处DNA被切断,前后两串分别交叉组合形成两个新的染色体。也称基因重组或杂交;
变异(mutation):复制时可能(很小的概率)产生某些复制差错,变异产生新的染色体,表现出新的性状。
编码(coding):DNA中遗传信息在一个长链上按一定的模式排列。遗传编码可看作从表现型到基因型的映射。
解码(decoding):基因型到表现型的映射。
个体(individual):指染色体带有特征的实体;
种群(population):个体的集合,该集合内个体数称为种群
概念链接:https://www.jianshu.com/p/ae5157c26af9 来源:简书
基因(Gene):一个DNA的功能片段
基因性状(Gene Trait):控制某个特征的表现,比如控制眼睛的颜色,头发的颜色
等位基因(Allele):设置特征的可能性,可以取多少不同的值。比如头发可能是黑色,可能是金色
基因型(Genotype):携带的是什么基因,是TT还是TS
表现型(Phenotype):表现出来的基因特征是怎样的,是高还是矮;是男还是女
John Holland.Adaptation in Natural and Artificial Systems,1975.
进化算法的概念。遗传算法GA是进化算法EA的一部分。遗传算法(Genetic Algorithm,GA),是进化算法的框架和核心。
各种进化算法有什么异同? - 及时物语的回答 - 知乎
https://www.zhihu.com/question/39152390/answer/901070749
不过,遗传算法对交叉操作要看重一些,认为变异操作是算法的辅助操作;而进化规划和进化策略认为在一般意义上说交叉并不优于变异,甚至可以不要交叉操作。
进化算法-百度百科https://baike.baidu.com/item/%E8%BF%9B%E5%8C%96%E7%AE%97%E6%B3%95
进化算法,或称“演化算法” (evolutionary algorithms) 是一个“算法簇”,尽管它有很多的变化,有不同的遗传基因表达方式,不同的交叉和变异算子,特殊算子的引用,以及不同的再生和选择方法,但它们产生的灵感都来自于大自然的生物进化。与传统的基于微积分的方法和穷举法等优化算法相比,进化计算是一种成熟的具有高鲁棒性和广泛适用性的全局优化方法,具有自组织、自适应、自学习的特性,能够不受问题性质的限制,有效地处理传统优化算法难以解决的复杂问题。
进化算法囊括了很多算法,是一个EA family,旗下有NBA2K,战地6等游戏 ,其中比较经典的四个算法是:Genetic Algorithm遗传算法;Genetic Programming遗传程序设计;Evolution Strategies;Evolutionary Programming。现在同样也有提出新的进化算法:Estimation of Distribution Algorithm用统计学方法对问题空间进行建模,用模型驱动搜索;Particle Swarm Optimization子群算法;Ant Colony Optimization蚁群算法;Differential Evolution差分进化;
进化算法的基本框架还是简单遗传算法所描述的框架,但在进化的方式上有较大的差异,选择、交叉、变异、种群控制等有很多变化,进化算法的大致框图可描述如下图所示。
进化算法-百度百科https://baike.baidu.com/item/%E8%BF%9B%E5%8C%96%E7%AE%97%E6%B3%95
清华大学袁博老师在《数据挖掘:理论与算法》慕课中,归纳了七点进化计算的关键概念。
我认为,算法能够实现优化的核心原因在于其中的如下两点。
1.Population-Based Stochastic Optimization Methods
基于数量的随机优化方法。
算法有一定随机性,每次结果都不完全一样。
2.Inherently Parallel
固有并行
还是拿刚才的“拼脸”为例,可以让100个人同时去拼脸,是并行的,这样可以有效防止结果比较少带来的后果。结果比较少很可能出现这些人都没有最好看的那个特征,也没有变异出这样的特征,这样结果会聚簇在一个次好看甚至次次次次好看的外貌结果上,陷入局部最优解。
如上图所示,我们有一个需要优化的问题(problem)。优化问题在计算前需要先编码(coding) 成可以被计算机执行的数据。
编码完成后,建立目标函数(objective function)公示,定义好各个变量(如时间、地点等)。当然,任何一个数据挖掘问题都同样需要相关领域的知识(domain knowledge) 支持,脱离现实的数据挖掘算法对现实帮助是毫无助益的。
完成上述过程后,就可以开始进行进化计算(evolution search) 了。
计算通常包括四大部分:评估(evaluate),评估现在的路线哪个好,哪个不好;选择(Select),选择比较好的路线进行杂交(crossover)和变异(mutate),最终生成更好的路线。
举一个进化算法的简单的例子。比如说我们想要进化出世界上最好看的人的样子,进化算法是这么做的。先找到一群人,我们从里面找到最好看的几个人,然后多复制(reproduction)这些长得好看的人,少复制一些长得不好看的人。(为什么也要复制长得不好看的人呢?一方面是为了加大样本量,另一方面是因为资源不能过早过度集中)
不过在复制之后,我们并没有发现更好看的人,因为我们做得只是克隆。为了有机会发现更好看的人,我们就需要对这些人做变异(mutation)处理。
图片来源:B站-啊吗粽《把11个up主的五官拿出来打乱 还能再复原么?》
https://www.bilibili.com/video/BV1Ez411v7vT/
有的人眼睛变了,有的人嘴巴变了,有的人鼻子变了。我们把这些变异的人也加入进样本中,再从中找最好看的人;如此往复迭代,一代一代迭代下去,找到优化解。(不过确实,在好不好看的这个问题上并不存在一个客观的最优解,这里是把人的主观审美作为客观环境进行筛选,这也解释了为什么进化算法以及进化论是适者生存,而不是强者生存。)
综上,进化算法可以模拟自然界的物竞天择,也同样可以对目标对象结果进行优化。
遗传算法(Genetic Algorithm,GA)最早是由美国的 John holland于20世纪70年代提出,该算法是根据大自然中生物体进化规律而设计提出的。**是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。**该算法通过数学的方式,利用计算机仿真运算,将问题的求解过程转换成类似生物进化中的染色体基因的交叉、变异等过程。在求解较为复杂的组合优化问题时,相对一些常规的优化算法,通常能够较快地获得较好的优化结果。遗传算法已被人们广泛地应用于组合优化、机器学习、信号处理、自适应控制和人工生命等领域。
郑树泉.工业智能技术与应用[M].上海:上海科学技术出版社,2019
遗传算法的先驱John Holland在《Adaptation in Natural and Artificial Systems》一书中指出,遗传算法是"inspired by and loosely based on Darwin’s Theory",收达尔文进化论启发,并且是较为宽松地基于他,不是完全的匹配的;遗传算法是把生物学中的这些概念:Chromosome染色体,Crossover交叉,Mutation变异,Selection选择(Survival of the Fittest适者生存) 以某种算法的形式结合在一起。
通俗来说,遗传算法是一种借鉴了达尔文生物进化论理论的算法,如果把每一个数据都看作一个染色体,那么遗传算法就是通过染色体与染色体基因的组合交叉和变异,重组出新的染色体解集的过程,通过不断演化从而得到新的染色体集合,如此循环往复,不断迭代进化,最终的聚簇即为算法寻求的优化结果。
1.Each solution to the problem is represented as a chromosome.
每一个解决问题的方法都代表一个染色体。
2.The initial solutions may be randomly generated.
最初的解决方案可能是随机生成的
3.Solutions are evolved during generations.
解在迭代的过程中逐渐形成。
4.Improved gradually based on the principle of natural evolution.
基于自然进化而逐渐进步。
一言以蔽之,他的基本思想是:最初生成随机的染色体,代表随机的候选candidate;通过进化的方式不断改进。
与传统算法思想的区别在于,传统算法思想多是根据公式一步到位求解,但其实很多情况并不是一步到位求解就可以解决的情况,需要遗传算法逐步求解。
1.coding编码
二进制问题(比如是或者不是):0101
连续型问题(比如市场价格):0.8,1.2,-0.3
2.genetic operator遗传操作
(1)crossover交叉
交换两个染色体的遗传物质
(2)mutation变异
在被选位置随机调整基因值
3.Selection Strategy选择策略
选择哪些染色体去繁殖后代(复制reproduction)
选择哪些后代(offspring)可以生存下来
4.Individual个体(Chromosome染色体)
每一维对应一个对应参数的取值
(1)A vector that represents a specific solution to the problem
一个向量代表一个明确的问题解
(2)Each element on the vector corresponds to a certain variable/parameter.
每一个向量(公式层面)的要素都符合一个确定的变量/决定因素(事实层面)
5.Population人口数量
他意味着(1)A set of individuals是个体的集合,是一个聚簇;(2)GAs maintain and evolve a population of individuals GA算法是保留并逐渐形成一个规模庞大的个体集合(3)Parallel Search并行搜索,利于寻找全局最优解Global Optimization.
6.offspring后代
New individuals generated via genetic operators.
经由遗传操作(杂交变异复制),从原来的向量中生成新的向量。
Hopefully contain better solutions.
希望后代中包含更优解。
7.其他编码方式encoding
(1)除了Binary二进制编码方式外,还可以运用Gray格雷码编码
格雷码任何相邻两位间的距离都是1,二进制则不然,这就导致二进制的海明距离非常大,为了检测d个错误,需要一个海明距离为d+1的编码方案,使用二进制将使得检测错误的工作量大大增加。
两个合法代码对应位上编码不同的位数称为码距,又称海明距离
(2)TSP(旅行商)问题,简单用12345编码城市是有问题的。
根据数值大小对资源进行分配。但是这样分配有一个坏处,万一出现了一个很大的数值,将导致资源重度倾斜向该向量,导致资源过早过度集中。
所以学界提出了rank selection,用等级来选择分配,这将减小很大数值的资源权重。
每次挑选两个或三个,两两PK,三三PK,捉对厮杀挑选。但是这样可能会出现一个问题,两两捉对厮杀,只要不是倒数第一,就有可能被选中出线。
精英选择。保送那些优秀的子代,目的是为了防止出现当初优秀父代母代在杂交后的子代还不如父代母代的情况出现。
一种是把子代完全替换父代,把子代作为新父代继续迭代。(μ,λ)Strategy
一种是把100个子代和100个父代的所有样本数据中选100个最好的作为新父代。(μ+λ)Strategy
遗传算法的工作,需要兼顾广度和深度;既要有足够大的搜索范围,又要能够比较精确地实现收敛。
分为一点杂交、两点杂交和多点杂交。
一点杂交one point crossover,是选择一点作为杂交位,后面的基因序列全部进行交换;
两点杂交two point crossover,是选择两个点作为杂交位,只替换两个杂交位中的基因序列。
多点杂交uniform crossover,有50%的概率挑选杂交位上的一种表现作为新子代。
如果拿123456789指代城市,路线1是123456789,路线2是312849576;从第五位开始进行杂交,得到子路线1:123449576,子路线2:312856789;这时我们很容易发现,子路线1中,4这个地方去了两边,但是没有去8;子路线2去了两次8,这就产生了问题。
面对这样的问题,有两种解决方式。一种方式是把重复的算子变成不重复的;一种方式是推倒重来,重组直到不重复为止。
一种保持种群基因多样性的方式。(降低不成熟收敛的可能性)
随机选较少的几个变异位,把0变成1,1变成0;如果是连续型变量,可以加高斯噪声,把0变成0.1或-0.2
把更多的资源分配给更优秀的向量。
初始化,生成一个初始的种群。
评估1,对每一个个体的适应度进行评估。Evaluate the fitness f(x) of each individual
之后的步骤包括两层循环:外面的循环是指一代一代的循环,里面的小循环用于生成population中的每一个个体。
评估2,对新产生的父代进行评估。
最后输出output,return the best individual found,返回最优的个体值。
遗传算法中,有很多关键参数是需要调整的。只有恰当的取值,才能助于发现更优的结果。
每个样本都要进行评估,数据量太大的话,将导致很低的效率,很慢的收敛速度slow convergence rate.
数据量太少的话,将导致premature convergence,未成熟收敛;即结果收敛在一个不成熟的位置上。
一般的染色体杂交并不是100%的杂交,而是部分的杂交,部分地保留到子代中,详见上文中的2.5工作原理。
一般的推荐值是0.8,80%杂交,20%保留。
推荐值是1/L,每一次只有其中的一位进行mutation变异。如果变异率特别高会变成一个随机搜索;太低的话同样容易导致结果收敛在一个不成熟的位置上。
1.tournament selection
详见2.4.3
2.Truncation Selection (Select top T individuals)
前T个个体被保留下来
3.其他选择策略,详见2.4
选择的策略 同样是一个决定因素。
以上内容是本人对遗传算法的理解,如果有误,欢迎批评指正。