【问题标题】:Finding binding constraints of a mixed-integer-program查找混合整数程序的绑定约束
【发布时间】:2018-12-31 17:26:57
【问题描述】:

我想找到在 MIP 问题的最佳解决方案中绑定的约束,由 C++ 中的 Cplex 解决。通过绑定,我的意思是 LHS 的值等于 RHS 的值的约束。例如,如果一个问题的解决方案是:

x = 1,y = 0,

那么约束 x + y

这可以使用 IloRange 的 getSlack 或 getDual 函数对 LP 完成:如果约束的 slack 为零,或者对偶值不为零,则约束是绑定的。

当问题是 MIP 时,我找不到 Cplex 的任何函数来为 IloRange、IloConstraint 或类似对象提供此属性或值。我也不希望在 C++ 中手动执行此操作(提取约束的每个变量并将每个约束的值求和)。有没有办法做到这一点?

【问题讨论】:

    标签: c++ cplex mixed-integer-programming


    【解决方案1】:

    即使您已经找到了一种方法,如您在自己的答案中描述的那样,也值得一读,例如本页:http://www-01.ibm.com/support/docview.wss?uid=swg21399941

    这个想法是您可以解决 MIP 问题,然后将问题类型更改为“固定”线性问题并重新解决。由于这种方法修复了当前的解决方案,但作为 LP 解决了问题,因此所有其他对偶值和降低的成本都可用。

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回答,我实际上已经考虑过这一点,但想避免解决 LP 的计算负担。但我相信这是另一种解决方案。
    • 我认为 LP 求解时间等在大多数情况下可以忽略不计,因为这种方法会在求解过程开始时固定求解值。但是你的论点和方法是完全有效的。
    【解决方案2】:

    我找到了答案,IloCplex::getValue(IloNumExprArg) 实际上在给定当前解决方案的情况下为您提供了表达式的值(类似约束 LHS)。将此值与 RHS 常量进行比较可确定约束是否具有约束力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 2013-12-24
      相关资源
      最近更新 更多