我已经制定了一个灵活的作业车间问题作为 CP 模型,就像 CPLEX Optimization Studio 中建议的那样。问题正在运行并创建正确的计划。所以我的问题是,是否也有可能使用 CPLEX 引擎解决这个问题,而不将其转换为 MIP。这样我就可以比较两个引擎的结果。所以一般来说,是否可以在 CP 公式模型上运行 CPLEX-Engine,或者我是否必须为此创建单独的 MIP?
3 回答
是的,这是可能的。在 OPL 中,尝试起来很容易。只需添加或删除一行
using CP;
在您开始.mod
使用 CP 优化器或 CPLEX 时。
但是,这两个引擎中的每一个都有它支持和不支持的模型结构。例如,CP 优化器不支持连续变量,而 CPLEX 不支持 alldiff 约束、区间变量等。如果您遇到“无法提取”异常或类似情况,那么您的模型将使用仅受其中一个支持的建模构造引擎。
此外,即使您没有遇到异常,那么您的比较可能仍然存在偏差:求解器引擎的性能不仅取决于模型类型和数据,还取决于实际模型公式。对于大量问题,有一些方法可以以对 CP 有利但对 CPLEX 不利的方式来表述它们,反之亦然。因此,如果两个引擎中的一个被证明速度较慢,您还必须考虑您的配方是否适合该特定引擎。
话虽如此,总是值得一试,看看会发生什么。
如果您使用特定于 CP Optimizer 的构造(例如interval
变量),那么 CPLEX 将无法理解您的模型。
只要您使用基本约束和整数决策变量,就可以。
例如,在颜色示例https://www.ibm.com/support/knowledgecenter/SSSA5P_12.7.0/ilog.odms.ide.help/examples/html/opl/color/color.mod.html中,您可以删除using CP;
和然后运行 CPLEX。
对于调度示例,CPO 和 CPLEX 中的模型会有所不同,但您仍可以通过热启动混合这两种公式。