模式理论
模式理论的基本概念
- 编码的左边数字越小,则其适应度将越大。这种字符串(编码)的形式特征叫做编码的模式(Schema)。
- 模式中确定的字符个数称为模式的阶次(Order),记作 O(H) 。例如: O(000∗∗)=3 ,也就是说:模式阶次越低(确定的个数越少),编码的字符个数越多(不确定的(可变的)个数越多,需要编码),概括性越强。
- 模式中最前面和最后面两个确定字符的距离称之为模式的长度(Defining Length)记作α(H)。例如:α(00*0*)=3,α(* 0***)=0
- 若字符串的长度为L,字符的取值为K种,则字符串的模式数目为: ni=(K+1)L ;
遗传过程的模式数目及模式定理
复制时的模式数目。模式 H 以常数 c 繁殖到第t+1代时,其数目为: m(H,t+1)=m(H,1)∙(1+c)t 。
交换时的模式数目。在交换时模式 H 存货的概率为: P=1−Pc∙α(H)/(L−1) , Pc 一般在0.5-0.8之间,自己设定。
突变时的模式数目: P=(1−Pm)O(H)≈1−O(H)∙Pm
模式定理
- 经过复制、交换、突变,模式 H 在下一代羣体中拥有的个数数目为: m(H,t+1)=m(H,1)∙f(H)/∑fi/n×[1−Pc∙α(H)/(L−1)−O(H)∙Pm]
- 这个定理说明:长度短、阶次低、平均适应度大的模式在遗传算法循环中呈指数增长。
算子及参考技术
遗传算子
- 选择算子
- 交叉算子
- 复制算子
- 变异算子
- 重排序算子(选择之前重排序)
- 倒序算子(如果求极小值,那排序应该就是从小到大)
- 生态算子(用的比较少)
- 显性算子
参数技术
- 编码(Coding)与解码(Decoding)
- 适应度函数(Fitness Function)与评估(Evaluation)
- 选择(Selection)与复制(Reproduction)
- 交换(Crossover)
- 变异(Mutation)
- 其他算子(操作)
1. 编码(Coding)与解码(Decoding)
编码原则一:有意义积木块编码原则。应使用能易于产生与所求问题相关的、且具有低阶、短定义长度模式的编码方案。
编码原则二:最小字符集编码原则。应使用能使问题得到自然表示或者描述的具有最小编码字符集的编码方案。
十进制码(Decimal Code)
直接用十进制数编码,使用较少。适用于:变量多、数字大、初选阶段
优点:无需解码
缺点:突变的可能性太多,有9种(比如0,可以突变(补运算)成1、2、3、4、5、6、7、8、9);交换较粗略,在多代循环后收敛太慢。
十进制编码:就是用一个十进制数来表示,比如要求解一个复杂的数学方程,就可以用十进制编码,如果用二进制编码,随着一个数变大,那么用的二进制数的位数越多,对于方程而言十进制会更适合。如果方程出现变量特别多,且也出现了小数点,这样用十进制也会更方便。
编码在遗传过程也是可以变的,比如在初选用二进制,在精选阶段用另外一种编码方式。
二进制编码(Binary code)
二进制编码最长使用的一种编码。可分为:普通二进制编码和经典二进制编码。
正整数转化的二进制码,适用于:变量少、数值比较小、精选阶段
优点:突变时取反即可,结果唯一确定,交换时解可精确变化,在多代循环后收敛速度较快。
缺点:需要解码,增大运算量。
直接二进制编码,就是最常用的除2法。直接二进制编码会有这样一个问题:
比如:a: 12.345 二进制码为 1100.010110000……
b: 10.123 二进制码为 1010.000111110111……
在个体交叉时,如果a染色体选择了第四位符号位和b选择的第五位还进行交换,那就会出现b染色体中有两个小数点,这的来看,交换之后的b染色体已经没有意义了。
所以就有了间接二进制码
间接二进制码,每一个二进制码全部为正整数。
(a)码的位数公式
2m<(Umax−Umin2)<=2m+1
其中d为问题的解精确度,定义域为[ Umin,Umax ],则码的位数为 m+1 。
例:某问题的某个参量取值范围是[-250,250],要求精确度为0.00001。由于
225=33554432=3.3554432∗107
3.3554432∗107<(250−(−250))/0.00001=5∗107<6.7108864∗107
226=67108864=6.7108864∗107
该参量的二进制码所需位数为26位。这个26位中没有符号位也没有小数点位。这就使得在复制、交换、变异中没有任何限制。
解码公式:
x=Umin+(Umax−Umin2m−1)∑mi=1(bi∗2i−1)
例:某问题的某个参量二进制码为10010100001111010100010011,其取值范围为[-250,250],则其真值为:
x=−250+(500226−1)∑26i=1(bi∗2i−1)=39.52994
二进制码精确度可以,但是运算慢,十进制码运算快,但精确度不够,这就有一种码介于两者之间的编码方式:格雷码
格雷码(Gray Code)
增强遗传算法的局部搜索能力,便于对连续函数进行局部空间搜索。使用非常广泛。解码时,先将格雷码转化成二进制码,再将二进制码转化为十进制真实数;或直接将格雷码转化为十进制真实数。
假如一个格雷码有 m 位,即
G=g1g2g3……gm−1gm
二进制码也有 m 位,即
B=b1b2b3……bm−1bm
二进制码转化为格雷码
g1=b1
gi=bi−1⊕bi(i=2,3,……m−1,m)
附注:“异或”运算:“同”则为“0”,“异”则为“1”。
例:将二进制码1101转化为格雷码
因为 1101B=b1b2b3b4
即 b1=1,b2=1,b3=0,b4=1
所以 g1=b1=1
g2=b1⊕b2=1⊕1=0
g3=b2⊕b3=1⊕0=1
g4=b3⊕b4=0⊕1=1
即 1101B=1011G
格雷码转化为二进制码
b1=g1
bi=bi−1⊕gi(i=2,3,……m−1,m)
例:将格雷码1101转化为二进制码
因为 1011G=g1g2g3g4
即 g1=1,g2=0,g3=1,g4=1
所以 b1=g1=1
b2=b1⊕g2=1⊕0=1
b3=b2⊕g3=1⊕1=0
b4=b3⊕g4=0⊕1=1
即 1011G=1101B
浮点数编码(Floating-point Code)
个体的每个基因值用某一范围内的一个浮点数表示,个体的编码长度等于决策变量的个数。这种编码方式使用的是决策变量的真实值,故浮点编码方法也叫做真值编码方式。
符号编码(Character Code)
个体染色体编码串中的基因值取自一个无数值含义、而只有代码含义的符号集。
2.适应度函数(Fitness Function)与评估(Evaluation)
通过适应度函数可以评价个体的优劣,并确定是否输出目前最优解,或者继续循环。
对个体编码串解码后,可得到个体值,由个体真值可求出个体的目标函数值;由最优化问题的类型,由目标函数值按一定的转换规则可求出个体适应度。