天天看点

《Java遗传算法编程》—— 2.6 交叉方法

本节书摘来异步社区《java遗传算法编程》一书中的第2章,第2.6节,作者: 【英】lee jacobson(雅各布森) , 【美】burak kanber(坎贝尔),更多章节内容可以访问云栖社区“异步社区”公众号查看。

在交叉过程中,除了用不同的选择方法,还有可用不同的方法在两个个体之间交换遗传信息。不同的问题具有不太一样的特点,采用特定的交叉方法更好。例如,“全一”问题只要求完全由1构成的字符串。字符串“00111”与字符串“10101”具有相同的适应度值,因为它们都包含3个1。对于这种类型的遗传算法,情况并非总是如此。设想我们试图创建一个字符串,它按顺序列出数字1到5。在这种情况下,字符串“12345”与“52431”的适应度值非常不同。这是因为我们不只是寻求正确的数字,也寻求正确的顺序。对于这样的问题,适合采用考虑基因顺序的交叉方法。

我们在这里实现的交叉方法是均匀交叉(uniform crossover)。在这种方法中,后代的每个基因都有50%的机会来自第一个亲代或其第二个亲代,如图2-2所示。

《Java遗传算法编程》—— 2.6 交叉方法