You can also solve the oil refinery problem described in Example 10.1 by using the interior point solver. You can create the input data set from an external MPS-format flat file by using the SAS macro %MPS2SASD or SAS DATA step code, both of which are described in Getting Started: OPTLP Procedure. You can use the following SAS code to solve the problem:
proc optlp data=ex1 objsense = max algorithm = ip primalout = ex1ipout dualout = ex1idout logfreq = 1; run;
The optimal solution is displayed in Output 10.2.1.
Output 10.2.1: Interior Point Solver: Primal Solution Output
The OPTLP Procedure |
Primal Solution |
Obs | Objective Function ID | RHS ID | Variable Name |
Variable Type |
Objective Coefficient |
Lower Bound |
Upper Bound | Variable Value | Variable Status |
Reduced Cost |
---|---|---|---|---|---|---|---|---|---|---|
1 | profit | a_l | D | -175 | 0 | 110 | 110.000 | . | ||
2 | profit | a_h | D | -165 | 0 | 165 | 0.000 | . | ||
3 | profit | br | D | -205 | 0 | 80 | 80.000 | . | ||
4 | profit | na_l | N | 0 | 0 | 1.7977E308 | 7.450 | . | ||
5 | profit | na_i | N | 0 | 0 | 1.7977E308 | 21.800 | . | ||
6 | profit | h_o | N | 0 | 0 | 1.7977E308 | 77.300 | . | ||
7 | profit | j_1 | N | 350 | 0 | 1.7977E308 | 72.667 | . | ||
8 | profit | j_2 | N | 350 | 0 | 1.7977E308 | 33.042 | . |
The iteration log is displayed in Output 10.2.2.
Output 10.2.2: Log: Solution Progress
The OPTLP Procedure |
NOTE: The problem EX1 has 8 variables (0 free, 0 fixed). |
NOTE: The problem has 6 constraints (3 LE, 3 EQ, 0 GE, 0 range). |
NOTE: The problem has 19 constraint coefficients. |
WARNING: The objective sense has been changed to maximization. |
NOTE: The LP presolver value AUTOMATIC is applied. |
NOTE: The LP presolver removed 3 variables and 3 constraints. |
NOTE: The LP presolver removed 6 constraint coefficients. |
NOTE: The presolved problem has 5 variables, 3 constraints, and 13 constraint |
coefficients. |
NOTE: The LP solver is called. |
NOTE: The Interior Point algorithm is used. |
NOTE: The deterministic parallel mode is enabled. |
NOTE: The Interior Point algorithm is using up to 4 threads. |
Primal Bound Dual |
Iter Complement Duality Gap Infeas Infeas Infeas |
0 6.20283e+03 5.78876e+02 5.68712e-15 0.00000e+00 3.17241e+01 |
1 2.09898e+03 1.31204e+02 1.46482e-14 2.87422e-17 1.00841e+01 |
2 5.67772e+01 3.75090e+01 1.79424e-14 6.40072e-17 3.01831e-01 |
3 1.65558e+00 2.91985e-01 2.62897e-14 2.99468e-17 4.53328e-02 |
4 5.90964e-01 1.08785e-01 1.56135e-14 2.02409e-17 4.53328e-04 |
5 6.05069e-03 1.01179e-03 1.87802e-14 2.50428e-17 4.57642e-06 |
6 6.05112e-05 1.01093e-05 1.68631e-14 1.84100e-17 4.57643e-08 |
7 6.05112e-07 1.01092e-07 1.74638e-14 4.48274e-17 4.57643e-10 |
NOTE: Optimal. |
NOTE: Objective = 1347.91653. |
NOTE: The Interior Point solve time is 0.00 seconds. |
NOTE: The data set WORK.EX1IPOUT has 8 observations and 10 variables. |
NOTE: The data set WORK.EX1IDOUT has 6 observations and 10 variables. |