名称对应:样本->种群; 单条样本->种群个体(染色体);基因->单个特征;染色体(个体)-> 特征的组合。
如何将样本特征(基因)转换成编码,是GA算法中的第一步。
(1)二进制编码
假设变量 x 的定义域为[a, b] ,其精度要求为,则我们需要将[a,b]划分成
份等长区间,每个区间都用二进制串来表示,此时,任何一个二进制串
选都对应[a,b]中的一个点,这就是变量由实数空间向二进制位串空间的转化。
上述二进制串,需要解码过程:
首先,将二进制串转成十进制整数:
然后,按照下面等式计算对应的变量x:
举个例子:特征变量X,取值均处于0-1范围内[用归一化的方法解决此问题]。l 就是区间个数,也就是精度。
将其划分为10等份,所以区间就变成了[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]
那么0.2这个点,用字符串表示就是 0100000000。 ->二进制编码
转换的话就是:,
。那么转换后 0.25-0.2=0.05。精度在0.1的范围内。
二进制编码缺点:需要频繁的编码和解码, 计算量大, 而且只能产生有限的离散点阵, 还可能产生额外的最优点。且存在汉明悬崖问题。
汉明悬崖问题
(一)汉明距离定义:在一个码组集合中,任意两个码字之间对应位上码元取值不同的位的数目定义为这两个码字之间的汉明距离。在一个码组集合中,任意两个编码之间汉明距离的最小值称为这个码组的最小汉明距离。最小汉明距离越大,码组越具有抗干扰能力。
举例: 码字A为 10001001 码字B为 10110001 那么不同的字符数为3,汉明距离就是3。
计算公式: i=0,1,…n-1,x,y都是n位的编码,⊕表示异或。
(二)原因:为什么这个问题会影响二进制编码?
因为会导致在某些相邻整数的二进制代码之间有很大的汉明距离,使得遗传算法的交叉和突变都难以跨越。
举例 : 8的二进制:1000,7的二进制:0111。相邻整数汉明距离:4。这种情况,交叉和突变都难以处理。
(2)格雷编码
格雷编码以二进制编码为基础,其具体原理如下:
二进制串对应的格雷串为
,则二进制编码转化为格雷编码的数学变换为:
其中,运算符⊕表示模 2 加法
而格雷串转化为二进制串的数学变换为
(3)实数编码
进行如下线性变换:
n为样本中的影响因素个数,即把初始区间的第j 个优化变量x(j)对应到[0-1] 区间上的实数 y(j)。
参考文献:
[1]https://blog.csdn.net/zxwsbg/article/details/89461800
[2]王志海. 基于GA-BP模型的北京市二手房成交价格预测[D].河北工程大学,2019.
[3]金菊良,杨晓华,丁晶.基于实数编码的加速遗传算法[J].四川大学学报(工程科学版),2000(04):20-24.