The Decomposition Algorithm

Solving a MILP with DECOMP and PROC OPTMODEL

The following statements use the OPTMODEL procedure and the decomposition algorithm to solve the MILP:

proc optmodel;
   var x{i in 1..3, j in 1..2} binary;
   
   max f =    x[1,1] + 2*x[2,1] +   x[3,1]
                     +   x[2,2] +   x[3,2];
                     
   con m :    x[1,1] +   x[1,2]            >=  1;      
   con s1:  5*x[1,1] + 7*x[2,1] + 4*x[3,1] <= 11;
   con s2:    x[1,2] + 2*x[2,2] +   x[3,2] <=  2;
   
   s1.block = 0;
   s2.block = 1;
   
   solve with milp / presolver=none decomp=(logfreq=1);
   print x;
quit;

Here, the PRESOLVER=NONE option is used, because otherwise the presolver solves this small instance without invoking any solver. The solution summary and optimal solution are displayed in Figure 13.1.

Figure 13.1: Solution Summary and Optimal Solution

The OPTMODEL Procedure

Solution Summary
Solver MILP
Algorithm Decomposition
Objective Function f
Solution Status Optimal
Objective Value 4
Iterations 4
Best Bound 4
Nodes 1
   
Relative Gap 0
Absolute Gap 0
Primal Infeasibility 0
Bound Infeasibility 0
Integer Infeasibility 0

x
  1 2
1 0 1
2 1 0
3 1 1


The iteration log, which displays the problem statistics, the progress of the solution, and the optimal objective value, is shown in Figure 13.2.

Figure 13.2: Log

NOTE: Problem generation will use 16 threads.                                         
NOTE: The problem has 6 variables (0 free, 0 fixed).                                  
NOTE: The problem has 6 binary and 0 integer variables.                               
NOTE: The problem has 3 linear constraints (2 LE, 0 EQ, 1 GE, 0 range).               
NOTE: The problem has 8 linear constraint coefficients.                               
NOTE: The problem has 0 nonlinear constraints (0 LE, 0 EQ, 0 GE, 0 range).            
NOTE: The MILP presolver value NONE is applied.                                       
NOTE: The MILP solver is called.                                                      
NOTE: The Decomposition algorithm is used.                                            
NOTE: The DECOMP method value USER is applied.                                        
NOTE: The decomposition subproblems consist of 2 disjoint blocks.                     
NOTE: The decomposition subproblems cover 6 (100.00%) variables and 2 (66.67%)        
      constraints.                                                                    
NOTE: The deterministic parallel mode is enabled.                                     
NOTE: The Decomposition algorithm is using up to 16 threads.                          
      Iter         Best       Master         Best       LP       IP   CPU  Real       
                  Bound    Objective      Integer      Gap      Gap  Time  Time       
NOTE: Starting phase 1.                                                               
         1       0.0000       1.0000            . 1.00e+00        .     0     0       
         2       0.0000       0.0000            . 0.00e+00        .     0     0       
NOTE: Starting phase 2.                                                               
         .       6.0000       3.0000       3.0000   50.00%   50.00%     0     0       
         3       4.0000       3.0000       3.0000   25.00%   25.00%     0     0       
         4       4.0000       4.0000       4.0000    0.00%    0.00%     0     0       
         Node  Active   Sols         Best         Best      Gap     CPU    Real       
                                  Integer        Bound             Time    Time       
            0       0      2       4.0000       4.0000    0.00%       0       0       
NOTE: The Decomposition algorithm used 2 threads.                                     
NOTE: The Decomposition algorithm time is 0.03 seconds.                               
NOTE: Optimal.                                                                        
NOTE: Objective = 4.