The Dantzig-Wolfe Decomposition Algorithm

Solving a MILP with DECOMP and PROC OPTMILP

Alternatively, to solve the MILP with the OPTMILP procedure, create a corresponding data table that uses the mathematical programming system (MPS) format as follows:

data mpsdata;
   input field1 $ field2 $ field3 $ field4 field5 $ field6;
   datalines;
NAME    .        mpsdata  .        .        .
ROWS    .        .        .        .        .
MAX     f        .        .        .        .
G       m        .        .        .        .
L       s1       .        .        .        .
L       s2       .        .        .        .
COLUMNS .        .        .        .        .
.       .MRK0000 'MARKER' .        'INTORG' .
.       x[1,1]   f        1        m        1
.       x[1,1]   s1       5        .        .
.       x[2,1]   f        2        s1       7
.       x[3,1]   f        1        s1       4
.       x[1,2]   m        1        s2       1
.       x[2,2]   f        1        s2       2
.       x[3,2]   f        1        s2       1
.       .MRK0001 'MARKER' .        'INTEND' .
RHS     .        .        .        .        .
.       .RHS.    m        1        .        .
.       .RHS.    s1       11       .        .
.       .RHS.    s2       2        .        .
BOUNDS  .        .        .        .        .
UP      .BOUNDS. x[1,1]   1        .        .
UP      .BOUNDS. x[2,1]   1        .        .
UP      .BOUNDS. x[3,1]   1        .        .
UP      .BOUNDS. x[1,2]   1        .        .
UP      .BOUNDS. x[2,2]   1        .        .
UP      .BOUNDS. x[3,2]   1        .        .
ENDATA  .        .        .        .        .
;
data mylib.mpsdata;
   set mpsdata;
   _id_ = _n_;
;

Next, use the following data table to define the subproblem blocks:

data mylib.blocks;
   input _row_ $ _block_;
   datalines;
s1 0
s2 1
;

Now, you can use the following PROC OPTMILP statements to solve this MILP:

proc optmilp
   data       = mylib.mpsdata
   presolver  = none;
   decomp
      logfreq = 1
      blocks  = mylib.blocks;
run;
Last updated: September 09, 2026