This example demonstrates how you can use the METHOD=AUTO option in the DECOMP statement to execute the decomposition algorithm.
As in Example 15.3, consider a mixed integer linear program that is defined by the MPS data set mpsdata
. In this case, the structure of the model is unknown and only the MPS data set is provided to you.
The following PROC OPTMILP statements attempt to solve the problem by using standard methods and a 60-second time limit:
proc optmilp maxtime = 60 data = mpsdata; run;
The solution summary is shown in Output 15.5.1.
Output 15.5.1: Solution Summary
The iteration log, which contains the problem statistics and the progress of the solution, is shown in Output 15.5.2.
Output 15.5.2: Log
NOTE: The problem MPSDATA has 52638 variables (16038 binary, 0 integer, 0 free, 0 fixed). |
NOTE: The problem has 3949 constraints (3339 LE, 0 EQ, 610 GE, 0 range). |
NOTE: The problem has 148866 constraint coefficients. |
NOTE: The MILP presolver value AUTOMATIC is applied. |
NOTE: The MILP presolver removed 0 variables and 367 constraints. |
NOTE: The MILP presolver removed 6606 constraint coefficients. |
NOTE: The MILP presolver modified 6606 constraint coefficients. |
NOTE: The presolved problem has 52638 variables, 3582 constraints, and 142260 constraint |
coefficients. |
NOTE: The MILP solver is called. |
NOTE: The parallel Branch and Cut algorithm is used. |
NOTE: The Branch and Cut algorithm is using up to 4 threads. |
Node Active Sols BestInteger BestBound Gap Time |
0 1 0 . 7342.1209242 . 0 |
0 1 0 . 7337.8112270 . 7 |
0 1 0 . 7325.4946006 . 15 |
0 1 0 . 7318.3100411 . 22 |
0 1 0 . 7313.6092376 . 31 |
0 1 0 . 7308.6489578 . 38 |
0 1 0 . 7303.9359225 . 46 |
0 1 0 . 7298.3635513 . 54 |
0 1 0 . 7293.0296430 . 56 |
0 1 0 . 7288.8630869 . 58 |
NOTE: The MILP solver added 4241 cuts with 99960 cut coefficients at the root. |
NOTE: Real time limit reached. |
NOTE: No integer solutions found. |
Standard MILP techniques struggle to find a feasible solution within the specified time limit. The default decomposition method (METHOD=AUTO) attempts to find a block-angular structure by using the matrix-stretching techniques that are described in Grcar (1990) and Aykanat, Pinar, and Çatalyürek (2004).
proc optmilp data = mpsdata; decomp method = auto; run;
The solution summary is displayed in Output 15.5.3.
Output 15.5.3: Solution Summary
Solution Summary | |
---|---|
Solver | MILP |
Algorithm | Decomposition |
Objective Function | Total_Profit |
Solution Status | Optimal within Relative Gap |
Objective Value | 6972.3309347 |
Relative Gap | 8.802996E-10 |
Absolute Gap | 6.1377405E-6 |
Primal Infeasibility | 1.949996E-11 |
Bound Infeasibility | 6.999845E-12 |
Integer Infeasibility | 2.664535E-15 |
Best Bound | 6972.3309408 |
Nodes | 1 |
Iterations | 10 |
Presolve Time | 0.41 |
Solution Time | 43.21 |
The iteration log, which contains the problem statistics and the progress of the solution, is shown in Output 15.5.4.
Output 15.5.4: Log
NOTE: The OPTMILP procedure is executing in single-machine mode. |
NOTE: The problem MPSDATA has 52638 variables (16038 binary, 0 integer, 0 free, 0 fixed). |
NOTE: The problem has 3949 constraints (3339 LE, 0 EQ, 610 GE, 0 range). |
NOTE: The problem has 148866 constraint coefficients. |
NOTE: The MILP presolver value AUTOMATIC is applied. |
NOTE: The MILP presolver removed 0 variables and 367 constraints. |
NOTE: The MILP presolver removed 6606 constraint coefficients. |
NOTE: The MILP presolver modified 6606 constraint coefficients. |
NOTE: The presolved problem has 52638 variables, 3582 constraints, and 142260 constraint |
coefficients. |
NOTE: The MILP solver is called. |
NOTE: The Decomposition algorithm is used. |
NOTE: The DECOMP method value AUTO is applied. |
NOTE: The automated method will attempt to find block-angular form with 4 blocks. |
NOTE: The problem has a decomposable structure with 610 blocks. The largest block covers |
0.2233% of the constraints in the problem. |
NOTE: The decomposition subproblems cover 52638 (100%) variables and 3574 (99.78%) constraints. |
NOTE: The deterministic parallel mode is enabled. |
NOTE: The Decomposition algorithm is using up to 4 threads. |
Iter Best Master Best LP IP CPU Real |
Bound Objective Integer Gap Gap Time Time |
NOTE: Starting phase 1. |
1 0.0000 302.6667 . 3.03e+02 . 17 13 |
3 0.0000 0.0000 . 0.00% . 17 13 |
NOTE: Starting phase 2. |
. 7963.9930 6357.0113 6357.0113 20.18% 20.18% 22 18 |
6 7150.3964 6712.7278 6679.8374 6.12% 6.58% 45 26 |
7 6997.7702 6946.3759 6946.3759 0.73% 0.73% 68 32 |
8 6997.7702 6965.6818 6965.6818 0.46% 0.46% 87 38 |
9 6997.7702 6972.2774 6972.2774 0.36% 0.36% 98 41 |
. 6997.7702 6972.3309 6972.3309 0.36% 0.36% 99 42 |
10 6972.3309 6972.3309 6972.3309 0.00% 0.00% 100 42 |
Node Active Sols Best Best Gap CPU Real |
Integer Bound Time Time |
0 0 7 6972.3309 6972.3309 0.00% 100 42 |
NOTE: The Decomposition algorithm used 4 threads. |
NOTE: The Decomposition algorithm time is 42.68 seconds. |
NOTE: Optimal within relative gap. |
NOTE: Objective = 6972.3309347. |
As stated in the log, the automated method attempts to find a balanced block-angular form that contains four blocks (the same setting is used by default in the NTHREADS= option). The algorithm successfully finds such a decomposition and then further decomposes each block into its weakly connected components, resulting in 610 blocks and 99.78% subproblem coverage.