# Linearize constraints on a truncated variable

Let $$K$$ and $$Q$$ be two variables, and $$Q_\min$$ and $$Q_\max$$ be two parameters. I need a series of linear constraints to define $$Q$$ vis-a-vis the value of $$K$$ based on the following rules:

1. If $$K \le Q_\min$$ then $$Q = Q_\min$$
2. If $$K \ge Q_\max$$ then $$Q = Q_\max$$
3. If $$Q_\min \le K \le Q_\max$$ then $$Q = K$$
• Do you have lower and upper bounds on $K$? Are $K$ and $Q$ integer variables or continuous? Mar 1 at 21:12
• @RobPratt The variable are continuous, and we should be able to define bounds on $K$ in the form of big $M$.
– Iman
Mar 2 at 4:37

Assume $$K_\min \le K \le K_\max$$, and introduce binary decision variables $$x_i$$ for the three cases (reordered as 1, 3, 2), together with linear constraints \begin{align} \sum_{i=1}^3 x_i &= 1 \tag1\label1 \\ K_\min x_1 + Q_\min x_2 + Q_\max x_3 \le K &\le Q_\min x_1 + Q_\max x_2 + K_\max x_3 \tag2\label2 \\ Q_\min \le Q &\le Q_\min x_1 + Q_\max(1-x_1) \tag3\label3 \\ (Q_\min-K_\max)(1-x_2) \le Q - K &\le (Q_\max-K_\min)(1-x_2) \tag4\label4 \\ Q_\max x_3 + Q_\min(1-x_3) \le Q &\le Q_\max \tag5\label5 \end{align} Constraint \eqref{1} selects exactly one case. Constraint \eqref{2} enforces the bounds on $$K$$ for each case. Constraints \eqref{3} through \eqref{5} enforce the value of $$Q$$ for each case.

You could alternatively replace \eqref{3} through \eqref{5} with indicator constraints: \begin{align} x_1 = 1 &\implies Q = Q_\min \\ x_2 = 1 &\implies Q = K \\ x_3 = 1 &\implies Q = Q_\max \end{align}

Yet another approach is to recognize that $$Q$$ is a nonconvex and nonconcave continuous piecewise linear function of $$K$$ and use any formulation for that, such as the ones recommended in the answers to How to linearize specific range constraints?.

• Rob, the RHS of (3) and the LHS of (5) are kaput.
– prubin
Mar 1 at 23:51
• @prubin Somehow my comment was deleted, but I did correct these. Mar 2 at 13:24
• I saw your comment before it was deleted (by SecretAgentMan, for unknown reasons).
– prubin
Mar 2 at 16:55