0

这是我之前关于使用 SCIP 对 MIP 进行 LP 松弛的问题的跟进。

虽然我可以通过简单地将 MIP(以 CPLEX 格式)传递给 SoPlex 来计算 MIP 的 LP 松弛解,但我观察到 SoPlex 所花费的计算时间比使用 SCIP 本身优化 MIP(测试较小的输入)要长)。由于 SCIP 在求解 MIP 之前在内部使用 SoPlex,这怎么可能?此外,我的 LP 松弛结果实际上是给出整数解,并且与 MIP 具有相同的目标值。我在 LP 放松中犯了错误吗?还是我的问题/公式的某些属性?

我指的是求解器打印的总计算时间(不是我自己计算的)。

4

2 回答 2

0

这种行为很可能来自 SCIP 预求解例程,这些例程收缩并重新格式化输入 MIP。您可以通过在开始优化后查看 SCIP 输出来验证这一点,其中 SCIP 会打印已删除变量的数量、已删除的约束等。

有时,整数公式可以更有效地减少问题。如果您的问题包含例如二进制变量,则在执行探测时可能会修复其中的许多变量:SCIP 迭代地将二进制变量固定为 0 或 1,如果一个固定导致不一致,则变量会得到修复。

于 2014-06-20T14:28:06.373 回答
0

这种行为可以通过不同的预求解步骤来解释。SCIP 的预求解通常比 SoPlex 更快并且删除更多的行和列。请查看统计数据中的相应信息。您可以通过键入 在交互式 shell 中显示 SCIP 统计信息display statistics,而 SoPlex 使用命令行参数打印更多信息-q(如果您使用的是 SoPlex 2.0)。您可以尝试的另一件事是参数调整。您是否在 SoPlex 中测试过不同的定价器(-p3用于 devex,-p4用于最陡边)或缩放器(-g1 -g3-g4)?毫无问题地运行 SoPlex,它将显示可用参数。

于 2014-06-20T14:19:45.310 回答