logical constraint
AnsweredHi,
Can we write logical constraints in Gurobi? For example, CPLEX can read below constraints.
1. if then else constraints
(x + y >= 1) => z >= 1, (if (x+y) is greater than equal to 1 then z will be greater than equal to 1)
2. counting constraints
(x1 >= 1) + (x2>=1) + (x3>=1) >= 2, (at least two of X has to be greater than equal to 1)
Thank you for your time in advance.

Yes, you can model logic like this using indicator constraints. For example, consider the conditional statement
$$\begin{align*}x + y \geq 1 &\implies z \geq 1.\end{align*}$$
First, we create a new binary variable \( w \). Then, the above is equivalent to
$$\begin{align*} x + y \geq 1 &\implies w = 1 \\ w = 1 &\implies z \geq 1.\end{align*}$$
Indicator constraints must be of the form
$$\begin{align*}\textrm{binary variable equals } 0 \textrm{ or } 1 &\implies \textrm{some constraint.}\end{align*}$$
So, we can rewrite the first conditional statement \( x + y \geq 1 \implies w = 1 \) with its logically equivalent contrapositive: \( w = 0 \implies x + y < 1 \). Strict inequalities aren't allowed in a math programming framework, but we can closely approximate this constraint with \( x + y \leq 1  \epsilon \) for some small \( \epsilon > 0 \). Note that we can use \( \epsilon = 1 \) if \( x \) and \( y \) are both integer variables.
Altogether, we add the following two indicator constraints:
$$\begin{align*} w = 0 &\implies x + y \leq 1  \epsilon \\ w = 1 &\implies z \geq 1.\end{align*}$$
Alternatively, you can model this logic yourself without using indicator constraints. E.g., if \( z \geq 0 \), then the conditional statement \( w = 1 \implies z \geq 1 \) is equivalent to \( z \geq w \).
1
Please sign in to leave a comment.
Comments
1 comment