当孩子必须有特定的顺序时,如何跨越两个父母?
例如,当将遗传算法应用于顶点/边的固定图上的旅行商问题时,您必须应对并非所有顶点都可以移动到其他顶点的事实。这使得交叉变得更加困难,因为与其中所有顶点可以行进到所有其他顶点的TSP不同,当执行交叉时,必须在产生合法路径的点处完成交叉。另一种方法是无论如何只是交叉并拒绝非法路径,但是风险很大,计算成本很高,几乎没有法律途径。
我已经阅读了有关排列交叉的内容,但我并不完全确定这是如何解决这个问题的。有人能指出我正确的方向或建议吗?
答案 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
希望这有帮助。