Tolerancias y criterios de detención
El número de iteraciones en una optimización depende de los criterios de detención de un solver. Estos criterios incluyen varias tolerancias que puede establecer. Por lo general, la tolerancia es un umbral que, en caso de superarse, detiene las iteraciones de un solver.
Establezca tolerancias y otros criterios utilizando optimoptions
tal y como se explica en Establecer y modificar opciones de optimización.
Sugerencia
Por lo general, establezca tolerancias como OptimalityTolerance
y StepTolerance
de forma que queden muy por encima de eps
y normalmente por encima de 1e-14
. Establecer tolerancias pequeñas no siempre garantiza resultados precisos. En su lugar, el solver puede no reconocer cuándo ha convergido y puede continuar realizando iteraciones innecesarias. Un valor de tolerancia menor que eps
deshabilita en la práctica esa condición de detención. Esta sugerencia no se aplica a fzero
, que utiliza un valor predeterminado de eps
para la tolerancia TolX
.
optimoptions
muestra tolerancias. Por ejemplo:
options = optimoptions('fmincon');
[options.OptimalityTolerance,options.FunctionTolerance,options.StepTolerance]
ans = 1.0e-06 * 1.0000 1.0000 0.0001
También puede encontrar las tolerancias predeterminadas en la sección de opciones de la página de referencia de la función del solver.
StepTolerance
es un límite inferior del tamaño de un paso, es decir, la norma de (xi – xi+1). Si el solver intenta dar un paso menor queStepTolerance
, las iteraciones finalizan.StepTolerance
se usa normalmente como un límite relativo, es decir, las iteraciones finalizan cuando |(xi – xi+1)| <StepTolerance
*(1 + |xi|) o una medida relativa similar. Consulte Detalles de tolerancia.Para algunos algoritmos,
FunctionTolerance
es un límite inferior del cambio en el valor de la función objetivo durante un paso. Para esos algoritmos, si |f(xi) – f(xi+1)| <FunctionTolerance
, las iteraciones finalizan.FunctionTolerance
se usa normalmente como un límite relativo, es decir, las iteraciones finalizan cuando |f(xi) – f(xi+1)| <FunctionTolerance
*(1 + |f(xi)|) o una medida relativa similar. Consulte Detalles de tolerancia.Nota
A diferencia de otros solvers,
fminsearch
se detiene cuando satisface ambas toleranciasTolFun
(la tolerancia de función) yTolX
(la tolerancia de paso).OptimalityTolerance
es una tolerancia para la medida de optimalidad de primer orden. Si la medida de optimalidad es menor queOptimalityTolerance
, las iteraciones finalizan.OptimalityTolerance
también puede ser un límite relativo de la medida de optimalidad de primer orden. Consulte Detalles de tolerancia. La medida de optimalidad de primer orden se define en Medida de optimalidad de primer orden.ConstraintTolerance
es un límite superior de la magnitud de cualquier función de restricción. Si un solver devuelve un punto x con c(x) >ConstraintTolerance
o |ceq(x)| >ConstraintTolerance
, el solver informa de que las restricciones se vulneran en x.ConstraintTolerance
también puede ser un límite relativo. Consulte Detalles de tolerancia.Nota
ConstraintTolerance
opera de forma diferente a otras tolerancias. SiConstraintTolerance
no se satisface (por ejemplo, si la magnitud de la función de restricción superaConstraintTolerance
), el solver intenta continuar, a menos que se detenga por otra razón. Un solver no se detiene simplemente porque se satisfagaConstraintTolerance
.MaxIterations
es un límite del número de iteraciones de solver.MaxFunctionEvaluations
es un límite del número de evaluaciones de función. Las iteraciones y las evaluaciones de función se abordan en Iteraciones y recuentos de la función.
Hay otras dos tolerancias que se aplican a solvers particulares: TolPCG
y MaxPCGIter
. Estas están relacionadas con pasos de gradiente conjugado precondicionado. Para obtener más información, consulte Método del gradiente conjugado precondicionado.
Existen varias tolerancias que se aplican únicamente al algoritmo interior-point fmincon
. Para obtener más información, consulte Algoritmo interior-point en fmincon
options
.
Existen varias tolerancias que se aplican únicamente a intlinprog
. Consulte Some “Integer” Solutions Are Not Integers y Ramificación y acotación.