Linear Programming – How to Write If-Else Statements

linear programmingmixed-integer programming

How to write the following if-else condition in Linear Programming?
If $a > b$ then
$c = d$
else
$c = e$

$d$, $e$ are variables. How can we write a linear program without multiplying d and e with binary variables? But we can use binary variables.

$a,b,c,d,e > 0$

Best Answer

This can not be formulated as a linear programming problem. We need extra binary variables and end up with a MIP.

First we do:

$$ a > b \Longleftrightarrow \delta = 1$$

This can be formulated as: $$\begin{align} &a \ge b + 0.001 - M(1-\delta)\\ &a \le b + M\delta\\ &\delta \in \{0,1\} \end{align}$$ (in practice I would drop the $0.001$ term).

Next we do: $$\begin{align} &\delta=1 \Longrightarrow c=d\\ &\delta=0 \Longrightarrow c=e \end{align}$$ This can be written as: $$\begin{align} & d-M(1-\delta)\le c \le d + M(1-\delta)\\ & e-M\delta\le c \le e + M\delta\\ \end{align}$$

Many modern MIP solvers have indicator constraints. This can make things easier as one can write implications directly without big-M constraints.