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.0001También puede encontrar las tolerancias predeterminadas en la sección de opciones de la página de referencia de la función del solver.
StepTolerancees 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.StepTolerancese 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,
FunctionTolerancees 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.FunctionTolerancese 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,
fminsearchse detiene cuando satisface ambas toleranciasTolFun(la tolerancia de función) yTolX(la tolerancia de paso).OptimalityTolerancees una tolerancia para la medida de optimalidad de primer orden. Si la medida de optimalidad es menor queOptimalityTolerance, las iteraciones finalizan.OptimalityTolerancetambié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.ConstraintTolerancees un límite superior de la magnitud de cualquier función de restricción. Si un solver devuelve un punto x con c(x) >ConstraintToleranceo |ceq(x)| >ConstraintTolerance, el solver informa de que las restricciones se vulneran en x.ConstraintTolerancetambién puede ser un límite relativo. Consulte Detalles de tolerancia.Nota
ConstraintToleranceopera de forma diferente a otras tolerancias. SiConstraintToleranceno 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.MaxIterationses un límite del número de iteraciones de solver.MaxFunctionEvaluationses 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.