# optimbase_terminate

Checks if the algorithm is terminated.

### Syntax

[opt, terminate, status] = optimbase_terminate(opt, previousfopt, currentfopt, previousxopt, currentxopt)

### Argument

- opt
The object of TOPTIM type (tlist).

- previousfopt
A vector of doubles, the previous value of the cost function.

- currentfopt
A vector of doubles, the current value of the cost function.

- previousxopt
A vector of doubles, the previous x optimum.

- currentxopt
A vector of doubles, the current x optimum.

- terminate
A boolean.

terminate = %t if the algorithm must terminate.

terminate = %f if the algorithm must continue.

- status
A string.

If

`terminate`

= %t, the detailed status of the termination corresponds to :- "maxiter"
- The maximum number of iterations, provided by the
`-maxiter`

option, is reached. - "maxfuneval"
- The maximum number of function evaluations, provided by the
`-maxfunevals`

option, is reached. - "tolf"
- The tolerance on the function value is reached. This status is associated
with the
`-tolfunmethod`

,`-tolfunabsolute`

and`-tolfunrelative`

options. - "tolx"
- The tolerance on x is reached. This status is associated with the
`-tolxmethod`

,`-tolxabsolute`

and`-tolxrelative`

options.

### Description

The `optimbase_terminate`

function returns a boolean:

%t if the algorithm is terminated,

%f if the algorithm must continue.

If the `-verbosetermination`

option is enabled, messages are printed
detailing the termination intermediate steps.

The `optimbase_terminate`

function uses a set of rules to compute if
the termination occurs, which leads to an optimization status which is equal to one of
the following: "continue", "maxiter", "maxfunevals", "tolf", "tolx". The set of rules
is the following.

By default, the status is "continue", and the terminate flag is %f.

The number of iterations is examined and compared to the

`-maxiter`

option. If the following conditioniterations >= maxiter

is true, then the status is set to "maxiter" and terminate is set to %t.

The number of function evaluations and compared to the

`-maxfunevals`

option is examined. I the following conditionfunevals >= maxfunevals

is true, then the status is set to "maxfunevals" and terminate is set to %t.

The tolerance on function value is examined depending on the value of the

`-tolfunmethod`

option.- "disabled"
then the tolerance on f is just skipped.

"enabled"
if the following condition

is true, then the status is set to "tolf" and terminate is set to %t.

The relative termination criteria on the function value works well if the function value at optimum is near zero. In that case, the function value at initial guess

`fx0`

may be used as previousfopt.The absolute termination criteria on the function value works if the user has an accurate idea of the optimum function value.

The tolerance on

`x`

is examined depending on the value of the`-tolxmethod`

option.- %f
then the tolerance on x is just skipped.

%t
if the following condition

is true, then the status is set to "tolx" and terminate is set to %t.

The relative termination criteria on x works well if x at optimum is different form zero. In that case, the condition measures the distance between two iterates.

The absolute termination criteria on x works if the user has an accurate idea of the scale of the optimum x. If the optimum x is nea 0, the relative tolerance will not work and the absolute tolerance is more appropriate.

### Example

In the following example, ones searches to solve f(x) = 0 thanks dichotomy method.
An optimization object is created and configured (number of variables, initial point,
maximum number of iterations, ...). The `-verbose`

option is enabled so that
messages are generated during the algorithm, are printed.

function [f, index]=fun(x, index) f = 2*x - 4; endfunction a = -5; b = 5; x0 = (a+b)/2; // Creation of the object opt = optimbase_new(); // Configures the object opt = optimbase_configure(opt,"-numberofvariables",2); opt = optimbase_configure(opt, "-x0", x0); opt = optimbase_configure(opt, "-tolxrelative", 10*%eps); opt = optimbase_configure(opt, "-maxiter", 30); opt = optimbase_configure(opt, "-function", fun); opt = optimbase_configure(opt,"-verbose",1); function x=Dicho(opt, a, b) xk = optimbase_cget(opt, "-x0"); [opt, fx0, index] = optimbase_function (opt , xk , 1); opt = optimbase_set ( opt , "-xopt" , xk ); opt = optimbase_set ( opt , "-fopt" , fx0 ); terminate = %f; while ~terminate [opt, f, index] = optimbase_function(opt, xk, 1); [opt, g, index] = optimbase_function(opt, a, 1); if g*f <= 0 then b = xk; else a = xk; end x = (a + b)/2; opt = optimbase_incriter(opt); [opt, terminate, status] = optimbase_terminate(opt, optimbase_get(opt, "-fopt"), f, xk, x); opt = optimbase_set ( opt , "-xopt" , x ); opt = optimbase_set ( opt , "-fopt" , f ); xk = x; end endfunction x = Dicho(opt,a,b)

### See also

- optimbase_function — Calls cost function.

Report an issue | ||

<< optimbase_stoplog | Optimization base | Simplex >> |