Я пытаюсь закодировать алгоритм разложения Бендера, используя CPLEX.Чтобы убедиться, что я правильно его кодирую, я следую числовому примеру из «Методы декомпозиции в математическом программировании» AJ 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.