Basic Optimization Example¶
This GAUSS optimization example demonstrates the minimization of a quadratic function as outlined in Luenberger’s “Linear and Nonlinear Programming.”
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 = { 1, 1, 1, 1 };
// 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);
// Print output to the screen
call optmtPrt(out);
The 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.17466
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.5350 0.0000
x[2,1] 0.1220 0.0000
x[3,1] 1.9752 0.0000
x[4,1] 1.4130 0.0000
In this example, the gradients are all 0 for the estimates, as is expected at or near an optimum.
Computation time¶
The final section of the results reports the number of iterations and computation time.
Number of iterations 10
Minutes to convergence 0.00013