遗传算法GA和进化算法ES

最近听ES听的有点多,想着了解一下。
从几篇博客里摘抄了笔记:
适合初学者
带了实现代码
CMA-ES

这两个算法都是用进化理论来解决复杂的问题. 遗传算法是进化算法的一个分支. 它将达尔文的进化理论搬进了计算机.

遗传算法

遗传算法(Genetic Algorithm, GA)起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,借鉴了达尔文的进化论和孟德尔的遗传学说。其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最佳解。

相关术语

基因型(genotype):性状染色体的内部表现;
表现型(phenotype):染色体决定的性状的外部表现,或者说,根据基因型形成的个体的外部表现;
进化(evolution):种群逐渐适应生存环境,品质不断得到改良。生物的进化是以种群的形式进行的。
适应度(fitness):度量某个物种对于生存环境的适应程度。
选择(selection):以一定的概率从种群中选择若干个个体。一般,选择过程是一种基于适应度的优胜劣汰的过程。
复制(reproduction):细胞分裂时,遗传物质DNA通过复制而转移到新产生的细胞中,新细胞就继承了旧细胞的基因。
交叉(crossover):两个染色体的某一相同位置处DNA被切断,前后两串分别交叉组合形成两个新的染色体。也称基因重组或杂交;
变异(mutation):复制时可能(很小的概率)产生某些复制差错,变异产生新的染色体,表现出新的性状。
编码(coding):DNA中遗传信息在一个长链上按一定的模式排列。遗传编码可看作从表现型到基因型的映射。
解码(decoding):基因型到表现型的映射。
个体(individual):指染色体带有特征的实体;
种群(population):个体的集合,该集合内个体数称为种群的大小。

应用
寻路问题
8数码问题
囚犯困境
动作控制
找圆心问题(在一个不规则的多边形中,寻找一个包含在该多边形内的最大圆圈的圆心)
TSP问题
生产调度问题
人工生命模拟

GA简介

  • 遗传算法中每一条染色体,对应着遗传算法的一个解决方案。一般我们用适应性函数(fitness function)来衡量这个解决方案的优劣。
  • 所以从一个基因组到其解的适应度形成一个映射。可以把遗传算法的过程看作是一个在多元函数里面求最优解的过程(多维曲面求极值)。

问题举例
一元函数求最大值:

image.png

我们把函数曲线理解成一个一个山峰和山谷组成的山脉。可以设想所得到的每一个解就是一只袋鼠,我们希望它们不断的向着更高处跳去,直到跳到最高的山峰(尽管袋鼠本身不见得愿意那么做)。所以求最大值的过程就转化成一个“袋鼠跳”的过程。

下面简单介绍“袋鼠跳”的几种方式。

  1. 爬山法(类似梯度法):
  • 从搜索空间中随机产生邻近的点,从中选择对应解最优的个体,替换原来的个体,不断重复上述过程。
  • 因为爬山法只对“邻近”的点作比较,所以目光比较“短浅”,常常只能收敛到离开初始位置比较近的局部最优解上面。
  1. 模拟退火:
  • 这个方法来自金属热加工过程的启发。在金属热加工过程中,当金属的温度超过它的熔点(Melting Point)时,原子就会激烈地随机运动。
  • 与所有的其它的物理系统相类似,原子的这种运动趋向于寻找其能量的极小状态。在这个能量的变迁过程中,开始时,温度非常高, 使得原子具有很高的能量。随着温度不断降低,金属逐渐冷却,金属中的原子的能量就越来越小,最后达到所有可能的最低点。
  • 利用模拟退火的时候,让算法从较大的跳跃开始,使到它有足够的“能量”逃离可能“路过”的局部最优解而不至于限制在其中,当它停在全局最优解附近的时候,逐渐的减小跳跃量,以便使其“落脚 ”到全局最优解上。
  • 就是说一开始步长大一些,经过一些step之后慢慢缩小步长,就有可能跳出局部极值。
  1. 遗传算法:
  • 模拟物竞天择的生物进化过程,通过维护一个潜在解的群体执行了多方向的搜索,并支持这些方向上的信息构成和交换。
  • 是以面为单位的搜索,比以点为单位的搜索,更能发现全局最优解。(在遗传算法中,有很多袋鼠,它们降落到喜玛拉雅山脉的任意地方。这些袋鼠并不知道它们的任务是寻找珠穆朗玛峰。但每过几年,就在一些海拔高度较低的地方射杀一些袋鼠,并希望存活下来的袋鼠是多产的,在它们所处的地方生儿育女。过了许多年之后,只有爬的越高的袋鼠才能存活的越久,自然就找到的极值)

所以我们总结出遗传算法的一般步骤:

开始循环直至找到满意的解。
1.评估每条染色体所对应个体的适应度。
2.遵照适应度越高,选择概率越大的原则,从种群中选择两个个体作为父方和母方。
3.抽取父母双方的染色体,进行交叉,产生子代。
4.对子代的染色体进行变异。
5.重复2,3,4步骤,直到新种群的产生。
结束循环。

遗传算法细节

编制袋鼠的染色体----基因的编码方式
(1)二进制编码法:010010011011011110111110
(2)浮点数编码法:1.2 –3.3 – 2.0 –5.4 – 2.7 – 4.3
(3)符号编码法
重要特征:袋鼠的位置
评估标准:海拔高度
建立二进制编码到一个实数的映射:有点类似模数转换
物竞天择--适应性评分与及选择函数:
(1)物竞――适应度函数(fitness function):生物相互间的搏斗与及生物与客观环境的搏斗过程。直接用袋鼠的海拔高度作为它们的适应性评分。
(2)天择――选择函数(selection):自然界中,越适应的个体就越有可能繁殖后代。从概率上体现。
(3)遗传变异――基因重组(交叉)与基因突变。二进制编码的基因交换过程非常类似高中生物中所讲的同源染色体的联会过程,浮点数编码也类似,如果对于单个浮点数的基因交叉,就有其它不同的重组方式了,比如中间重组:比如5.5和6交叉,产生5.7,5.6。基因突变:二进制编码是01交换,浮点数编码一般是对原来的浮点数增加或者减少一个小随机数

  1. 选择的作用:优胜劣汰,适者生存;
  2. 交叉的作用:保证种群的稳定性,朝着最优解的方向进化;
  3. 变异的作用:保证种群的多样性,避免交叉可能产生的局部收敛。

微生物遗传算法(Microbial GA)

“升级版GA”,由Inman Harvey于2009年提出,原文:《The Microbial Genetic Algorithm》

问题
解决遗传算法中,无法有效保留“好父母”的问题(Elitism):分析GA可是无论父母多么优秀,都不会被保留,只能将各自基因的一部分进行重组,但是重组后的子代并不会一定优于父母。

改进
1.把种群中表现好的基因不做任何改变放入子代中
2.只对表现较差的基因序列进行交叉/变异处理
3.交叉方法:表现较差的在表现较好的基因序列中抽取一部分替换进来
4.变异方法:只在表现较差的基因序列中挑选变异点
注:表现好坏由fitness的得分决定

做法
1.生成初始种群
2.在初始种群中随机抽取两个基因序列A/B,对比fitness(假定A的fitness值高)
3.从A中截取部分基因序列替换掉B中对应位置
4.随机在B中抽取位置,进行变异
5.将A与处理后的B‘放回种群中
6.自定义每一代进行多少次抽取/放回操作

进化策略(Evolution Strategy)

与遗传算法的相同之处
都是利用进化理论进行优化,即利用遗传信息一代代传承变异适者生存,从而得到最优解。

与遗传算法的不同之处
1.DNA序列采用实数编码,而非0-1二进制码

2.变异时无法进行简单的0-1互换,思考:实数值该怎么变?随机?
变异思路:为DNA序列上的每一个实数值添加变异强度。根据这个变异强度决定DNA序列上的实数值该变成多少

3.编码:
由第2点可知,进化策略在编码时,不仅要有表示解决方案的实数编码链A1,还得有一条表示每个实属值对应的变异强度值组成的链A2(也就是说,遗传给后代的信息有两种)

4.交叉:
两条链都要交叉,即A1与B1交叉形成表示子代解决方案的C1链,A2与B2交叉形成表示C1链对应位置实数值变异强度的C2链(父:A,母:B,子:C)

5.C1链上值的变异方法:
将C1链上的值看作正态分布的均值μ;
将C2链上变异强度值看作标准差σ;
用正态分布产生一个与C1链上选定位置相近的数,进行替换;

6.C2链上值的变异方法:
因为随着不断遗传迭代,种群中个体1号链的值不断逼近最优解,变异的强度也应当不断减小。所以也需要根据需求自定义2号链的变异方法。

7.选择:
将生成的孩子加入父代中,形成一个包含两代DNA的种群U;
对U种群中每个DNA序列的1号链(表示解决方案)进行fitness计算(打分),并根据分值从大到小排列(用U‘表示排列后的混合种群);
截取U’中的分值高的前n位(n表示一代种群中的个体数目)形成新种群;

协方差自适应调整的进化策略(CMA-ES)

  • 简介
    (1)协方差自适应调整的进化策略(Covariance Matrix Adaptation Evolution Strategy, CMA-ES)是最有名,应用最多,性能最好的ES之一
    (2)在中等规模(变量个数大约在 3-300范围内)的复杂优化问题上具有很好的效果。
    (3)是Google Vizier: A Service for Black-Box Optimization 包含的四种用于调hyper-parameter 的方法之一。

  • 几个应用文章
    (1)Path Integral Policy Improvement with Covariance Matrix Adaptation, ICML, 2012.
    (2)Optimizing Walking Controllers for Uncertain Inputs and Environments, ACM Transactions on Graphics 29. 4 (2010)
    (3)Flexible Muscle-Based Locomotion for Bipedal Creatures , ACM Transactions on Graphics 32.6 (2013)
    (4)在强化学习和不确定环境下的行走控制取得了极好的效果。视频2013年 Flexible Muscle-Based Locomotion for Bipedal Creatures

  • 基本特点
    (1)无梯度优化,不使用梯度信息,
    (2)局部搜索中无梯度算法通常比梯度算法慢,通常需要O(n)倍的评估,
    (3)在复杂优化问题non-separable, ill-conditioned, or rugged/multi-modal 上表现良好。

  • 算法步骤:核心想法是通过对正态分布N(mt, θt2Ct)中协方差矩阵C的调整来处理变量之间的依赖关系和scaling。分成以下三步:
    (1)采样产生新解;
    (2)计算目标函数值;
    (3)更新分布参数 mt, θt,Ct
    ES算法设计的核心就是如何对这些参数进行调整,尤其是步长参数和协方差矩阵的调整,以达到尽可能好的搜索效果。对这些参数的调整在ES算法的收敛速率方面有非常重要的影响。CMA-ES调整参数的基本思路是,调整参数使得产生好解的概率逐渐增大(沿好的搜索方向进行搜索的概率增大)

CMA-ES搜索过程

你可能感兴趣的:(遗传算法GA和进化算法ES)