遗传算法
二进制编码转换
遗传算法是一种借鉴生物遗传和进化机制寻求最优解的计算方法。该方法模拟生物进化中的复制、交换、变异等过程,并通过模拟自然选择压力的方式推动问题解集向最优解方向移动。遗传算法为解决多种难以采用传统数学方法求解的复杂问题提供了新的思路。
1. 遗传算法的发展历史
研究者采用计算机模拟生物进化过程并解决优化问题的尝试始于20世纪40至50年代。20世纪60年代中期,美国密歇根大学的Holland教授提出了位串编码技术,这种编码技术适用于变异操作和交叉操作,他指出在研究和设计人工自适应系统时可借鉴生物遗传的机制,以体的方式进行自适应搜索。70年代中期,Holland提出遗传算法的模式定理(Schema Theorem),奠定了遗传算法的理论基础。
1967年,Holland教授的学生De Jong首次将遗传算法应用于函数优化中, 设计了遗传算法执行策略和性能评价指标他挑选的5个专门用于遗传算法数值实验的函数至今仍被频繁使用,而他提出的在线(on-line)和离线(off-line)指标则仍是目前衡量遗传算法优化性能的主要手段。
1989年,Goldberg出版专著“Genetic Algorithm in Search, Optimization, and Machine learning”。该书全面阐述了遗传算法的基本原理及应用,并系统总结了遗传算法的主要研究成果。该书对遗传算法科学基础的奠定做出了重要贡献。
1991年,Davis编辑出版了专著“Handbook of Genetic Algorithms”,该书中介绍了遗传算法在工程技术和社会生活中的大量应用实例。
1992年,美国斯坦福大学的Koza出版专著“Genetic Programming, on the Programming of Computers by Means of Natural Selection”,在此书中,他将遗传算法应用于计算机程序的优化设计和自动生成,并在此基础上提出遗传编程(Genetic Programming, GP)的概念。1994年,他又出版了上述专著的第二版“Genetic Programming II, Automatic Discovery of Reusable Program”,深化了遗传程序设计的研究。
从20世纪80年代中期起,遗传算法和进化计算的研究到达一个高潮,以遗传算法和进化计算为主题的国际学术会议在世界各地定期召开。1985年,第一届国际遗传算法会议(international conference on genetic algorithms, ICGA)在美国卡耐基·梅隆大学召开,以后每两年召开一届。此外,进化规划年会(annual conference on evolutionary program
ming, ACEP)于1992年在美国的加州召开第一届会议,以后每隔两年召开一届;进化计算会议(IEEE conference on evolutionary computation)也于1994年开始定期召开。
2. 遗传算法的生物学基础
遗传算法源于生物的进化与遗传原理在计算科学中的运用,了解生物学范畴的进化、遗传概念,有助于快速理解遗传算法的运行机理。
生物学对进化的认识经历了从宏观到微观两个阶段。在宏观阶段,达尔文创建了自然选择学说。该学说认为在特定的有限的资源条件下,生物时刻处在选择压力之中。生物种内部压力、种间压力和环境压力不断淘汰劣势个体,保留优质个体。在进化过程中,父代和子代之间存在性状的遗传和变异。遗传是指父代和子代之间性状上的相似性,变异则是指父代与子代之间以及子代个体之间形状上的差异性。遗传让子代能够继承父代的优良性状,而变异则让子代可能产生新的更适应环境的性状。生物种内部的遗传与变异,和生物种面临的选择压力,三者共同作用,使生物种向适应环境生存的方向发展进化。
20世纪生命科学中对染体和基因的研究,使人类对生物进化的认识进入微观层面。现代
分子生物学研究显示,生物的外在性状是由生物细胞内染体上的基因所决定的。对于某一性状而言(如虹膜的颜),基因型不同,则生物的外在表型也不同。在遗传过程中,染体发生连锁互换,基因型的组合发生变化,表型的组合也随之发生变化,有效增加更适应环境的表型组合出现的机率。染体上的基因发生突变,使生物可能获得新的突变后表型。进化的实质,是基因的交换和突变创造出具有多样基因型和外在性状的种,环境的选择压力再对种进行筛选淘汰,保留具有适应环境的基因和性状的个体。种内个体的遗传突变和环境对个体的筛选持续进行,最终带来种的进化。
3. 基本遗传算法
为了解决不同的问题,不同的学者设计了许多不同的编码方法来表示问题的可行性,并开发出了不同的遗传算子来模仿不同环境下的生物遗传特性。这些遗传算法有着共同的特点,即通过对生物进化过程中的交叉、变异、遗传、选择过程进行模仿。基于上述特点,Goldberg总结出了基本遗传算法(Simple Genetic Algorithms, SGA)3。基本遗传算法简单易懂,是其他遗传算法的基础。
3.1 基本遗传算法的运算过程
基本遗传算法的基础用语和运算过程与生物遗传过程存在着对应关系。与生物进化类似,遗传算法会首先生成一个初始种,标记为X。X中包含问题的多个潜在解x1, x2, x3, …..,xn。初始种生成后,因遗传算法不能直接处理解空间的潜在解数据,因此需要通过基因编码的方式,将解数据表达成遗传算法可处理的基因型串结构数据,即染体。染体经过遗传算子(Genetic Operators)操作,按照优胜劣汰的规则将适应度较高的个体的染体更多的传递给后代,经过多次的遗传选择操作,第N代的种中将会得到一个优良的个体x, x将达到或接近问题的最优解x*。
遗传算法中的遗传算子包括选择、交叉、变异三种:
选择(selection):根据个体的适应度,按照一定的规则从第t代种中选择出优良个体遗传到t+1代体中。
交叉(crossover):将第t代种内的个体随机搭配成对,每一对个体以某个交叉概率交换他们之间的部分染体。
变异(mutation):对第t代种内的个体,以某一较低的变异概率改变染体上的某一个或者某一些基因,使原基因值变为其他等位基因值。
基本遗传算法的运算过程如图表1所示。其运算过程如下:
随机建立初始体。
计算各个体的适应度。
  根据遗传概率,用下述操作产生新体:
    a. 复制,即选择,将已有优良个体复制后添入新体中,删除劣质个体。
    b. 交换,将选出的两个个体进行交换,所产生的新个体进人新体。
    c. 突变,随机改变某个体的某一字符后,将新个体添入新体。
反复执行,直至达到终止条件,选择最佳个体作为遗传算法的结果。
图表1:基本遗传算法运算过程
3.2 遗传编码
遗传算法不对求解问题的实际决策变量进行直接操作,而是对可行解的个体编码进行选择、交叉、变异等遗传操作并达到优化目的。把一个问题的可行解从解空间转化到遗传算法能够进行操作处理的空间的转化过程就是编码。
编码问题是应用遗传算法时的首要问题。常用的编码方法有二进制编码、格雷码编码、浮点数编码、符号编码方法几类。
3.2.1 二进制编码1
二进制编码是遗传算法中最常用的一种编码方法。它具有编码解码过程简单易行、遗传算子操作便于实现、复合最小字符编码原则等优点。
二进制编码的符号串长度与问题所要求的精度有关。若某一解集的取值范围为 [Umin, Umax],采用长度为 a 的二进制编码符号串表示该参数,则可产生的编码有2a 种,编码精度为:
编码长度越长,所对应的编码精度就越大,阶跃值就越小
编码过程举例:求实数区间 [0, 3] 上函数f ( x ) = − ( x − 1) 2+6最大值假设使用二进制编码形式,可以采用长度为5 的位串表示变量x,即从“00000”到“11111”。并将中间的取值映
射到实数区间 [0, 3] 内。由于从整数上来看,5位长度的二进制编码位串可以表示031,所以对应 [0, 3] 的区间,每个相邻值之间的阶跃值为 3/31 0.0968,这个就是所谓的编码精度。
3.2.2 格雷码编码7
对于一些连续优化问题, 二进制编码由于遗传算法的随机特性而使其局部搜索能力较差。为改进这一特性, 人们提出用格雷码进行编码。格雷码编码又称灰度编码,是二进制编码方法的一种变形。格雷码编码的连续的两个整数所对应的编码值之间仅仅只有一个码位是不相同的, 其余码位都完全相同。数字1到10 的二进制编码和格雷码编码分别如图表2所示。
图表2:二进制编码与格雷码编码
十进制数
二进制码
格雷码
0
0000
0000
1
0001
0001
2
0010
0011
3
0011
0010
4
0100
0110
5
0101
0111
6
0110
0101
7
0111
0100
8
1000
1100
9
1001
1101
10
1010
1111
若有一个长度为m的二进制编码为B=bmbm-1…b2b1,对应的格雷码为G=gmgm-1…g2g2,由二进制编码到格雷码的转换公式为:
由格雷码到二进制编码的转换公式为:
对于采用二进制编码的个体,变异操作是虽然只是改变某一个基因座,但可能造成对应的解的参数值的较大的差异。但采用格雷码对个体进行编码,变异操作造成编码串之间的一位差异,对应的解参数值也只是发生微小差异,这就相当于增强了遗传算法的局部搜索能力,便于算法进行局部空间搜索。
3.2.3 浮点数编码
对于高维、连续优化问题,采用二进制编码会带来一些不便之处。由于从一个连续量离散化为一个二值量本身存在误差,使得算法很难求得精确解。而要提高解的精度又必须加长
编码串的长度,从而增加了编码的组合方式,造成解空间扩大, 算法效率下降。同时,二进制编码也不利于反映所求问题的特定知识,对问题信息和知识利用得不充分也会阻碍算法效率的进一步提高。
为了解决二进制编码产生的问题,人们在解决一些数值优化问题尤其是高维、连续优化问题时采用浮点数编码方法。浮点数编码方法,是每个个体的每个基因值用实数表示,个体编码的长度等于其决策变量的个数。因为此种方法采用决策变量的真实值,所以又称实属编码法或者真值编码法。
3.2.4 符号编码方法
符号编码是指组成个体编码串的码值无数值含义而仅有字符含义这些符号可以是字符, 也可以是数字。例如, 对于旅行商问题, 假设有n 个城市分别记为C1 , C2 , … , Cn , 则[ C1, C2 , … , Cn ] 就可构成一个表示旅行路线的个体。符号编码的主要优点是便于在遗传算法中利用所求问题的专门知识及相关算法。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。