前言:
本篇博客主要讲,遗传算法的实数编码:
前一篇博客讲的是,遗传算法的整数编码过程,通过整数十进制转化为二进制,通过二进制数的“交叉、变异”优选,实现遗传算法。
但是更多的时候,遇到的是实数情况,也可以将实数表示为二进制,然后使用同样的操作,但是二进制编码存在精度问题。这篇博客,讲一种使用实数仿二进制“交叉、变异”的过程。
一、问题分析:
问题: max f (x1, x2) = 21.5 + x1·sin(4πx1) + x2·sin(20πx2) s. t. x1^2 + x_2^2 < 20 -4.0 ≤ x1 ≤4 1 ≤ x2 ≤ 6
12.27晚更新ing,,,,
这是一个带有约束的,实数问题,需要求他的最大值。前一篇博客使用的遗传算法—整数编码的方式,在本博文的这个问题也可以用,但是需要考虑精度问题,当然也可以使用带有小数的二进制进行转换。二进制数的交叉变异很容易解释,那么十进制的实数的交叉变异的操作,下面详细解释。
12.28上午更新
二、实数的交叉“仿二进制”交叉
首先再来回顾一下生物学的知识,染色体的交叉的本质是遗传信息DAN的重组,也即两只DNA交换他们的部分片段,这发生在同源染色体上,如下图所示。
关于同源染色体:
同源染色体一个来自父本,一个来自母本;
它们的形态、大小和结构相同。由于每种生物染色体的数目是一定的,
所以它们的同源染色体的对数也一定。
作上述解释,是为了说明染色体之间的交叉是为了让给后代表现更多的性状,但是保留了该条染色体上绝大部分的遗传信息,
>>当同源染色体一模一样时,交换后的染色体不发生变化,
>>当两条染色体不同时,这种交换操作会使染色体A更趋向于染色体B,同理交换后的B也更趋向于A,因为各自的身上都携带了彼此的一部分。
按照这个理论分析,请看下面的式子:
是两个父代,是一双子代,两个父代经过交叉之后产生两个子代,是为了保证种群在进化中数量保持不变,下面结合图像解释一下这个式子,
当u=0.5时,接近于1,此时,
当u=0时,接近于0,此时,介于两者中间
当u>0.5时,大于1,最大值1.2,此时,后代和u=0时类似仍处于两者之前,但是会更靠近各自的父代。
三、实数变异"仿二进制变异"
染色体变异分为两大类,一般数目变异是致命的,朝着更加劣势的方向发展,而结构的变异一般来说对于也是不利的,更详细的变异种类如下图所示。
待更新,,,,,