Hauptinhalt

Toleranzen und Abbruchkriterien

Die Anzahl der Iterationen bei einer Optimierung hängt von den Abbruchkriterien des Solvers ab. Zu diesen Kriterien gehören mehrere Toleranzen, die Sie festlegen können. Im Allgemeinen ist eine Toleranz ein Schwellenwert, bei dessen Überschreitung die Iterationen eines Solvers beendet werden.

Legen Sie Toleranzen und andere Kriterien mithilfe von optimoptions fest, wie unter Set and Change Optimization Options erläutert.

Tipp

Legen Sie Toleranzen wie OptimalityTolerance und StepTolerance im Allgemeinen so fest, dass sie deutlich über eps liegen, und normalerweise über 1e-14. Kleine Toleranzen führen nicht zwangsläufig zu genauen Ergebnissen. Es kann vorkommen, dass ein Solver nicht erkennt, wann er konvergiert ist, und weiterhin vergebliche Iterationen durchführt. Bei einem Toleranzwert, der kleiner als eps ist, wird diese Abbruchbedingung praktisch deaktiviert. Dieser Tipp gilt nicht für fzero, da hier der Standardwert eps für die TolX-Toleranz verwendet wird.

optimoptions zeigt Toleranzen an. Zum Beispiel:

options = optimoptions("fmincon");
[options.OptimalityTolerance,options.FunctionTolerance,options.StepTolerance]
ans =

   1.0e-06 *

    1.0000    1.0000    0.0001

Die Standardtoleranzen finden Sie außerdem im Abschnitt „Optionen“ der Referenzdokumentation zu Solver-Funktionen.

  • StepTolerance ist eine untere Schranke für die Größe eines Schritts, d. h. die Norm von (xixi+1). Wenn der Solver versucht, einen Schritt auszuführen, der kleiner als StepTolerance ist, werden die Iterationen beendet. StepTolerance wird im Allgemeinen als relative Schranke verwendet, was bedeutet, dass die Iterationen beendet werden, wenn |(xixi+1)| < StepTolerance*(1 + |xi|) gilt oder ein ähnliches relatives Maß erreicht ist. Siehe Tolerance Details.

  • Bei einigen Algorithmen ist FunctionTolerance eine untere Schranke für die Änderung des Zielfunktionswertes während eines Schritts. Für diese Algorithmen gilt: Bei |f(xi) – f(xi+1)| < FunctionTolerance enden die Iterationen. FunctionTolerance wird im Allgemeinen als relative Grenze verwendet, was bedeutet, dass die Iterationen enden, wenn |f(xi) – f(xi+1)| < FunctionTolerance*(1 + |f(xi)|) gilt oder ein ähnliches relatives Maß erreicht ist. Siehe Tolerance Details.

    Hinweis

    Im Gegensatz zu anderen Solvern hält fminsearch an, sobald sowohl TolFun (die Funktionstoleranz) und TolX (die Schritttoleranz) erfüllt sind.

  • OptimalityTolerance ist eine Toleranz für das Optimalitätsmaß erster Ordnung. Ist das Optimalitätsmaß kleiner als OptimalityTolerance, so wird der Iterationsprozess beendet. OptimalityTolerance kann auch als relative Schranke für das Optimalitätsmaß erster Ordnung dienen. Siehe Tolerance Details. Das Optimalitätsmaß erster Ordnung ist unter First-Order Optimality Measure definiert.

  • ConstraintTolerance ist eine obere Schranke für den Betrag jeder Verletzung einer Nebenbedingung, einschließlich nichtlinearer Nebenbedingungsfunktionen, linearer Nebenbedingungsfunktionen und Schranken. Wenn ein Solver einen Punkt x zurückgibt, wobei gilt:

    • max(ineqnonlin(x)) ≥ ConstraintTolerance oder

    • max(|eqnonlin(x)|) ≥ ConstraintTolerance oder

    • max(Axb) ≥ ConstraintTolerance oder

    • max(blAx) ≥ ConstraintTolerance unter Linear Range Constraints oder

    • max(|Aeqxbeq|) ≥ ConstraintTolerance oder

    • max(lbx) ≥ ConstraintTolerance oder

    • max(xub) ≥ ConstraintTolerance,

    dann meldet der Solver, dass die Nebenbedingungen an x verletzt sind. ConstraintTolerance kann auch eine relative Schranke sein. Siehe Tolerance Details.

    Hinweis

    ConstraintTolerance funktioniert anders als andere Toleranzen. Wenn ConstraintTolerance nicht erfüllt ist (d. h., wenn der Betrag der Nebenbedingungsfunktion größer als ConstraintTolerance ist), versucht der Solver, fortzufahren, sofern er nicht aus einem anderen Grund angehalten wird. Ein Solver hält nicht einfach deshalb an, weil ConstraintTolerance erfüllt ist.

  • MaxIterations ist eine Schranke für die Anzahl der Iterationen des Solvers. MaxFunctionEvaluations ist eine Schranke für die Anzahl der Funktionsauswertungen. Iterationen und Funktionsauswertungen werden unter Iterations and Function Counts behandelt.

Es gibt zwei weitere Toleranzen, die für bestimmte Solver gelten: TolPCG und MaxPCGIter. Sie beziehen sich auf vorkonditionierte Konjugierte-Gradienten-Schritte. Weitere Informationen finden Sie unter Preconditioned Conjugate Gradient Method.

Es gibt mehrere Toleranzen, die ausschließlich für den Innenpunkt-Algorithmus fmincon gelten. Weitere Informationen finden Sie unter Interior-Point Algorithm im Abschnitt fmincon options.

Es gibt mehrere Toleranzen, die ausschließlich für intlinprog gelten. Siehe Some “Integer” Solutions Are Not Integers.

Siehe auch

Themen