Getting Started: OPTQP Procedure

Consider a small illustrative example. Suppose you want to minimize a two-variable quadratic function on the nonnegative quadrant, subject to two constraints:

     

The linear objective function coefficients, vector of right-hand sides, and lower and upper bounds are identified immediately as

     

Carefully construct the quadratic matrix . Observe that you can use symmetry to separate the main-diagonal and off-diagonal elements:

     

The first expression

     

sums the main-diagonal elements. Thus, in this case you have

     

Notice that the main-diagonal values are doubled in order to accommodate the 1/2 factor. Now the second term

     

sums the off-diagonal elements in the strict lower triangular part of the matrix. The only off-diagonal () term in the objective function is , so you have

     

Notice that you do not need to specify the upper triangular part of the quadratic matrix.

Finally, the matrix of constraints is as follows:

     

The SAS input data set with a quadratic programming system (QPS) format for the preceding problem can be expressed in the following manner:

data gsdata;
   input field1 $ field2 $ field3$ field4 field5 $ field6 @;
datalines;
NAME   .      EXAMPLE   .             .         .
ROWS   .      .         .             .         .
N      OBJ    .         .             .         .
L      R1     .         .             .         .
G      R2     .         .             .         .
COLUMNS .     .         .             .         .
.      X1     R1         1.0           R2        1.0 
.      X1     OBJ        2.0           .         .
.      X2     R1        -1.0           R2        2.0
.      X2     OBJ        3.0           .         .
RHS    .      .         .              .         .
.      RHS    R1        1.0            .         .
.      RHS    R2        100            .         .
RANGES .      .         .              .         .
BOUNDS .      .         .              .         .
QUADOBJ .     .         .              .         .
.      X1     X1        2.0            .         .
.      X1     X2        2.5            .         .
.      X2     X2        20             .         .
ENDATA .      .         .              .         .
;

For more details about the QPS-format data set, see Chapter 9, The MPS-Format SAS Data Set.

Alternatively, if you have a QPS-format flat file named gs.qps, then the following call to the SAS macro %MPS2SASD translates that file into a SAS data set, named gsdata:

%mps2sasd(mpsfile =gs.qps, outdata = gsdata);

Note: The SAS macro %MPS2SASD is provided in SAS/OR software. See Converting an MPS/QPS-Format File: %MPS2SASD for details.

You can use the following call to PROC OPTQP:

proc optqp data=gsdata 
   primalout = gspout 
   dualout   = gsdout;
run;  

The procedure output is displayed in Figure 12.2.

Figure 12.2 Procedure Output
The OPTQP Procedure

Problem Summary
Problem Name EXAMPLE
Objective Sense Minimization
Objective Function OBJ
RHS RHS
   
Number of Variables 2
Bounded Above 0
Bounded Below 2
Bounded Above and Below 0
Free 0
Fixed 0
   
Number of Constraints 2
LE (<=) 1
EQ (=) 0
GE (>=) 1
Range 0
   
Constraint Coefficients 4
   
Hessian Diagonal Elements 2
Hessian Elements Above the Diagonal 1

Solution Summary
Objective Function OBJ
Solution Status Optimal
Objective Value 15018
   
Primal Infeasibility 3.146026E-16
Dual Infeasibility 8.727374E-15
Bound Infeasibility 0
Duality Gap 7.266753E-16
Complementarity 0
   
Iterations 6
Presolve Time 0.00
Solution Time 0.00

The optimal primal solution is displayed in Figure 12.3.

Figure 12.3 Optimal Solution
Obs Objective
Function ID
RHS ID Variable
Name
Variable
Type
Linear
Objective
Coefficient
Lower
Bound
Upper Bound Variable
Value
Variable
Status
1 OBJ RHS X1 N 2 0 1.7977E308 34 O
2 OBJ RHS X2 N 3 0 1.7977E308 33 O

The SAS log shown in Figure 12.4 provides information about the problem, convergence information after each iteration, and the optimal objective value.

Figure 12.4 Iteration Log
NOTE: The problem EXAMPLE has 2 variables (0 free, 0 fixed).                    
NOTE: The problem has 2 constraints (1 LE, 0 EQ, 1 GE, 0 range).                
NOTE: The problem has 4 constraint coefficients.                                
NOTE: The objective function has 2 Hessian diagonal elements and 1 Hessian      
      elements above the diagonal.                                              
NOTE: The OPTQP presolver value AUTOMATIC is applied.                           
NOTE: The OPTQP presolver removed 0 variables and 0 constraints.                
NOTE: The OPTQP presolver removed 0 constraint coefficients.                    
NOTE: The QUADRATIC ITERATIVE solver is called.                                 
                                           Primal        Bound         Dual     
      Iter   Complement  Duality Gap       Infeas       Infeas       Infeas     
         0  3614.194107     4.894505     1.025688   103.528840     0.089525     
         1  2008.536629     0.954360     0.443601    44.775310     0.038719     
         2  2253.985971     0.125043     0.004436     0.447753     0.000387     
         3    50.954767     0.003289  0.000044360     0.004478  0.000003872     
         4     0.509076  0.000032949  0.000000444  0.000044775  3.871864E-8     
         5     0.005091  0.000000329 4.4360083E-9  0.000000448 3.872015E-10     
         6            0 7.266753E-16 3.146026E-16            0 8.727374E-15     
NOTE: Optimal.                                                                  
NOTE: Objective = 15018.                                                        
NOTE: The data set WORK.GSPOUT has 2 observations and 9 variables.              
NOTE: The data set WORK.GSDOUT has 2 observations and 10 variables.             

See the section Interior Point Algorithm: Overview and the section Iteration Log for the OPTQP Procedure for more details about convergence information given by the iteration log.