TITLE: How to write if else statement in Linear programming?
QUESTION [7 upvotes]: 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$

REPLY [19 votes]: 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.
{"set_name": "stack_exchange", "score": 7, "question_id": 2500415}