Consideremos un problema con tres variables: $u$ , $\sigma_l$ y $\sigma_w$ donde $\sigma_w > \sigma_l$ . Quiero representar la siguiente relación mediante programación entera. \begin{equation} u = \begin{cases} \sigma_w - x & x < \sigma_l \\ 0 & x > \sigma_l \end{cases} \end{equation}
Utilizando restricciones simples de tipo "o" (con una variable binaria y una M grande) puedo obtener el valor correcto para los casos en que $x > \sigma_w$ y el caso en que $x < \sigma_l$ Sin embargo, cuando $x \in (\sigma_l , \sigma_w)$ estas restricciones de uno u otro tipo fallan. Para mostrar lo que he intentado hasta ahora, escribo las restricciones either-or que he probado:
$0 \leq u \leq Mz\\ \sigma_l - x + z(\sigma_w - \sigma_l) \leq u \leq \sigma_l - x + z(\sigma_w - \sigma_l) + M(1-z)$
donde $z \in \{0,1\}$ y $M$ es un número arbitrariamente grande.