Gurobi quadratic expression object. A quadratic expression consists of a linear expression plus a list of coefficient-variable-variable triples that capture the quadratic terms. Quadratic expressions are used to build quadratic objective functions and quadratic constraints. They are temporary objects that typically have short lifespans.
You generally build quadratic expressions using overloaded operators.
For example, if x
is a Var
object, then x * x
is a
QuadExpr object. Expressions
can be built from constants (e.g., expr = 0
), variables (e.g.,
expr = 1 * x *x + 2 * x * y
), or from other expressions (e.g.,
expr2 = 2 * expr1 + x * x, or expr3 = expr1 + 2 * expr2
).
You can also modify existing expressions (e.g.,
expr += x * x
, or expr2 -= expr1
).
The full list of overloaded operators
on QuadExpr objects
is as follows:
+
, +=
,
-
, -=
, *
, *=
, and /
.
In Python parlance, we've defined the following
QuadExpr
functions:
__add__
, __radd__
, __iadd__
,
__sub__
, __rsub__
, __isub__
,
__mul__
, __rmul__
, __imul__
, and
__div__
.
We've also overloaded the comparison operators (==, <=, and >=), to make it easier to build constraints from quadratic expressions.
Note that it is much more efficient to build large quadratic
expressions by extending existing expressions (using +=
or -=
), rather than by repeatedly creating new expressions. The
statement expr = expr + x
creates a new copy of expr
,
for example, while expr += x
just appends a new term. You can
also use quicksum to build large
expressions efficiently.
Another option for building quadratic expressions is to use the addTerms method, which adds an array of new terms at once. Terms can also be removed from an expression using remove.
Individual quadratic terms in a quadratic expression can be queried using the getVar1, getVar2, and getCoeff methods. You can query the number of quadratic terms in the expression using the size method. To query the constant and linear terms associated with a quadratic expression, use getLinExpr to obtain the linear portion of the quadratic expression, and then use the getVar, getCoeff, and getConstant methods on this LinExpr object.
Note that a quadratic expression may contain multiple terms that involve the same variable pair. These duplicate terms are merged when creating a constraint from an expression, but they may be visible when inspecting individual terms in the expression (e.g., when using getVar1 and getVar2).