---- 21 PARAMETER pdata
i1 1, i2 3, i3 2, i4 1, i5 1, i6 1, i7 2, i8 3
i9 1, i10 2, i11 3, i12 2, i13 3, i14 3, i15 1, i16 2
i17 1, i18 1, i19 3, i20 2, i21 2, i22 2, i23 1, i24 1
i25 2, i26 3, i27 1, i28 2, i29 3, i30 1, i31 1, i32 2
i33 1, i34 3, i35 1, i36 1, i37 2, i38 3, i39 2, i40 2
i41 2, i42 1, i43 1, i44 1, i45 2, i46 1, i47 2, i48 2
i49 3, i50 1, i51 2, i52 3, i53 2, i54 1, i55 1, i56 1
i57 2, i58 2, i59 1, i60 3, i61 1, i62 1, i63 2, i64 3
i65 1, i66 1, i67 2, i68 2, i69 2, i70 2, i71 1, i72 1
i73 1, i74 3, i75 2, i76 3, i77 1, i78 1, i79 3, i80 1
i81 1, i82 1, i83 1, i84 2, i85 1, i86 1, i87 1, i88 1
i89 1, i90 3, i91 3, i92 2, i93 2, i94 3, i95 2, i96 3
i97 1, i98 3, i99 1, i100 2
---- 21 PARAMETER k = 50number to select
PARAMETER t = 2.12345target for mean of selected values
Model 1: binary variables
| Generic Model |
|---|
| \[ \begin{align} \min\> & \color{darkred}d^+ + \color{darkred}d^- \\ & \color{darkred}d^+ - \color{darkred}d^- = \sum_i \frac{\color{darkred}\delta_i \cdot \color{darkblue} p_i}{\color{darkblue} k} - \color{darkblue}t \\ & \sum_i \color{darkred}\delta_i = \color{darkblue}k \\ & \color{darkred}\delta_i \in \{0,1\} \\ & \color{darkred}d^+,\color{darkred}d^- \ge 0 \end{align} \] |
---- 62 VARIABLE delta.L selection of points
i2 1, i5 1, i6 1, i7 1, i8 1, i9 1
i11 1, i12 1, i13 1, i14 1, i15 1, i16 1
i17 1, i18 1, i19 1, i22 1, i26 1, i27 1
i28 1, i29 1, i30 1, i31 1, i33 1, i34 1
i35 1, i36 1, i38 1, i41 1, i49 1, i52 1
i55 1, i56 1, i58 1, i60 1, i61 1, i62 1
i64 1, i67 1, i68 1, i74 1, i76 1, i79 1
i84 1, i90 1, i91 1, i92 1, i93 1, i94 1
i96 1, i98 1
---- 62 PARAMETER value selected values
i2 3, i5 1, i6 1, i7 2, i8 3, i9 1
i11 3, i12 2, i13 3, i14 3, i15 1, i16 2
i17 1, i18 1, i19 3, i22 2, i26 3, i27 1
i28 2, i29 3, i30 1, i31 1, i33 1, i34 3
i35 1, i36 1, i38 3, i41 2, i49 3, i52 3
i55 1, i56 1, i58 2, i60 3, i61 1, i62 1
i64 3, i67 2, i68 2, i74 3, i76 3, i79 3
i84 2, i90 3, i91 3, i92 2, i93 2, i94 3
i96 3, i98 3
---- 62 PARAMETER vcount count of each value
116, 212, 322
---- 62 VARIABLE dev.L deviation
- 0.003450
---- 62 VARIABLE z.L = 0.003450objective
This model has \(n=100\) binary variables.
Model 2: Exploit special properties of the data
Instead of using binary variables, we can keep track of the number of occurrences of each unique value \(1,2,3\). This reduces the size of the model to just three binary variables.
The model looks like:
| Specialized Model |
|---|
| \[ \begin{align} \min\> & \color{darkred}d^+ + \color{darkred}d^- \\ & \color{darkred}d^+ - \color{darkred}d^- = \sum_j \frac{\color{darkred}n_j \cdot \color{darkblue} j}{\color{darkblue} k} - \color{darkblue}t \\ & \sum_j \color{darkred}n_j = \color{darkblue}k \\ & \color{darkred}n_j \in \{0,1,\dots,\color{darkblue}N_j\} \\ & \color{darkred}d^+,\color{darkred}d^- \ge 0 \end{align} \] |
---- 70 PARAMETER tabtabulation
145, 233, 322
A solution is:
---- 88 VARIABLE num.L number selected from bin j
16, 232, 312
---- 88 VARIABLE dev.L deviation
- 0.003450
---- 88 VARIABLE z.L = 0.003450objective
Extension: select up to \(kmax\) points
---- 119 **** Loop
---- 119 PARAMETER traceObjtrace objective values
i1 0.123450, i2 0.123450, i3 0.123450, i4 0.123450
i5 0.076550, i6 0.043217, i7 0.019407, i8 0.001550
i9 0.012339, i10 0.023450, i11 0.032541, i12 0.040117
i13 0.030396, i14 0.019407, i15 0.009883, i16 0.001550
i17 0.005803, i18 0.012339, i19 0.018187, i20 0.023450
i21 0.019407, i22 0.012914, i23 0.006985, i24 0.001550
i25 0.003450, i26 0.008065, i27 0.012339, i28 0.016307
i29 0.014481, i30 0.009883, i31 0.005582, i32 0.001550
i33 0.002238, i34 0.005803, i35 0.009164, i36 0.012339
i37 0.011685, i38 0.008129, i39 0.004755, i40 0.001550
i41 0.001499, i42 0.004402, i43 0.007171, i44 0.009814
i45 0.009883, i46 0.006985, i47 0.004210, i48 0.001550
i49 0.001001, i50 0.003450
---- 119 PARAMETER bestObj = 0.001001best objective
---- 119 PARAMETER bestNumbest selection
15, 233, 311
| Incorrect Extension Model |
|---|
| \[ \begin{align} \min\> & \color{darkred}d^+ + \color{darkred}d^- \\ & \color{darkred}d^+ - \color{darkred}d^- = \sum_j \color{darkred}n_j \cdot \color{darkblue} j - \color{darkred}k \cdot \color{darkblue}t \\ &\color{darkred}k = \sum_j \color{darkred}n_j \\ & \color{darkred}n_j \in \{0,1,\dots,\color{darkblue}N_j\} \\ & \color{darkred}d^+,\color{darkred}d^- \ge 0 \\ & \color{darkred}k \in \{1,\dots,\color{darkblue}{\mathit{kmax}}\} \end{align} \] |
| Linearized Extension Model |
|---|
| \[ \begin{align}\min\> & \color{darkred}d^+ + \color{darkred}d^- \\ & \sum_i \left(\color{darkred}y_i^+ - \color{darkred}y_i^- \right) = \sum_i \color{darkred}\delta_i\cdot \color{darkblue}p_i - \color{darkred}k \cdot \color{darkblue}t \\ & \color{darkred}y_i^{pm} \le \color{darkred}\delta_i\cdot\color{darkblue}U && \forall i, {pm}\in\{+,-\} \\ & \color{darkred}y_i^{pm} \le \color{darkred}d^{pm} && \forall i, {pm}\in\{+,-\} \\ &\color{darkred}y_i^{pm} \le \color{darkred}d^{pm} -(1-\color{darkred}\delta_i)\cdot \color{darkblue}U &&\forall i, {pm}\in\{+,-\} \\ & \color{darkred} k \in \{1,\dots,\color{darkblue}{\mathit{kmax}}\} \\ & \color{darkred}y_i^{pm} \in [0,\color{darkblue}U] \\ & \color{darkred}\delta_i \in \{0,1\} \end{align}\] |
---- 162 VARIABLE kvar.L = 49k as variable
---- 162 PARAMETER vcount count of each value
15, 233, 311
---- 162 VARIABLE z.L = 0.001001objective
Conclusions
References
- How to speed up linear programming problem solution, https://stackoverflow.com/questions/72439141/how-to-speed-up-linear-programming-problem-solution
Appendix: GAMS Model
*------------------------------------------------------------ |