Main Content

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.

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 salto, es decir, la norma de (xixi+1). Si el solver intenta dar un salto menor que StepTolerance, las iteraciones finalizan. StepTolerance se usa normalmente como un límite relativo, es decir, las iteraciones finalizan cuando |(xixi+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 salto. 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 tolerancias TolFun (la tolerancia de función) y TolX (la tolerancia de salto).

  • OptimalityTolerance es una tolerancia para la medida de optimalidad de primer orden. Si la medida de optimalidad es menor que OptimalityTolerance, 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. Si ConstraintTolerance no se satisface (por ejemplo, si la magnitud de la función de restricción supera ConstraintTolerance), el solver intenta continuar, a menos que se detenga por otra razón. Un solver no se detiene simplemente porque se satisfaga ConstraintTolerance.

  • 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 saltos de gradiente conjugado precondicionado. Para obtener más información, consulte Preconditioned Conjugate Gradient Method.

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 Branch and Bound.

Temas relacionados