Полагаю, вы что-то ошибаетесь.«Pi» - это атрибут линейного ограничения объекта , который вы создаете методом m.addConstr()
.См. здесь для обзора всех доступных атрибутов.
Давайте рассмотрим:
from gurobipy import Model, GRB
# Create a new model
m = Model("simplelp")
# Create variables
x1 = m.addVar(ub = 10, name="x1")
x2 = m.addVar(name="x2")
x3 = m.addVar(name="x3")
# Set objective
m.setObjective(x1 + 2 * x2 + 5 * x3, GRB.MAXIMIZE)
# Add constraint:
con0 = m.addConstr(-x1 + x2 + 3*x3 <= -5, "c0")
# Add constraint:
con1 = m.addConstr(x1 + 3*x2 - 7*x3 >= 10, "c1")
m.optimize()
Затем m.getConstrs()
возвращает список, содержащий все объекты ограничения:
In [16]: print(m.getConstrs())
Out[16]: [<gurobi.Constr c0>, <gurobi.Constr c1>]
, в то время как m.getAttr(attrname, objectslist)
возвращает для всех объектов в списке объектов значение атрибута attrname:
In [18]: print(m.getAttr("Pi", [con0, con1]))
Out[18]: [2.0, 0.0]
In [19]: print(m.getAttr("Pi", m.getConstrs()))
Out[19]: [2.0, 0.0]
In [20]: print([con0.Pi, con1.Pi])
Out[20]: [2.0, 0.0]