【发布时间】:2019-08-26 13:29:14
【问题描述】:
我正在比较旅行商问题 (TSP) 的不同表述。特别是,我正在比较 DFJ 与 MTZ 子旅游约束公式。这些是使用 GLPK 求解器实现的(通过带有pyomo 包的 Python 代码。由于前者的约束非常多,因此 TSP 求解如下:
- 放松所有子巡视限制
- 解决 MIP
- 如果解决方案可接受:完成
- else:为当前解中的每个子循环添加 DFJ 子循环约束
这对于我需要处理的实例非常有效。另一方面,MTZ 公式方式较慢(在 10 到 10k 次之间)。因此我有以下问题:
- MTZ 公式是否也可以有效地迭代求解?
- 时间增加 10-10k 倍的原因是什么?
关于第二个问题,两个不同之处在于 DFJ 公式包含 $O(2^n)$ 子游览约束,而 MTZ 包含 $O(n^2)$ 子游览约束并且 DFJ 使用 $n$ 变量,而MTZ 使用 $2n$。然而,由于 DFJ 是迭代求解的,所以不需要所有的 subtour 约束(实际上对于我使用的实例来说,少于 10 次迭代就足够了),我们留下了相似数量的约束。因此,我假设差异是变量的数量,但我无法弄清楚为什么这会导致如此大的差异。
最后一点,我认为使用启发式方法(即Christofide's algorithm)可以在目标上产生一个上限,该上限可以用作新的约束(希望大大减少可行解决方案的集合)。但是,如果我首先应用 Christofide 的启发式方法对目标设置一个上限,然后在求解 MIP 之前将其添加到约束条件中,则效率最多保持不变,最坏的情况最多下降 10 倍。
怎么会?这与可行解集的新形式有关吗?我的一个朋友还假设 GLPK 可能不会执行适当的预处理来消除主导约束,但我不知道这是否属实,我也不知道在哪里寻找这个。
有人对我提出的众多问题中的一个有想法吗?
【问题讨论】:
标签: mathematical-optimization heuristics glpk