The 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 mycas.mpsdata; set mpsdata; _id_ = _n_; ;
Next, use the following data table to define the subproblem blocks:
data mycas.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 = mycas.mpsdata
presolver = none;
decomp
logfreq = 1
blocks = mycas.blocks;
run;
Copyright © SAS Institute Inc. All rights reserved.
Last updated: June 14, 2018