无法使用CPLEX

时间:2019-06-18 13:27:37

标签: linear-programming cplex mixed-integer-programming

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

但是,我的问题可以在没有提到的材料或上下文知识的情况下陈述。 我需要解决以下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。

1 个答案:

答案 0 :(得分:2)

原来,删除A.py可选参数解决了我的问题(即,优化问题随后被正确识别为LP)。如果我们查看Cplex.variables.add的文档,它会显示:

  

如果指定了类型,则问题类型将是MIP,即使所有   变量被指定为连续的。

所以,这是预期的行为。