MINQUAD and MAXQUAD Statements

MINQUAD H_name [ , g_name [ , c_number ] ] ;

MAXQUAD H_name [ , g_name [ , c_number ] ] ;

The MINQUAD and MAXQUAD statements specify the matrix $ H$, vector $ g$, and scalar $ c$ that define a quadratic objective function. The MINQUAD statement is for minimizing the objective function and the MAXQUAD statement is for maximizing the objective function.

The rows and columns in $ H$ and $ g$ correspond to the order of decision variables given in the DECVAR statement. Specifying the objective function with a MINQUAD or MAXQUAD statement indirectly defines the analytic derivatives for the objective function. Therefore, statements specifying derivatives are not valid in these cases. Also, only use these statements when TECH=LICOMP or TECH=QUADAS and no nonlinear constraints are imposed.

There are three ways of using the MINQUAD or MAXQUAD statement:

  • Using ARRAY Statements: The names H_name and g_name specified in the MINQUAD or MAXQUAD statement can be used in ARRAY statements. This specification is mainly for small problems with almost dense $ H$ matrices.

    proc nlp pall;
       array h[2,2] .4 0
                     0 4;
       minquad h, -100;
       decvar x1 x2 = -1;
       bounds  2 <= x1 <= 50,
             -50 <= x2 <= 50;
       lincon 10 <= 10 * x1 - x2;
    run;
    
  • Using Elementwise Setting: The names H_name and g_name specified in the MINQUAD or MAXQUAD statement can be followed directly by one-dimensional indices specifying the corresponding elements of the matrix $ H$ and vector $ g$. These element names can be used on the left side of numerical assignments. The one-dimensional index value $ l$ following H_name, which corresponds to the element $ H_{ij}$, is computed by $ l = (i-1)n + j, i \geq j$. The matrix $ H$ and vector $ g$ are initialized to zero, so that only the nonzero elements must be given. This specification is efficient for small problems with sparse $ H$ matrices.

    proc nlp pall;
       minquad h, -100;
       decvar x1 x2;
       bounds  2 <= x1 <= 50,
             -50 <= x2 <= 50;
       lincon 10 <= 10 * x1 - x2;
       h1 = .4; h4 = 4;
    run;
    
  • Using MATRIX Statements: The names H_name and g_name specified in the MINQUAD or MAXQUAD statement can be used in MATRIX statements. There are different ways to specify the nonzero elements of the matrix $ H$ and vector $ g$ by MATRIX statements. The following example illustrates one way to use the MATRIX statement.

    proc nlp all;
       matrix h[1,1] = .4 4;
       minquad h, -100;
       decvar x1 x2 = -1;
       bounds 2 <= x1 <= 50,
            -50 <= x2 <= 50;
       lincon 10 <= 10 * x1 - x2;
    run;