Optimization of a Spring Example#

This GAUSS optimization example demonstrates the optimization of the equilibrium of a spring system.

Code for optimization#

new;
cls;

library optmt;


//Objective function
proc fct(x, k, F, ind);

    //Declare 'mm' to be a modelResults
    //struct, local to this procedure
    struct modelResults mm;

    //If the first element of the indicator vector
    //is non-zero, calculate the objective function
    if ind[1];
        //Assign the value of the objective function to the
        //'function' member of the 'modelResults' struct
        mm.function = k[1] * (sqrt(x[1]^2 + (x[2] + 1)^2) - 1)^2 + k[2] * (sqrt(x[1]^2 + (x[2] - 1)^2) - 1)^2 - (F'x);
    endif;

    //Return the modelResults structure
    retp(mm);
endp;

// Starting values
x0 = { 1, 1 };

//Extra data needed by function
k = { 100, 90 };
F = { 20, 40 };

//Declare 'out' to be an optmtResults struct
//to hold the optimization results
struct optmtResults out;

//Declare 'ctl' to be an optmtControl structure
struct optmtControl ctl;

//Fill 'ctl' with default options
ctl = optmtControlCreate();

//Print report on every 5th iteration
ctl.PrintIters = 5;

//Use Newton Algorithm
ctl.Algorithm = 3;

//Use Strong Wolfe Conditions
ctl.LineSearch = 4;

//Minimize objective function
//Pass in extra data needed by objective function
//between starting parameters and control structure
out = optmt(&fct, x0, k, F, ctl);

//Print optimization results
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 =   -9.65623
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]      0.5044      0.0000
x[2,1]      0.1219      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    6
Minutes to convergence     0.00123