TSP的Subtour约束公式和Christofide的启发式方法

时间:2019-04-04 17:34:46

标签: mathematical-optimization heuristics glpk

我正在比较旅行推销员问题(TSP)的不同表述。特别是,我正在比较DFJMTZ子行程约束公式。这些是使用GLPK解算器实现的(通过带有pyomo包的Python代码。由于前者中的约束很多,因此TSP的解决方法如下:

  1. 放宽所有子行程约束
  2. 解决MIP
  3. 如果可以接受解决方案:完成
  4. else:为当前解决方案中的每个子周期添加DFJ子行程约束

这对于我需要处理的实例非常有效。另一方面,MTZ公式 way 较慢(10到10k倍之间)。因此,我有以下问题:

  1. MTZ公式是否也可以有效地迭代求解?
  2. 时间增加10-10k的原因是什么?

关于第二个问题,两个区别是DFJ公式包含$ O(2 ^ n)$子行程约束,而MTZ包含$ O(n ^ 2)$子行程约束,并且DFJ使用$ n $变量,而MTZ使用$ 2n $。但是,由于DFJ是迭代求解的,因此不需要所有子轮廓约束(实际上,对于我使用的实例,少于10次迭代就足够了),因此我们剩下的约束数量也差不多。因此,我认为差异在于变量的数量,但我不知道为什么会导致如此大的差异。

最后一点,我认为使用启发式方法(即Christofide's algorithm)可以在目标上产生上限,该上限可用作新的约束(希望大大减少可行解的集合)。但是,如果我首先应用Christofide的启发式方法对目标进行上限,然后在解决MIP之前将其添加到约束中,则效率充其量是不变的,最坏的情况是降低了10倍。

为什么?这与可行解决方案的新形式有关吗?我的一个朋友还假设GLPK可能无法执行适当的预处理以消除主导约束,但是我不知道这是否成立,也不知道在哪里寻找。

有人对我遇到的众多问题之一有想法吗?

1 个答案:

答案 0 :(得分:1)

关于Christofides启发式方法的使用:我认为正确的方法不是将其目标作为约束。相反,您想提供目标作为求解器的上限。我不确定GLPK如何处理此问题,但是我想有一种方法可以提供初始上限,在找到可行的解决方案之前,求解器可以首先使用它来确定分支定界树。胜过你的束缚。

此外,Christofides具有良好的理论特性,但通常来说,它不是TSP的最佳启发式方法。即使是最简单的插入,例如最远的插入,平均也可以表现更好。

不幸的是,我对DFJ与MTZ子行程消除约束没有任何建议...