In this example, the linear component of the same problem definition as in Example 3.1 is described by using the OPTMODEL procedure and is saved as an MPS data set. The quadratic objective is then defined by using the FCMP function QUADOBJ.
Because PROC OPTMODEL outputs an MPS data set that uses array notation, you can use the following macro definition to strip brackets from the resulting data set:
%macro lsompsmod(setold,setnew); data &setnew(drop=i); set &setold; array FC{*} _CHARACTER_; do i=1 to dim(FC); FC[i] = compress(FC[i], "[]"); end; run; %mend;
For more complicated array structures, take care to ensure that the resulting transformation is well defined. Next, you run a PROC OPTMODEL step that outputs a MPS data set, followed by the newly defined %LSOMPSMOD macro to strip brackets, followed by a PROC OPTLSO step that takes as input the MPS data set that was output by PROC OPTMODEL and transformed by the %LSOMPSMOD macro.
proc optmodel; var x{1..13} >= 0 <= 1; for {i in 10..12} x[i].ub = 100; min z = 0; con a1: 2*x[1] + 2*x[2] + x[10] + x[11] <= 10; con a2: 2*x[1] + 2*x[3] + x[10] + x[12] <= 10; con a3: 2*x[1] + 2*x[3] + x[11] + x[12] <= 10; con a4: -8*x[1] + x[10] <= 0; con a5: -8*x[2] + x[11] <= 0; con a6: -8*x[3] + x[12] <= 0; con a7: -2*x[4] - x[5] + x[10] <= 0; con a8: -2*x[6] - x[7] + x[11] <= 0; con a9: -2*x[8] - x[9] + x[12] <= 0; save mps lindataOld; quit; %lsompsmod(lindataOld, lindata); proc optlso primalout = solution mpsdata = lindata objective = objdata; performance nthreads=2; run; proc print data=solution; run;
Output 3.2.1 shows the output from running these steps.
Output 3.2.1: Using MPS Format