The Decomposition Algorithm

Example 15.5 Block-Angular Structure and METHOD=AUTO

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 OPTMILP Procedure

Solution Summary
Solver MILP
Algorithm Branch and Cut
Objective Function Total_Profit
Solution Status Time Limit Reached
   
Best Bound 7288.8630869
Nodes 1
Iterations 35694
Presolve Time 0.39
Solution Time 59.81



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

The OPTMILP Procedure

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.