遗传算法(Genetic Algorithms)是什么(概念/技术)?起源自哪里?

遗传算法的基础

 

历史背景

19世纪的世界四大学说之一:达尔文的自然选择学说。

它的主要内容有四点:过度繁殖,生存斗争(也叫生存竞争),遗传和变异,适者生存。

达尔文认为:一切生物都有产生变异的特性。引起变异的根本原因是环境条件的改变。然后,在生物产生的各种变异中,有的可以遗传,有的不能够遗传。

在生存斗争里面,如果有「有利变异」的基因,那它就容易在生存斗争中获胜。相反的,有不利变异的个体,就容易在生存斗争中失败,然后死亡。

它的主要思想就是:但凡是生存下来的生物,都是适应环境的。而被淘汰的生物,都是对环境不适应的,这就是适者生存。

达尔文就把这个过程叫做自然选择。自然选择的过程是一个长期的、缓慢的、连续的过程。

因为,生存斗争是不断地进行,所以,自然选择也是不断地进行的,这样一代一代下来,可以说物种也因此得到优化了。

 

 

遗传算法的起源与发展

遗传算法:就是根据自然界这个“物竞天择,适者生存”现象而提出来的一种随机搜索算法

 

大概在60 年代左右,美国密歇根大学(心理学和计算机科学与工程)的Holland (荷兰)教授,和他的学生们,创造出了一种基于生物遗传和进化机制的遗传算法

 

 

1967年,Holland的学生J.D.Bagley(巴格利),在博士论文中,首次提出“遗传算法(Genetic Algorithms)”这个词语。

之后,Holland也指导了学生完成了很多篇有关遗传算法研究的论文。

 

1971年,R.B.Hollstien(霍尔斯汀),在他的博士论文中,首次把遗传算法用于函数优化。

1975年,是遗传算法历史上十分重要的一年。因为,这一年Holland出版了他的著名专著《自然系统和人工系统的自适应》(Adaptation in Natural and Artificial Systems)。这本书系统地论述了遗传算法,所以,也有人把1975年作为遗传算法的诞生年。

 

进入八十年代,遗传算法迎来了兴盛发展时期。

1985年,在美国召开了第一届遗传算法国际会议(International Conference on Genetic Algorithms ,ICGA),并且成立国际遗传算法学会(International Society of Genetic Algorithms ,ISGA),以后每两年举行一次。

 

这之后,有很多关于遗传算法的学术论文,也不断的被发表在《Artificial Intelligence》、《Machine Learning》、《Information science》、《Parallel Computing》、《Genetic Programming and Evaluable Machine(遗传编程和可评估机器)》等杂志上。


 

 

概念

遗传算法的大概步骤:

  1. 首先,对问题进行描述;
  2. 「潜在解」进行编码;
  3. 然后,用「随机数」初始化一个种群,种群中的每个个体,都对应一个编码;
  4. 最后,通过适应度函数,来度量个体的适应性。然后根据,适应度来选择算法。比如:淘汰适应度较低的个体,让优良的个体的基因,交叉复制和变异,产生新的子代。

 

和遗传算法相关的概念有:

(1) 选择算子

就是计算个体的适应值,然后根据大小,进行淘汰。就是:低适应值的个体会被淘汰,高适应值的个体会被保留

 

(2) 交叉算子

在种群中,「随机」选择「两个」个体,交换它们的染色体部分编码,然后,产生两个新的子个体。

子个体和父个体不同,但又包含父个体的大部分遗传信息。

 

(3) 变异算子

按照一个极小概率,随机改变染色体上的某个基因,增加群体的多样性。

 


 

基因重组与基因突变

交叉运算(crossover)

可以分为5种情况:(基因交叉,相当于基因重组或者杂交)

  1. 单点交叉
  2. 两点交叉和多点交叉
  3. 均匀交叉
  4. 算术交叉
  5. 基因突变

 

1. 单点交叉

单点交叉:就是一种比较简单的交叉方式。

做法:就是随机指定一个交叉点,然后交换部分染色体,生成两个新的个体

例子:

  • |:表示交叉点。
  • 左边是双亲的编码(x1,x2)
  • 右边是后代的编码(x1*,x2*)
  • 他们交换了后半部分的编码

 

 

2. 两点交叉和多点交叉

两点交叉:随机设置两个交叉点,然后,交换两个交叉点之间的染色体

1|10|10和 1|01|01

两点交叉后,得到:1|01|10 和 1|10|01。

 

多点交叉:随机设置多个交叉点,然后,交换部分编码串。

在实际的遗传算法实践中,一般不会使用多点交叉方法。因为,它可能会破坏最优解。

其实,随着交叉点的增加,编码结构被破坏的可能性也会增加。

 

3. 均匀交叉

均匀交叉:是多点交叉的一种特殊形式。

均匀交叉:指基因编码串中,每个基因位都用相同的概率进行交换。

 

4. 算术交叉

算术交叉:通过线性组合,产生两个新的子代个体。

算术交叉通常是用在:浮点数编码的染色体上(不是常见的二进制)。

 

5. 基因突变

基因突变(Mutation):就是染色体编码的某一位上的基因,改变了。

 

(1) 二进制编码

在二进制编码里面,就会按照一定的概率,把基因串上的0、1数字取反。

例子:是一个二进制编码的基因突变。

 

 

(2) 浮点型编码

浮点型编码的基因突变:就是对编码数值的增减。

例子:

2.3,5.6,6.2,8.0,6.3

经过基因变异后,可能得到的浮点数串:

2.4,5.5,6.1,7.8,6.5

 


 

遗传算法的一般步骤

① 随机构成一个初始种群,然后,计算个体的「适应度」

② 判断算法:是否满足某一指标(比如:收敛)。如果满足,就停止,然后输出结果;

③ 根据适应值大小进行一个排序,然后根据某一方式进行选择;

④ 按交叉概率,进行交叉操作;

⑤ 按变异概率,进行变异操作;

⑥ 返回步骤 ② ,循环执行。

 

 


 

 

遗传算法的实现技术:

1. 编码

编码是为了建立个体特征和基因之间的映射关系.

编码:是遗传算法要解决的首要问题,也是设计遗传算法时的一个关键步骤。

编码方法会影响到后续的交叉算子、变异算子等的运算,也会很大程度上决定了遗传进化的效率。

 

目前,已经提出了许多种不同的编码方法。 

总的来说,这些编码方法可以分为三大类:二进制编码法、浮点编码法、符号编码法。

 

(1) 二进制编码

二进制编码:是遗传算法中最常用的编码方式。

方法:就像人类的基因有AGCT,4种碱基序列一样。在这里我们只用了0和1两种碱基,然后,把他们串成一条链,形成染色体。一个位能表示出2种状态的信息量。所以,足够长的二进制染色体就能够表示出所有的特征。

 

优点:

  • 编码、解码操作,较为简单易懂
  • 它相对应的交叉,变异等操作,也比较容易实现。

 

缺点:

  • 当个体特征比较复杂的时候,对应的编码会很复杂,所以,相应的解码过程也会过分繁复。
  • 因为这种编码有随机性,所以它的局部搜索能力较差。

 

为降低算法的复杂性、提高运算效率,可以用浮点数编码的方式。

 

(2) 格雷码方法

格雷码编码:是二进制编码的一种变形。

区别就是:连续两个整数,所对应的编码值之间,只有一个码位是不同的

这个区别就解决了二进制编码的缺点(相临数字的距离较远的问题),增强了遗传算法的局部搜索能力。

 

(3) 浮点编码法

二进制编码虽然简单,但是也存在很多问题,比如:当个体长度较短时,可能达不到精度要求;然后,当个体编码长度较长时,虽然能提高精度,但增加了解码的难度。

浮点数编码方式:用了浮点数来表示个体的每个基因值。

 

这个浮点数用的就是:某一范围内的一个浮点数。

这种方法,要保证基因值是在给定的区间内;还要保证产生的新个体的基因值,也在这个区间范围内。

优点:

  • 浮点数编码可表示的数值范围较大,并且精度较高;
  • 可以用于较大空间的遗传搜索;
  • 改善了遗传算法的计算复杂性;
  • 也可以用于设计针对问题的专门的知识型遗传算子。

 

(4) 符号编码法

符号编码法:指基因值,可能涉及符号集(如{A,B,C…})。

优点:可以编码有意义的基因值。

 


2. 群体(= 种群)的规模

种群(population):就是个体的集合,这个集合里面,个体数称为种群。

规模较大的群体:一般个体多样性较高。这样可以避免算法陷入「局部最优解」。

⚠️:增大群体的话,同时也会增加计算的复杂度,降低整体的效率

 

群体的规模:一般选在编码长度的倍数值。然后,群体的规模是可变的,可以根据算法的结果进行一些调整。

在实际应用里面,编码长度越长,所需要的群体规模就要越大。

 

初始群体的选取:一般用随机的方法产生。也可以用启发式的方法,来选取更加优良的群体。

 


3. 选择策略

选择策略的目的:通过选择函数,从群体中选择优胜的个体,然后,淘汰不满足条件的个体。

所以,选择合适的淘汰策略,也是遗传算法的关键。

 

常见的策略有:

 

(1) 基于适应值比例的策略

用适应值作为选择依据。值越低,越容易被淘汰。

代表算法:轮盘赌选择(Roulette Wheel Selection),和它的改进算法。

 

轮盘赌选择:是一种回放式的随机采样方法。每个个体进入下一代的概率,就等于它的适应度,与整个种群中个体适应度值和的比例。但是,这种方法选择误差比较大。

 

例子:轮盘赌选择:

假如有5条染色体,他们的适应度分别为5、8、3、7、2

那么总的适应度为:F = 5 + 8 + 3 + 7 + 2 = 25

那么各个个体的被选中的概率为:

α1 = ( 5 / 25 ) * 100% = 20%

α2 = ( 8 / 25 ) * 100% = 32%

α3 = ( 3 / 25 ) * 100% = 12%

α4 = ( 7 / 25 ) * 100% = 28%

α5 = ( 2 / 25 ) * 100% = 8%

当指针在这个转盘上转动,停止下来时,指向的个体就是被选择的个体。

可以看出,适应性越高的个体被选中的概率就越大。

 

(2) 基于排名的策略

根据个体的适应度在群体中的排名,来确定被选择的概率。

 

(3) 基于局部竞争机制的策略

在群体中,随机选择k个个体进行比较,然后选择适应度最好的。

代表算法:局部选择法、联赛选择法等。

 


4. 适应度 (fitness function) 及选择函数

适应度函数

也叫评价函数。就是计算群体中每个个体,是否满足选择条件。

适应度函数总是非负的,但是,目标函数可能有正有负。所以,需要在目标函数和适应度函数之间进行一些变换。

 

评价个体适应度的一般过程:

  1. 对个体编码串,进行「解码」处理后,可以得到个体的表现型。
  2. 由个体的表现型,可以计算出对应个体的目标函数值。
  3. 根据最优化问题的类型,由目标函数值,按一定的转换规则,最后求出个体的适应度。

 

选择函数

常用的选择方法前面讲过了一些,比如,轮盘赌选择法,随机遍历抽样法(轮盘赌选择法的改进),局部选择法,最佳个体保存方法(也叫做复制),排序选择法(根据个体适应值的大小进行排序,然后选择),联赛选择方法(每次选取几个适应度最高的个体,然后遗传到下一代群体中)等。

 


5. 变异算子

变异算子:就是按一定的概率,发生变异,产生新的遗传基因。

目的:增加种群多样性,提高全局最优搜索能力,保持群体差异,防止过早出现收敛。

 

常用的变异算法,比如:

  • 基本位变异(Simple Mutation):随机对某一位的值做变异运算;
  • 均匀变异(Uniform Mutation;
  • 非均匀变异;
  • 等等。

 


遗传算法的优越性:

① 可以普遍适用于数值求解问题。而且对目标函数要求低。

② 在求解很多组合优化问题时,不需要对问题有非常深入的理解。而且,计算过程是比较快速简单的。

③ 可以和其他的启发式算法进行兼容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值