# TempConstr

##

TempConstr

Gurobi temporary constraint object. Objects of this class are created
as intermediate results when building constraints using overloaded
operators. There are no member functions on this class. Instead,
`TempConstr`

objects are created by a set of functions
on Var,
MVar,
LinExpr,
QuadExpr,
MLinExpr,
MQuadExpr, and
GenExpr objects
(e.g.,
==,
<=, and
>=).
You will generally never store objects of this class in your own variables.

The `TempConstr`

object allows
you to create several different types of constraints:

**Linear Constraint:**an expression of the form`Expr1 sense Expr2`

, where`Expr1`

and`Expr2`

are LinExpr objects, Var objects, or constants, and`sense`

is one of`==`

,`<=`

or`>=`

. For example,`x + y <= 1 + z`

is a linear constraint, as is`x + y == 5`

. Note that`Expr1`

and`Expr2`

can't both be constants.**Ranged Linear Constraint:**an expression of the form`LinExpr == [Const1, Const2]`

, where`Const1`

and`Const2`

are constants and`LinExpr`

is a LinExpr object. For example,`x + y == [1, 2]`

is a ranged linear constraint.**Quadratic Constraint:**an expression of the form`Expr1 sense Expr2`

, where`Expr1`

and`Expr2`

are QuadExpr objects, LinExpr objects, Var objects, or constants, and`sense`

is one of`==`

,`<=`

or`>=`

. For example,`x*x + y*y <= 3`

is a quadratic constraint, as is`x*x + y*y <= z*z`

. Note that one of`Expr1`

or`Expr2`

must be a QuadExpr (otherwise, the constraint would be linear).**Linear Matrix Constraint:**an expression of the form`Expr1 sense Expr2`

, where one or both of`Expr1`

and`Expr2`

are MLinExpr objects and`sense`

is one of`==`

,`<=`

or`>=`

. For example,`A @ x <= 1`

is a linear matrix constraint, as is`A @ x == B @ y`

.**Quadratic Matrix Constraint:**an expression of the form`Expr1 sense Expr2`

, where one or both of`Expr1`

and`Expr2`

are MQuadExpr objects and`sense`

is one of`==`

,`<=`

or`>=`

. For example,`x @ Q @ y <= 3`

is a quadratic constraint, as is`x @ Q @ x <= y @ A @ y`

.**Absolute Value Constraint:**an expression of the form`x == abs_(y)`

, where`x`

and`y`

must be Var objects.**Logical Constraint:**an expression of the form`x == op_(y)`

, where`x`

is a binary Var object, and`y`

is a binary Var, a list of binary Var, or a tupledict of binary Var, and`op_`

is either`and_`

or`or_`

(or the Python-specific variants,`all_`

and`any_`

).**Min or Max Constraint:**an expression of the form`x == op_(y)`

, where`x`

is a Var object, and`y`

is a Var, a list of Var and constants, or a tupledict of Var, and`op_`

is one of`min_`

or`max_`

.**Indicator Constraint:**an expression of the form`(x == b) >> (Expr1 sense Expr2)`

, where`x`

is a binary Var object,`b`

is either`0`

or`1`

;`Expr1`

and`Expr2`

are LinExpr objects, Var objects, or constants, and`sense`

is one of`==`

,`<=`

or`>=`

. Parenthesizing both expressions is required. For example,`(x == 1) >> (y + w <= 5)`

is an indicator constraint, indicating that whenever the binary variable`x`

takes the value`1`

then the linear constraint`y + w <= 5`

must hold.

Consider the following examples:

model.addConstr(x + y == 1); model.addConstr(x + y == [1, 2]); model.addConstr(x*x + y*y <= 1); model.addConstr(A @ x <= 1); model.addConstr(x @ A @ x <= 1); model.addConstr(x == abs_(y)); model.addConstr(x == or_(y, z)); model.addConstr(x == max_(y, z)); model.addConstr((x == 1) >> (y + z <= 5));In each case, the overloaded comparison operator creates an object of type

`TempConstr`

, which is then immediately passed to method
Model.addConstr.