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