Optimization With Parameter Bounds#
This GAUSS optimization example demonstrates the minimization of a quadratic function as outlined in Luenberger’s “Linear and Nonlinear Programming.” However, parameter bounds are now implemented.
Code for optimization#
The example:
Creates a data matrix.
Defines an objective function that takes 4 inputs.
new;
cls;
// Make optmt library available
library optmt;
// Create data needed by objective procedure
omega = { 0.78 -0.02 -0.12 -0.14,
-0.02 0.86 -0.04 0.06,
-0.12 -0.04 0.72 -0.08,
-0.14 0.06 -0.08 0.74 };
b = { 0.76, 0.08, 1.12, 0.68 };
// Objective procedure with 4 inputs:
// i. x - The parameter vector
// ii-iii. Q and b - Extra data needed by the objective procedure
// ii. ind - The indicator vector
proc qfct(x, omega, b, ind);
// Declare 'mm' to be a modelResults
// struct local to this procedure, 'qfct'
struct modelResults mm;
// If the first element of the indicator
// vector is non-zero, compute function value
// and assign it to the 'function' member
// of the modelResults struct
if ind[1];
mm.function = 0.5*x'*omega*x - x'b;
endif;
// Return modelResults struct
retp(mm);
endp;
// Starting parameter values
x_strt = ones(4, 1);
// Declare 'c0' to be an 'optmtControl' struct
struct optmtControl c0;
// Fill 'c0' with default values
c0 = optmtControlCreate();
// Set lower and upper bounds
// for each of the 4 parameters
c0.bounds = { 0 1,
0 1,
1 2,
1 2 };
// Declare 'out' to be a optmtResults struct
// to hold the results from the optimization
struct optmtResults out;
// Minimize objective function
out = optmt(&qfct, x_strt, omega, b, c0);
// Print output to the screen
call optmtPrt(out);
There code prints results to the Command Window.
Results#
Convergence details#
The first portion of the results provide details about convergence and performance.
Return code = 0
Function value = -2.07055
Convergence : normal convergence
These results indicate that the optimization converged normally, with a return code of 0. Any return Code other than 0 would indicate some issue with the convergence. The exact meaning of the return code can be found in the optmt()
documentation.
Parameter estimates#
The next section of the results reports the parameter estimates and the associated gradients.
Parameters Estimates Gradient
---------------------------------------------------------------------
x[1,1] 1.0000 -0.3892
x[2,1] 0.1126 0.0000
x[3,1] 1.8731 0.0000
x[4,1] 1.3015 0.0000
In this example, the gradients for parameters 2-4 are zero, as is expected at or near an optimum, when bounds do not hold. However, for the first parameter, we observe a non-zero gradient. In addition, we can see that the parameter is at the top end of the bounds (\(x[1,1]=1\)).
Computation time#
Number of iterations 9
Minutes to convergence 0.00010
Lagrangeans#
Because bounds are implemented, non-missing Lagrangeans values are reported.
0.0000000 0.38922863
0.0000000 0.0000000
0.0000000 0.0000000
0.0000000 0.0000000
Note that the Langrangean associated with the binding constraint is non-zero.