Отобразить двойную переменную с помощью целлюлозы

Я пытаюсь отобразить двойную переменную, используя целлюлозу с решателем по умолчанию, но всегда получаю None для двойных значений.

В этом примере:

from pulp import *
prob = LpProblem("test080", LpMinimize)
x = LpVariable("x", 0, 5)
y = LpVariable("y", -1, 1)
z = LpVariable("z", 0)
c1 = x+y <= 5
c2 = x+z >= 10
c3 = -y+z == 7

prob += x + 4*y + 9*z, "obj"
prob += c1, "c1"
prob += c2,"c2"
prob += c3,"c3"

prob.solve()

Если я напечатаю двойное значение каждого из ограничений, используя .pi, я получу None.

Есть ли способ получить двойное значение, используя решатель целлюлозы по умолчанию?

Спасибо!


person TMart    schedule 19.08.2020    source источник


Ответы (2)


Чтобы получить информацию о LP от решателя по умолчанию (CBC), вы должны явно указать решателю, что проблема заключается в LP:

prob.solve(PULP_CBC_CMD(mip=False))
print(c3.pi)
# 8.0
person pchtsp    schedule 19.08.2020

Спасибо за ваш ответ.

Однако, если я использую

prob.solve(GLPK(mip=False))
print(c3.pi)

Я все еще не получаю.

PULP_CBC_CMD мне недоступен.

person TMart    schedule 20.08.2020
comment
вы уверены, что PULP_CBC_CMD недоступен? этот входит в мякоть, так что у вас должен быть к нему доступ. Я думаю, что GLPK_CMD (который вы используете с псевдонимом GLPK) еще не имеет считывания двойных цен. - person pchtsp; 21.08.2020