- Scilab Help
- Optimization and Simulation
- Optimization base
Please note that the recommended version of Scilab is 2024.0.0. This page might be outdated.
See the recommended documentation of this function
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.
terminate = %t if the algorithm must terminate.
terminate = %f if the algorithme must continue.
terminate= %t, the detailed status of the termination corresponds to :
- The maximum number of iterations, provided by the
-maxiteroption, is reached.
- The maximum number of function evaluations, provided by the
-maxfunevalsoption, is reached.
- The tolerance on the function value is reached. This status is associated
- The tolerance on x is reached. This status is associated with the
optimbase_terminate function returns a boolean:
%t if the algorithm is terminated,
%f if the algorithm must continue.
-verbosetermination option is enabled, messages are printed
detailing the termination intermediate steps.
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
-maxiteroption. 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
-maxfunevalsoption 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
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
fx0may 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
xis examined depending on the value of the
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)
- optimbase_function — Calls cost function.
|Report an issue|
|<< optimbase_stoplog||Optimization base||Optimization simplex >>|