我正在比较旅行推销员问题(TSP)的不同表述。特别是,我正在比较DFJ与MTZ子行程约束公式。这些是使用GLPK解算器实现的(通过带有pyomo
包的Python代码。由于前者中的约束很多,因此TSP的解决方法如下:
这对于我需要处理的实例非常有效。另一方面,MTZ公式 way 较慢(10到10k倍之间)。因此,我有以下问题:
关于第二个问题,两个区别是DFJ公式包含$ O(2 ^ n)$子行程约束,而MTZ包含$ O(n ^ 2)$子行程约束,并且DFJ使用$ n $变量,而MTZ使用$ 2n $。但是,由于DFJ是迭代求解的,因此不需要所有子轮廓约束(实际上,对于我使用的实例,少于10次迭代就足够了),因此我们剩下的约束数量也差不多。因此,我认为差异在于变量的数量,但我不知道为什么会导致如此大的差异。
最后一点,我认为使用启发式方法(即Christofide's algorithm)可以在目标上产生上限,该上限可用作新的约束(希望大大减少可行解的集合)。但是,如果我首先应用Christofide的启发式方法对目标进行上限,然后在解决MIP之前将其添加到约束中,则效率充其量是不变的,最坏的情况是降低了10倍。
为什么?这与可行解决方案的新形式有关吗?我的一个朋友还假设GLPK可能无法执行适当的预处理以消除主导约束,但是我不知道这是否成立,也不知道在哪里寻找。
有人对我遇到的众多问题之一有想法吗?
答案 0 :(得分:1)
关于Christofides启发式方法的使用:我认为正确的方法不是将其目标作为约束。相反,您想提供目标作为求解器的上限。我不确定GLPK如何处理此问题,但是我想有一种方法可以提供初始上限,在找到可行的解决方案之前,求解器可以首先使用它来确定分支定界树。胜过你的束缚。
此外,Christofides具有良好的理论特性,但通常来说,它不是TSP的最佳启发式方法。即使是最简单的插入,例如最远的插入,平均也可以表现更好。
不幸的是,我对DFJ与MTZ子行程消除约束没有任何建议...