1
模式识别与智能计算的MATLAB实现
1.11.2.1 9.2.1 染色体的编码
9.2.1 染色体的编码

所谓编码,就是将问题的解空间转换成遗传算法所能处理的搜索空间。编码是应用遗传算法时要解决的首要问题,也是关键问题。它决定了个体的染色体中基因的排列次序,也决定了遗传空间到解空间的变换解码方法。编码的方法也影响到遗传算子的计算方法。好的编码方法能够大大提高遗传算法的效率。遗传算法的工作对象是字符串,因此对字符串的编码有两点要求:一是字符串要反映所研究问题的性质;二是字符串的表达要便于计算机处理。

常用的编码方法有以下几种。

1.二进制编码

二进制编码是遗传算法编码中最常用的方法。它是用固定长度的二进制符号{0,1}串来表示群体中的个体,个体中的每一位二进制字符称为基因。例如,长度为10的二进制编码可以表示0~1023之间的1024个不同的数。若一个待优化变量的区间[a,b]=[0,100],则变量的取值范围可以被离散成(2lp个点,其中l为编码长度,p为变量数目。离散点0~100,依次对应于0000000000~0001100100。

二进制编码中符号串的长度与问题的求解精度有关。若变量的变化范围为[a,b],编码长度为l,则编码精度为alt

二进制编码、解码操作简单易行,杂交和变异等遗传操作便于实现,符合最小字符集编码原则,具有一定的全局搜索能力和并行处理能力。

2.符号编码

符号编码是指个体染色体编码串中的基因值取自一个无数值意义而只有代码含义的符号集。这个符号集可以是一个字母表,如{A,B,C,D,…};也可以是一个数字序列,如{1,2,3,4,…};还可以是一个代码表,如{A1,A2,A3,A4,…},等等。

符号编码符合有意义的积木块原则,便于在遗传算法中利用所求问题的专业知识。

3.浮点数编码

浮点数编码是指个体的每个基因用某一范围内的一个浮点数来表示。因为这种编码方法使用的是变量的真实值,所以也称为真值编码方法。

浮点数编码方法适合在遗传算法中表示范围较大的数,适用于精度要求较高的遗传算法,以便于在较大空间进行遗传搜索。

浮点数编码更接近于实际,并且可以根据实际问题来设计更有意义和与实际问题相关的交叉和变异算子。

4.格雷编码

格雷编码是这样的一种编码,其连续的两个整数所对应的编码值之间只有一个码位是不同的,其余的则完全相同。例如,31和32的格雷码为010000和110000。格雷码与二进制编码之间有一定的对应关系。

设一个二进制编码为B=bmbm-1…b2b1,则对应的格雷码为G=gmgm-1…g2g1。由二进制向格雷码的转换公式为

gi=bi+1⊕bi,i=m-1,m-2,…,1

由格雷码向二进制编码的转换公式为

bi=bi+1⊕gi,i=m-1,m-2,…,1

其中,⊕表示“异与”算子,即运算时两数相同时取0,不同时取1。例如:

0⊕0=1⊕1=0,0⊕1=1⊕0=1

使用格雷码对个体进行编码,编码串之间的一位差异,对应的参数值也只是微小的差异,这样与普通的二进制编码相比,格雷编码方法就相当于增强了遗传算法的局部搜索能力,便于对连续函数进行局部空间搜索。