Benders分解点削减了CPLEX的Python API

问题描述 投票:0回答:1

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

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

python linear-programming cplex
1个回答
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()返回双极点或光线,具体取决于问题的解决方案状态(尽管方法的名称有点模糊)。

© www.soinside.com 2019 - 2024. All rights reserved.