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 , is computed by . 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;