查找混合整数程序的绑定约束

Finding binding constraints of a mixed-integer-program

本文关键字:绑定 约束 程序 混合 整数 查找      更新时间:2023-10-16

我想找到约束,这些约束在MIP问题的最优解中具有约束力,由Cplex在c ++中解决。通过绑定,我的意思是约束,其中 LHS 的值等于 RHS 的值。例如,如果问题的解决方案是:

x = 1, y = 0,

则约束 x + y <= 2 是非约束性的 (LHS = 1 + 0 <2 = RHS),但是 x - y <= 1 是绑定的(LHS = 1 - 0 = 1 = RHS)。

对于使用 getSlack 或 IloRange 的 getDual 函数的 LP,可以做到这一点:如果约束的松弛度为零,或者对偶值不为零,则约束是绑定的。

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

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

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

希望这有帮助。

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