使用SCIP的CPLEX与CPLEX的速度

Nyx*_*nyx 4 scipy cplex scip gurobi pulp

我是LP的新手,并且只PuLP在Python中使用过.

  1. 为什么SCIP 3.2.1 - CPLEX 12.63和之间存在速度差异CPLEX 12.6.3?SCIP是否仍然使用CPLEX进行求解?

  2. 为什么有人将SCIP与CPLEX求解器一起使用,而不是直接使用CPLEX?

在此输入图像描述

sas*_*cha 9

这是什么区别

该图未显示LP基准,而是混合整数编程基准.

混合整数规划解算器通常使用一个分支和切基于算法(包括启发式和CO.),其中很多松弛求解(在序列;处理二进制/整数变量作为连续产生的LP-问题).

那么一个决定是选择如何解决这些轻松的子问题.最简单的决策(还有更多;例如调整Simplex算法的参数;当解决非线性锥形目标的问题时,它会变得更复杂)就是选择LP求解器.

SoPlex是SCIP团队的LP解算器实现.含义:

  • SCIP - SoPlex将使用SCIP的算法进行MIP(处理分支,切割生成和co.),使用SoPlex作为内部LP子问题的求解器
  • SCIP - CPLEX将使用SCIP算法进行MIP,使用CPLEX作为内部LP子问题的求解器

为什么将SCIP与CPLEX一起使用(而不是使用纯CPLEX方法)

为什么解释起来并不容易.

  • 请记住,所有MIP解算器都是基于启发式的,并且在某些问题上SCIP将比CPLEX更快(尽管选择了基础LP解算器).

    一些理论的关键词:NP-硬度(MIP)和无自由午餐定理

    • 更快可能意味着:由于基于MIP的策略更快,而不是底层LP解算器的速度,因此您甚至可以在子问题上使用CPLEX获得整体加速!
  • 两个求解器(MIP求解器)在参数和可访问性方面(内部算法组件)可能也有很大不同.很明显,你可以用比CPLEX更通用的方式调整SCIP(因为它是开源的)

  • 正如评论中提到的mattmilten:SCIP和CPLEX在支持可以解决的问题类方面也有所不同.这方面的一个例子可能是一些特殊的非线性约束(导致MINLP).使用SCIP来解决这类问题,仍然可以在内部使用CPLEX的LP解算器(与上面相同的参数)

  • 值得注意的是 SCIP 可以解决各种各样的问题类别 - 比 CPLEX 多 - 有时在解决非凸 MINLP 时仍然使用 CPLEX 作为 LP 求解器可能是有利的。 (2认同)