Benders分解点削减了CPLEX的Python API

时间:2016-04-05 19:28:15

标签: python linear-programming cplex

我正在尝试使用CPLEX公开的python API将Benders Decomposition实现为混合整数线性程序。随附的教程文件(bendersatsp.py)显示了当内部子问题无限制时我们如何实现“光线”切割。然而,它没有说明实现点切割的过程。 Paul Robin在JAVA API上的blog提到“当LP子问题可行时,我们可以直接使用名为getDuals的函数获取双值”。在python的情况下程序是否相同?有没有一个例子说明如何做到这一点?

另外,为什么cplex附带的示例代码不会这样做?在这种情况下,当内部问题可行时会发生什么?

1 个答案:

答案 0 :(得分:3)

就我记忆而言,

bendersatsp.py是针对结构化问题的。如果我理解你正确你需要找到最优切割(在Benders的LP中有两种切割:可行性和最优切割),因为你需要找到双重切换(用于你的MIP的LP松弛)。使用Python API:

subproblem = cplex.Cplex()
## construct your subproblems
.....
## find variables' names:
con_names = subproblem.linear_constraints.get_names()
subproblem.solve()
## get the duals to cunstruct the cut:
duals = subproblem.solution.get_dual_values(con_names)

还有一件事,get_dual_values()会返回双极点或光线,具体取决于问题的解决方案状态(尽管方法的名称有点模糊)。