<< optimbase_stoplog Optimization base Simplex >>

Scilab Help >> Optimization and Simulation > Optimization base > optimbase_terminate

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:

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.

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


Report an issue
<< optimbase_stoplog Optimization base Simplex >>