Checks if the algorithm is terminated.
[opt, terminate, status] = optimbase_terminate(opt, previousfopt, currentfopt, previousxopt, currentxopt)
The object of TOPTIM type (tlist).
A vector of doubles, the previous value of the cost function.
A vector of doubles, the current value of the cost function.
A vector of doubles, the previous x optimum.
A vector of doubles, the current x optimum.
A boolean.
terminate = %t if the algorithm must terminate.
terminate = %f if the algorithm must continue.
A string.
If terminate = %t, the detailed status of the termination
corresponds to :
-maxiter option, is reached.-maxfunevals option, is reached.-tolfunmethod, -tolfunabsolute
and -tolfunrelative options.-tolxmethod, -tolxabsolute and
-tolxrelative options.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 condition
iterations >= 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 condition
funevals >= 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.
then the tolerance on f is just skipped.
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.
then the tolerance on x is just skipped.
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.
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) | ![]() | ![]() |