环称为一个代(或世代,ge
eratio
)。而我把这整个的循环称作一个时代(epoch),在我的正文和代码中将始终都用这样方式来称呼。r
r
331什么是轮盘赌选择?r
WhatstheRouletteWheelSelectio
r
r
轮盘赌选择是从染色体群体中选择一些成员的方法,被选中的机率和它们的适应性分数成比例,染色体的适应性分数愈高,被选中的概率也愈多。这不保证适应性分数最高的成员一定能选入下一代,仅仅说明它有最大的概率被选中。其工作过程是这样的:r
r
设想群体全体成员的适当性分数由一张饼图来代表见图34,这一饼图就和用于赌博的转轮形状一样。我们要为群体中每一染色体指定饼图中一个小块。块的大小与染色体的适应性分数成比例,适应性分数愈高,它在饼图中对应的小块所占面积也愈大。为了选取一个染色体,你要做的,就是旋转这个轮子,并把一个小球抛入其中,让它翻来翻去地跳动,直到轮盘停止时,看小球停止在哪一块上,就选中与它对应的那个染色体。本章后面我就会告诉你怎样来编写这种程序的准确算法。r
r
r
r
图34 染色体的轮盘赌式选择r
r
r
332什么是杂交率?WhatstheCrossoverRater
r
杂交率就是用来确定2个染色体进行局部的位(bit)的互换以产生2个新的子代的概率。实验表明这一数值通常取为07左右是理想的,尽管某些问题领域可能需要更高一些或较低一些的值。r
r
每一次,我们从群体中选择2个染色体,同时生成其值在0到1之间一个随机数,然后根据此数据的值来确定两个染色体是否要进行杂交。如果数值低于杂交率O7就进行杂交,然后你就沿着染色体的长度随机选择一个位置,并把此位置后面所有的位进行互换。r
r
例如,设给定的2个染色体为r
r
10001001110010010r
r
01010001001000011r
r
沿着它们的长度你随机选择一个位置,比如说10,然后互换第10位之后所有位。这样两个染色体就变成了(我已在开始互换的位置加了一个空格):r
r
10001001101000011r
r
01010001010010010r
r
r
333什么是变异率?WhatstheMutatio
Rater
r
变异率(突变率)就是在一个染色体中将位实行翻转(flip,即0变1,1变0)的几率。这对于二进制编码的基因来说通常都是很低的值,比如0001。r
r
因此,无论你从群体中怎样选择染色体,你首先是检查是否要杂交,然后再从头到尾检查子代染色体的各个位,并按所规定的几率对其中的某些位实行突变(翻转)。r
r
r
334咂!Phewr
r
如果你对上面讲东西感到有些茫然,那也不必担心!从现在开始直到本章结束,所有阅读材料大多数都被设计用来重读两遍。这里有很多需要你理解的新r