查找混合整数程序的绑定约束
Finding binding constraints of a mixed-integer-program
我想找到约束,这些约束在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 常量进行比较可确定约束是否具有约束力。
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 在基于范围的for循环中使用结构化绑定声明
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 视觉studo 2019中的漫画和静态/动态绑定
- 将自由函数绑定为类成员函数
- 将常量指针引用绑定到非常量指针
- 在派生类中绑定非静态模板化成员函数
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 在 openGL 中多次绑定缓冲区
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 使用结构化绑定'Reflection'
- 为什么 std::绑定错误参数可以成功?
- 如何绑定 C++ gRPC 客户端的网络接口
- 在 openmp 中,omp_get_thread_num是否绑定到物理线程?
- C++绑定(已弃用)
- 运行时错误:引用绑定到类型为"int"的空指针
- 查找混合整数程序的绑定约束
- 如何判断约束绑定编码的时间限制