gurobipy.Var#
- class Var#
Gurobi variable object. Variables are always associated with a particular model. You create a variable object by adding a variable to a model (using
Model.addVar
), rather than by using aVar
constructor.Variable objects have a number of attributes. The full list can be found in the Attributes section of this document. Some variable attributes can only be queried, while others can also be set. Recall that the Gurobi Optimizer employs a lazy update approach, so changes to attributes don’t take effect until the next call to
Model.update
,Model.optimize
, orModel.write
on the associated model.We should point out a few things about variable attributes. Consider the
lb
attribute. Its value can be queried usingvar.lb
. The Gurobi library ignores letter case in attribute names, so it can also be queried asvar.LB
. It can be set using a standard assignment statement (e.g.,var.lb = 0
). However, as mentioned earlier, attribute modification is done in a lazy fashion, so you won’t see the effect of the change immediately. And some attributes can not be set (e.g., thex
attribute), so attempts to assign new values to them will raise an exception.You can also use
Var.getAttr
/Var.setAttr
to access attributes. The attribute name can be passed to these routines as a string, or you can use the constants defined in theGRB.Attr
class (e.g.,GRB.Attr.LB
).To build expressions using variable objects, you generally use operator overloading. You can build either
linear
orquadratic
expressions:expr1 = x + 2 * y + 3 * z + 4.0 expr2 = x ** 2 + 2 * x * y + 3 * z + 4.0
The first expression is linear, while the second is quadratic. An expression is typically then passed to
setObjective
(to set the optimization objective) oraddConstr
(to add a constraint).- getAttr(attrname)#
Query the value of a variable attribute. The full list of available attributes can be found in the Attributes section.
Raises an
AttributeError
if the requested attribute doesn’t exist or can’t be queried. Raises aGurobiError
if there is a problem with theVar
object (e.g., it was removed from the model).- Parameters:
attrname – The attribute being queried.
- Returns:
The current value of the requested attribute.
- Example:
print(var.getAttr(GRB.Attr.X)) print(var.getAttr("x"))
- sameAs(var2)#
Check whether two variable objects refer to the same variable.
- Parameters:
var2 – The other variable.
- Returns:
Boolean result indicates whether the two variable objects refer to the same model variable.
- Example:
print(model.getVars()[0].sameAs(model.getVars()[1]))
- property index#
This property returns the current index, or order, of the variable in the underlying constraint matrix.
Note that the index of a variable may change after subsequent model modifications.
- Returns:
-2: removed, -1: not in model, otherwise: index of the variable in the model
- Example:
v = model.getVars()[0] print(v.index) # Index will be 0
- setAttr(attrname, newvalue)#
Set the value of a variable attribute. Note that, due to our lazy update approach, the change won’t actually take effect until you update the model (using
Model.update
), optimize the model (usingModel.optimize
), or write the model to disk (usingModel.write
).The full list of available attributes can be found in the Attributes section.
Raises an
AttributeError
if the specified attribute doesn’t exist or can’t be set. Raises aGurobiError
if there is a problem with theVar
object (e.g., it was removed from the model).- Parameters:
attrname – The attribute being modified.
newvalue – The desired new value of the attribute.
- Example:
var.setAttr(GRB.Attr.UB, 0.0) var.setAttr("ub", 0.0)
- property nl#
Returns an
NLExpr
representing this variable. Using this property is as advanced technique and is not required in the vast majority of cases. See More control over expression creation for further details.