linear-programming - 无法使用 CPLEX 从 LP 中导出对偶值

标签 linear-programming cplex mixed-integer-programming

我正在尝试使用 CPLEX 编写 Bender 分解算法的代码。为了确保我的编码正确,我遵循了 A.J. 的“数学规划中的分解技术”中的数值示例。 Conejo 等人,第 247 页。

但是,我的问题可以在没有访问提到的 Material 或上下文知识的情况下陈述。 我需要解决以下 LP 并导出“fixing_x”约束的对偶值。

import cplex
x_master_value = 100.

c_toy_slave = cplex.Cplex()
types = c_toy_slave.variables.type

y = c_toy_slave.variables.add(names=["y"+str(i) for i in range(3)], lb=[0]*3, types=[types.continuous]*3)
x = c_toy_slave.variables.add(names=["x"], lb=[0], types=[types.continuous])
w = c_toy_slave.variables.add(names=["w"], lb=[0], types=[types.continuous])

cst1 = c_toy_slave.linear_constraints.add([[["y0", "y1", "x", "w"], [-1, -3, 2, -1]]],
                                    names=["cst1"], rhs=[2], senses=['L'])

cst2 = c_toy_slave.linear_constraints.add([[["y0", "y1", "x", "w"], [1, 3, -1, -1]]],
                                    names=["cst2"], rhs=[3], senses=['L'])

cst3 = c_toy_slave.linear_constraints.add([[["y2", "x"], [1, -3]]],
                                    names=["cst3"], rhs=[7/2], senses=['L'])

cst4 = c_toy_slave.linear_constraints.add([[["x"], [1]]],
                                    names=["fixing_x"], rhs=[x_master_value], senses=['E'])

c_toy_slave.objective.set_linear([("y0", -1.5), ("y1", -2), ("y2", -2), ("w", 40)])
c_toy_slave.objective.set_sense(c_toy_slave.objective.sense.minimize)

c_toy_slave.solve()

print("lambda = ", c_toy_slave.solution.get_dual_values("fixing_x"))

但 CPLEX 表示它不能使用 get_dual_values 方法并提示此消息: CPLEX 错误 1017:不可用于混合整数问题。 我不知道如何解决这个问题,因为我提供的输入不是 MIP,而是真正的 LP。

最佳答案

事实证明,删除 types=[type.continuous] 可选参数解决了我的问题(即,优化问题随后被正确识别为 LP)。如果我们查看 Cplex.variables.add 的文档,它说:

If types is specified, the problem type will be a MIP, even if all variables are specified to be continuous.

所以,这是预期的行为。

关于linear-programming - 无法使用 CPLEX 从 LP 中导出对偶值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56650285/

相关文章:

linear-programming - 线性规划 : Non-overlapping constraint?

java - 从回调中手动触发解决方案完善

java - CPLEX 收入最大化

linear-programming - 使用开源求解器具体化线性规划中的约束

java - 优化使用 CPLEX Java 实现高吞吐量

linear-programming - 如何在研究中展示 MiniZinc 的效率

r - p 色散(maxmin)问题的最佳线性化?

c# - 如何检查.NET中用CPLEX编码的模型是否是真实模型?

python - pyomo错误: CPLEXDirect does not support expressions of degree None

c++ - 寻找混合整数程序的绑定(bind)约束