这是我之前question关于使用SCIP进行MIP LP放松的后续行动。
虽然我能够通过简单地将MIP(以CPLEX格式)传递给SoPlex来计算我的MIP的LP松弛解决方案,但我观察到SoPlex所花费的计算时间比使用SCIP本身优化MIP要高(测试较小的输入)。 由于SCIP在解决MIP之前在内部使用SoPlex,这怎么可能? 而且,我的LP Relaxation结果实际上给出了整数解,并且与MIP具有相同的目标值。我在LP Relaxation中犯了错误吗?或者它是我的问题/制定的一些属性?
我指的是解算器打印的总计算时间(不是我自己计算的)。
答案 0 :(得分:0)
这种行为可以通过不同的预先决定步骤来解释。 SCIP的预分解通常比SoPlex更快,并且删除更多的行和列。请查看统计数据中的相应信息。您可以通过键入display statistics
在交互式shell中显示SCIP统计信息,而SoPlex使用命令行参数-q
打印更多信息(如果您使用的是SoPlex 2.0)。
您可以尝试的另一件事是参数调整。您是否在SoPlex中测试了不同的定价器(-p3
为devex,-p4
为最陡边缘)或缩放器(-g1
-g3
或-g4
)?运行SoPlex时无需解决问题,它将显示可用的参数。
答案 1 :(得分:0)
这种行为很可能来自SCIP预处理例程,它缩小并重新构造输入MIP。您可以在开始优化后查看SCIP输出来验证这一点,其中SCIP打印已删除变量的数量,删除约束等。
有时,整数配方可以减少问题。 如果您的问题包含例如二进制变量,则在执行探测时可能会修复很多这些变量:SCIP迭代地将二进制变量修复为0或1,如果一个固定导致不一致,则变量将得到修复。