当我修改约束 (GLPK) 的 RHS 时会发生什么?

What happens when I modified the RHS of a constraint (GLPK)?

我正在增加 使用 GLPK 的 MIP 问题的小于或等于约束的 RHS。然而,有时,重新优化后,GLPK 无法在时限内找到任何可行的解决方案。所以我猜它不会检查以前的解决方案是否可行。有人对此有经验吗?或者可以给我指一个不是源代码本身的文档吗?

此外,我想知道在为任何其他求解器(例如 Gurobi、Cplex、SCIP、CBC)添加约束后的工作流程是什么,因此任何信息都会有所帮助。

干杯!

显然,如果放宽公式,问题就不会变成不可行的(如果之前可行的话)。所以要么你误解了某些东西,要么代码有错误。

我认为您还没有尝试其他求解器。你绝对应该这样做。一般而言,您在问题中提到的所有内容都被认为比 GLPK 更多 reliable/stable。

更改模型中的某些内容后,通常会丢弃所有求解信息,并从头开始解决问题。即使你放宽了问题,这并不一定意味着它更容易解决 MIP 求解器,特别是,它可能总是导致不同的 LP 解决方案,导致不同的分支,从不同的起点开始的原始启发式并且是最后倒霉。所以最后,你可能只是不幸,求解器现在需要更长的时间。

在 MIP 求解器中执行 "warmstart" 非常困难。 SCIP 提供了这样的功能,见 http://scip.zib.de/doc-5.0.1/html/REOPT.php,但这只有在你改变 objective 系数或收紧约束时才有效(它基于之前不可行的一切仍然不可行的假设,所以你只需要仅在树的可行部分再次搜索)。

不过,在您的特定情况下,只需存储可行的解决方案并在下一个 运行 中尝试它们就已经有所帮助。这是 SCIP 默认执行的操作。此外,SCIP(以及您提到的所有替代方案)应该比 GLPK 更加稳定和高效。请参阅http://plato.asu.edu/ftp/milpc.html MIPLIB 2010 上的 MIP 求解器基准测试,标准 MIP 基准测试集:GLPK 能够在 2 小时的时限内求解 87 个实例中的 2 个,而 CBC 求解 53 个,SCIP 求解 76 个,并且CPLEX 和 Gurobi 都解决了所有 87 个实例。 Xpress 和 SAS 在基准测试集上的表现也非常出色。