序列重要时如何处理交叉?

时间:2013-05-08 18:50:34

标签: algorithm genetic-algorithm

当孩子必须有特定的顺序时,如何跨越两个父母?

例如,当将遗传算法应用于顶点/边的固定图上的旅行商问题时,您必须应对并非所有顶点都可以移动到其他顶点的事实。这使得交叉变得更加困难,因为与其中所有顶点可以行进到所有其他顶点的TSP不同,当执行交叉时,必须在产生合法路径的点处完成交叉。另一种方法是无论如何只是交叉并拒绝非法路径,但是风险很大,计算成本很高,几乎没有法律途径。

我已经阅读了有关排列交叉的内容,但我并不完全确定这是如何解决这个问题的。有人能指出我正确的方向或建议吗?

1 个答案:

答案 0 :(得分:4)

订购应尽可能不成为遗传编程的约束。也许您应该考虑为您的解决方案选择另一种格式。 例如,在您的TSP中,考虑密码子A-> B。

您可以考虑“从A到B的最短路径”,而不是“从A到B的边缘”。这样,您的解决方案始终可行。您只需预先计算最短路径矩阵作为预处理。

现在,这并不能保证候选人在您的交叉之后成为可行的解决方案。应调整您的交叉,以确保您的解决方案仍然可行。例如,对于TSP,请考虑序列:

1:A B C D E F G H

2:D E G C B F H

随机选择一个支点(在我们的示例中为 E )。这导致以下序列完成:

1':A B C D E 。 。

2':D E 。 。 。 。

必须访问所有顶点才能获得有效的解决方案。在1'中,必须访问F,G和H.我们按顺序排列它们。在2'中,G,C,B,F和H按1重新排序:

1':A B C D E G F H

2':D <强> E B C F G H

希望这有帮助。