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

时间:2018-12-31 17:26:57

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

我想找到在MIP问题的最佳解决方案上具有约束力的约束,该约束由c ++中的Cplex解决。绑定是指约束,其中LHS的值等于RHS的值。例如,如果问题的解决方案是:

x = 1,y = 0,

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

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

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

2 个答案:

答案 0 :(得分:1)

即使您找到了自己回答中所描述的方法,也值得一读。本页:http://www-01.ibm.com/support/docview.wss?uid=swg21399941

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

希望这会有所帮助。

答案 1 :(得分:0)

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