【问题标题】:Display Constraints and Conflict Information CPLEX ILOG Java显示约束和冲突信息 CPLEX ILOG Java
【发布时间】:2018-07-04 11:18:33
【问题描述】:

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

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

但还是不清楚如何设置。

谢谢!

【问题讨论】:

    标签: java cplex ilog


    【解决方案1】:

    【讨论】:

    • 谢谢!但这仅在您使用 IloLPMatrix 时才有效,而我不是。我在同一个 Java 文件中创建模型,并添加目标函数和约束。
    【解决方案2】:

    关于您的第一个问题,您有几个选择。要查看生成的约束,您只需将模型导出为 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 报告多少信息。”从您的 cmets 中,您应该已经可以访问约束(如果您还没有,只需将它们存储在数组或其他一些数据结构中);您没有没有使用IloLPMatrix 来使用refineConflict 方法。该技术说明中的示例显示了如何在调用 refineConflict 后打印冲突。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多