python - 不理解 model.getAttr() 的参数

标签 python gurobi

我是 Python 和 Gurobi 的新手,我正在阅读 model.getAttr 的手册,我知道返回的参数是 model.getAttr(attrname,objs=None)。

我不明白的是手册下面提供的示例代码:

print(model.getAttr("Pi", model.getConstrs()))

属性名称“Pi”不在我的代码中的任何位置,为什么它仍然能够返回值?

请帮忙!

 try:

    # 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: 
    m.addConstr(-x1 + x2 + 3*x3 <= -5, "c0")

    # Add constraint: 
    m.addConstr(x1 + 3*x2 - 7*x3 >= 10, "c1")

    m.optimize()

    # print optimal solutions
    for v in m.getVars():                     #m.getVars() retrieves all the variables in the model, contains v 
        print('%s %g' % (v.varName, v.x))     #v.varName returns name, v.x returns value

    # print optimal value
    print('Obj: %g' % m.objVal)

    # print dual values to all constraints
    print(m.getAttr("Pi", m.getConstrs()))

except GurobiError as e:
    print('Error code ' + str(e.errno) + ": " + str(e))

except AttributeError:
    print('Encountered an attribute error')


最佳答案

我猜你搞错了什么。 “Pi”是您使用 m.addConstr() 方法创建的线性约束对象属性。请参阅here了解所有可用属性的概述。

让我们考虑一下:

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)为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]

关于python - 不理解 model.getAttr() 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54441898/

相关文章:

python - Pandas - 多线图

python - 使用 ffmpeg 的图像到电影功能,是否可以在一段时间内传递帧而不是一次全部传递?

java - Gurobi 模型最优但违反约束

python - Gurobi模型修改慢,可以直接修改约束矩阵吗?

c - 在 GUROBI 的 C API 中添加约束需要太长时间

python - PuLP 和 OR-Tools 替代品

python - 无法从输出中删除大量空白行

python - 如何为 apache beam 数据流的输出 csv 添加 header ?

python - 如何在 Gurobi Python 目标函数中对 `if` 条件建模?

python - Matplotlib - 在对数刻度上旋转文本,其中角度不正确地舍入