有人可以解释一下Order Crossover的工作原理吗?我将举出这个例子,我希望以一种通用的方式理解它。
父母1 = 1 2 3 | 4 5 6 7 | 8 9
父母2 = 4 5 2 | 1 8 7 6 | 9 3
解决方案是两个孩子:
儿童1 = 2 1 8 | 4 5 6 7 | 9 3
儿童2 = 3 4 5 | 1 8 7 6 | 9 2
我了解一些部分而不是其他部分。
由于
答案 0 :(得分:14)
基本上,来自父母1的大量连续等位基因下降,剩余的值按照它们在父母2中出现的顺序放在孩子身上。
步骤1:从父母1中选择一系列连续的等位基因(下划线)
步骤2:将条带放到Child 1并在Parent 2中标出这些等位基因。
步骤3:从条带的右侧开始,从父母2抓取等位基因并将其插入到条带右边缘的Child 1中。由于8位于父2中的那个位置,因此它首先在条带的右边缘插入到子1中。注意等位基因1,2和3被跳过,因为它们被标记出来,4被插入到第1个孩子的第2个位置。
步骤4:如果您想要父母双方的第二个孩子,请翻转父母1和父母2并返回步骤1.
答案 1 :(得分:5)
有序交叉的一种解决方案详见this post。
这个答案提供了一些示例Java代码,其中包含详细说明用于Ordered Crossover的进程的文档。
此外,Moscato的this paper提供了OX流程的细分。
希望这有帮助!