Finds the minimum of a function calculated by a procedure (R.W. Payne).
Options
PRINT = string tokens |
What output to produce (minimum, monitoring); default mini |
|---|---|
FUNCTIONVALUE = scalar |
Saves the minimum function value |
DATA = any type |
Data to be used with procedure _MINFUNCTION |
MAXCYCLE = scalar |
Maximum number of iterations; default 2000 |
NSTARTS = scalar |
Maximum number of restarts; default 4 |
STEPADJUSTMENT = scalar |
Adjustment to step lengths at each restart; default 0.1 |
EXIT = scalar |
Indicates whether there has been convergence (zero) or non-convergence (non-zero) |
TOLERANCE = scalar |
Convergence criterion; default 0.0001 |
METHOD = string token |
Algorithm for fitting nonlinear model (GaussNewton, NewtonRaphson, FletcherPowell); default Newt |
Parameters
PARAMETER = scalars |
Parameters to be estimated |
|---|---|
LOWER = scalars |
Lower bound for each parameter |
UPPER = scalars |
Upper bound for each parameter |
STEPLENGTH = scalars |
Step length for each parameter |
INITIAL = scalars |
Initial value for each parameter |
Description
MINIMIZE searches for the minimum of a function that is calculated by a procedure _MINFUNCTION, which operates similarly to the RESAMPLE procedure that is called by procedures BOOTSTRAP and JACKKNIFE. This means that you can use any Genstat command to obtain the function value (e.g. ANOVA, FIT, SVD and so on). Any data structures that are needed by _MINFUNCTION to calculate the value of the function should be listed by the DATA option. Details are given in the Methods Section.
The parameters to be estimated in the minimization are listed by the PARAMETER parameter of MINIMIZE. Step lengths and initial values must be supplied using the STEPLENGTH and INITIAL parameters. You can also specify lower bounds with the LOWER parameter, and upper bounds with the UPPER parameter.
The PRINT option controls printed output with the settings:
minimum |
to print the minimum function value and parameter values, and |
|---|---|
monitoring |
to print to monitor information showing the progress of the minimization. |
By default, PRINT=minimum.
The MAXCYCLE option sets a limit on the number of function evaluations that are made by _MINFUNCTION (default 5000). The NSTARTS option controls how many times the optimization is restarted during the optimization, and the STEPADJUSTMENT option controls how the step lengths are adjusted at each restart; for more information, see Method.
If the optimization is successful, the scalars specified by the PARAMETER parameter will contain the estimated values of the parameters. The FUNCTIONVALUE option can save the minimum value.
The optimization search is performed by calling the FITNONLINEAR directive successively (see Method). You can also save a scalar, using the EXIT option, to indicate whether the minimization was successful. A zero value indicates success. Non-zero values indicate the various types of failure codes as defined by the RKEEP directive. RKEEP can be also used to save other information from the optimization.
The TOLERANCE option corresponds to the TOLERANCE option of the RCYCLE directive, specifying the tolerance for convergence (default 0.0001). Similarly, the METHOD option selects the optimization method (default NewtonRaphson).
Options: PRINT, FUNCTIONVALUE, DATA, MAXCYCLE, NSTARTS, STEPADJUSTMENT, EXIT, TOLERANCE, METHOD.
Parameters: PARAMETER, LOWER, UPPER, STEPLENGTH, INITIAL.
Method
The procedure _MINFUNCTION, that calculates the function has two options. DATA supplies a pointer containing the data structures specified by the DATA option of MINIMIZE (so, DATA[1] is the first of these structures, DATA[2] is the second, and so on). FUNCTIONVALUE is a scalar, which should be set to the function value. There is one parameter, called PARAMETER. The PROCEDURE statement that defines _MINFUNCTION should set option PARAMETER=pointer. The parameters of the function can then be referred to as PARAMETER[1], PARAMETER[2], and so on (and these will be in the same order as in the PARAMETER parameter of MINIMIZE).
MINIMIZE calls the FITNONLINEAR directive successively to perform the optimzation search. The function evaluations so far are placed into a variate y, and terminated with a missing value. The expressions Func[1...3] defined below access the values successively, placing each one in turn into the scalar Target. This is identified as the value to minimize by supplying it as the setting of the FUNCTIONVALUE option of the MODEL directive. The missing final value for Target in y causes each use of FITNONLINEAR to terminate. The next parameter values for which FITNONLINEAR wants a function value are in the scalars x[]. _MINFUNCTION is called to obtain the value, this is then placed into y, and the process continues.
EXPRESSION Func[1...3]; VALUE=!e(i=i+1),\
!e(ELEMENTS(x[];i)=PARAMETER[]),\
!e(Target=ELEMENTS(y;i))
The use of FITNONLINEAR slows down as the number of function evaluations increases. So MINIMIZE allows the optimization to be restarted after MAXCYCLE/NSTARTS evaluations (where MAXCYCLE and NSTARTS are two of the options of MINIMIZE). At each restart, the step lengths are adjusted by multipying by a value specified by the STEPADJUSTMENT option.
For more information about function optimization using FITNONLINEAR, see the Guide to Genstat, Part 2 Statistics, Section 3.8.4.
Action with RESTRICT
The effects of restrictions on the data variables will depend on how the calculation is defined within the _MINFUNCTION procedure.
See also
Directive: FITNONLINEAR.
Procedures: DEMC, FPARETOSET, MIN1DIMENSION, SIMPLEX.
Commands for: Regression analysis.
Example
CAPTION 'MINIMIZE examples',\
'See Guide to Genstat Part 2 Statistics, Sections 3.8.2 & 3.8.3:',\
'1) no linear parameters.'; STYLE=meta,2(plain)
OPEN '%GENDIR%/Examples/GuidePart2/Reaction.dat'; CHANNEL=2
READ [CHANNEL=2] X1,X2,X3,R
CLOSE 2
" Change units from psia to atmospheres."
CALCULATE X1,X2,X3 = X1,X2,X3 / 14.7
POINTER [VALUES=R,X1,X2,X3] Data
PROCEDURE [PARAMETER=pointer] '_MINFUNCTION'
" calculates the function for MINIMIZE "
OPTION NAME=\
'DATA', "(I: pointer) data to calculate the function"\
'FUNCTION'; "(O: scalar) returns the function value"\
MODE=p; TYPE='pointer','scalar'
PARAMETER NAME=\
'PARAMETER'; "(I: scalar) parameter values"\
MODE=p; TYPE='scalar'; SET=yes; DECLARED=yes; PRESENT=yes
DUMMY R,X1,X2,X3; VALUE=DATA[1...4]
DUMMY T1,T2,T3,T4; VALUE=PARAMETER[1...4]
CALCULATE Z = T3*(X2-X3/1.632)/(1+T2*X1+T3*X2+T4*X3)
& F = T1*Z
& FUNCTION = SUM((R-F)**2)
ENDPROCEDURE
MINIMIZE [PRINT=minimum,monitor; DATA=Data; METHOD=Gauss]\
T1,T2,T3,T4; STEPLENGTH=0.05; INITIAL=1
CAPTION '2) linear parameter T1 fitted by linear regression.'
POINTER [VALUES=R,X1,X2,X3,T1] Data
PROCEDURE [PARAMETER=pointer] '_MINFUNCTION'
" calculates the function for MINIMIZE "
OPTION NAME=\
'DATA', "(I: pointer) data to calculate the function"\
'FUNCTION'; "(O: scalar) returns the function value"\
MODE=p; TYPE='pointer','scalar'
PARAMETER NAME=\
'PARAMETER'; "(I: scalar) parameter values"\
MODE=p; TYPE='scalar'; SET=yes; DECLARED=yes; PRESENT=yes
DUMMY R,X1,X2,X3,T1; VALUE=DATA[1...5]
DUMMY T2,T3,T4; VALUE=PARAMETER[1...3]
CALCULATE Z = T3*(X2-X3/1.632)/(1+T2*X1+T3*X2+T4*X3)
MODEL R
FIT [PRINT=*; CONSTANT=omit] Z
RKEEP DEVIANCE=FUNCTION
RKESTIMATES Z; ESTIMATE=T1
ENDPROCEDURE
MINIMIZE [PRINT=minimum,monitor; DATA=Data]\
T2,T3,T4; STEPLENGTH=0.05; INITIAL=1
PRINT T1