显示约束和冲突信息CPLEX ILOG Java

时间:2018-07-04 11:18:33

标签: java cplex ilog

使用CPLEX ILOG JAVA API,如何打印出生成的约束,如果有任何问题,我也想打印冲突信息。 我找到了,

https://www.ibm.com/support/knowledgecenter/SSSA5P_12.5.1/ilog.odms.cplex.help/CPLEX/Parameters/topics/ConflictDisplay.html

但仍不清楚如何设置。

谢谢!

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

关于第一个问题,您有两种选择。要查看生成的约束,您只需将模型导出为LP格式即可查看用户可读的模型版本。例如,CPLEX附带的LPex1.java示例程序显示了如何将模型导出为LP格式:

 // write model to file
 cplex.exportModel("lpex1.lp");

或者,如果我们使用LPex1.java示例程序,则可以添加以下代码来手动打印约束:

 // print constraints
 System.out.println("Constraints:");
 for (int i = 0; i < rng[0].length; ++i) {
    System.out.println("  " + rng[0][i]);
 }

IloRange对象与toString很好地显示。这将打印如下内容:

Constraints:
  IloRange c1 : -infinity <= (-1.0*x1 + 1.0*x2 + 1.0*x3) <= 20.0
  IloRange c2 : -infinity <= (1.0*x1 - 3.0*x2 + 1.0*x3) <= 30.0

关于第二个问题,您必须调用IloCplex.refineConflict来计算冲突(如另一个答案所示)。 ConflictDisplay参数“确定冲突细化器工作时CPLEX报告多少信息。”从您的注释中,您应该已经可以访问约束(如果尚未访问约束,只需将它们存储在数组或其他数据结构中);您没有必须使用IloLPMatrix来使用refineConflict方法。该技术说明中的示例显示了如何在调用refineConflict之后打印冲突。

相关问题