This is not, per se, very useful, but sorting a parameter inside a MIP model is not very easy for MIP solvers. Obviously, if you need a sorted parameter in the model, it is better to use a sorting algorithm. But useless models can still be interesting.

I use:

Input: a 1-dimensional parameter with values.

Output: a 1-dimensional variable with the values sorted in ascending order.

We can implement this with a **permutation matrix** \(\color{darkred}X\), which is a permuted identity matrix. In a MIP context, this becomes a binary variable with some **assignment constraints**.

MIP Model for sorting \(p_i\) |
---|

\[\begin{align}\min\>&\color{darkred}z=0\\& \sum_i \color{darkred}x_{i,j} = 1&&\forall j\\ & \sum_j \color{darkred}x_{i,j} = 1&&\forall i\\ & \color{darkred}y_i = \sum_j \color{darkred}x_{i,j}\cdot\color{darkblue}p_j\\& \color{darkred}y_i \ge \color{darkred}y_{i-1}\\ & \color{darkred}x_{i,j} \in \{0,1\}\end{align}\] |