gurobipy.Var#
- class Var#
Gurobi 变量对象。变量总是与特定模型相关联。您通过向模型添加变量(使用
Model.addVar
)来创建变量对象,而不是使用Var
构造函数。变量对象具有许多属性。完整列表可以在本文档的属性部分找到。一些变量属性只能查询,而其他属性也可以设置。请记住,Gurobi优化器采用延迟更新方法,因此对属性的更改在下次调用
Model.update
、Model.optimize
或Model.write
之前不会生效。我们应该指出一些关于变量属性的注意事项。考虑
lb
属性。它的值可以使用var.lb
来查询。Gurobi库在属性名称中忽略字母大小写,因此也可以使用var.LB
来查询。它可以使用标准的赋值语句来设置(例如,var.lb = 0
)。然而,如前所述,属性修改是以一种懒散的方式进行的,因此你不会立即看到更改的效果。而且一些属性不能被设置(例如,x
属性),因此尝试为它们分配新值将会引发异常。你也可以使用
Var.getAttr
/Var.setAttr
来访问属性。属性 名称可以作为字符串传递给这些例程,或者你可以使用GRB.Attr
类中定义的常量(例如,GRB.Attr.LB
)。要使用变量对象构建表达式,通常使用运算符重载。你可以构建
线性
或二次
表达式:expr1 = x + 2 * y + 3 * z + 4.0 expr2 = x ** 2 + 2 * x * y + 3 * z + 4.0
第一个表达式是线性的,而第二个是二次的。一个表达式通常会被传递给
setObjective
(用于设置优化目标)或addConstr
(用于添加约束)。- getAttr(attrname)#
查询变量属性的值。完整的可用属性列表可以在属性部分找到。
如果请求的属性不存在或无法查询,则引发
AttributeError
。如果Var
对象存在问题(例如,它已从模型中移除),则引发GurobiError
。- Parameters:
attrname – 被查询的属性。
- Returns:
请求属性的当前值。
- Example:
print(var.getAttr(GRB.Attr.X)) print(var.getAttr("x"))
- sameAs(var2)#
检查两个变量对象是否引用同一个变量。
- Parameters:
var2 – 另一个变量。
- Returns:
布尔结果指示两个变量对象是否引用相同的模型变量。
- Example:
print(model.getVars()[0].sameAs(model.getVars()[1]))
- property index#
此属性返回变量在基础约束矩阵中的当前索引或顺序。
请注意,变量的索引可能会在后续模型修改后发生变化。
- Returns:
-2: 已移除, -1: 不在模型中, 否则: 变量在模型中的索引
- Example:
v = model.getVars()[0] print(v.index) # Index will be 0
- setAttr(attrname, newvalue)#
设置变量属性的值。请注意,由于我们采用延迟更新的方法,更改实际上不会生效,直到您更新模型(使用
Model.update
)、优化模型(使用Model.optimize
)或将模型写入磁盘(使用Model.write
)。可用属性的完整列表可以在 属性 部分找到。
如果指定的属性不存在或无法设置,则引发
AttributeError
。如果Var
对象存在问题(例如,它已从模型中移除),则引发GurobiError
。- Parameters:
attrname – 正在修改的属性。
newvalue – 属性的期望新值。
- Example:
var.setAttr(GRB.Attr.UB, 0.0) var.setAttr("ub", 0.0)
- property nl#
返回一个表示此变量的
NLExpr
。使用此属性是一种高级技术,在绝大多数情况下并不需要。有关更多详细信息,请参阅更多关于表达式创建的控制。