Gurobi linear expression object. A linear expression consists of a constant term, plus a list of coefficient-variable pairs that capture the linear terms. Linear expressions are used to build constraints. They are temporary objects that typically have short lifespans.
GRBLinExpr class is a sub-class of the abstract base
In .NET languages that support operator overloading, you generally
build linear expressions using overloaded operators. For example, if
x is a GRBVar object, then
x + 1 is a GRBLinExpr
object. Expressions can be built from constants (e.g.,
expr = 0), variables
expr = 1 * x + 2 * y, or from other
expr2 = 2 * expr1 + x, or
expr3 = expr1 + 2 * expr2). You can also modify existing expressions
expr += x, or
expr2 -= expr1).
The other option for building expressions is to start with an empty expression (using the GRBLinExpr constructor), and then add terms. Terms can be added individually (using AddTerm) or in groups (using AddTerms or MultAdd). Terms can also be removed from an expression, using Remove.
Given all these options for building expressions, you may wonder which is fastest. For small expressions, you won't need to worry about performance differences between them. If you are building lots of very large expressions (100s of terms), the most efficient approach will be a single call to AddTerms. Using AddTerm. to add individual terms is slightly less efficient, and using overloaded arithemetic operators is the least efficient option.
To add a linear constraint to your model, you generally build one or
two linear expression objects (
expr2) and then use an
overloaded comparison operator to build an argument for
give a few examples:
Individual terms in a linear expression can be queried using the GetVar and GetCoeff methods. The constant can be queried using the Constant property. You can query the number of terms in the expression using the Size property.
Note that a linear expression may contain multiple terms that involve the same variable. 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 GetVar).