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.0001Die Standardtoleranzen finden Sie außerdem im Abschnitt „Optionen“ der Referenzdokumentation zu Solver-Funktionen.
StepToleranceist eine untere Schranke für die Größe eines Schritts, d. h. die Norm von (xi – xi+1). Wenn der Solver versucht, einen Schritt auszuführen, der kleiner alsStepToleranceist, werden die Iterationen beendet.StepTolerancewird im Allgemeinen als relative Schranke verwendet, was bedeutet, dass die Iterationen beendet werden, wenn |(xi – xi+1)| <StepTolerance*(1 + |xi|) gilt oder ein ähnliches relatives Maß erreicht ist. Siehe Tolerance Details.
Bei einigen Algorithmen ist
FunctionToleranceeine untere Schranke für die Änderung des Zielfunktionswertes während eines Schritts. Für diese Algorithmen gilt: Bei |f(xi) – f(xi+1)| <FunctionToleranceenden die Iterationen.FunctionTolerancewird 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
fminsearchan, sobald sowohlTolFun(die Funktionstoleranz) undTolX(die Schritttoleranz) erfüllt sind.OptimalityToleranceist eine Toleranz für das Optimalitätsmaß erster Ordnung. Ist das Optimalitätsmaß kleiner alsOptimalityTolerance, so wird der Iterationsprozess beendet.OptimalityTolerancekann 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.ConstraintToleranceist 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)) ≥
ConstraintToleranceodermax(|eqnonlin(x)|) ≥
ConstraintToleranceodermax(Ax – b) ≥
ConstraintToleranceodermax(
bl– Ax) ≥ConstraintToleranceunter Linear Range Constraints odermax(|Aeqx – beq|) ≥
ConstraintToleranceodermax(lb – x) ≥
ConstraintToleranceodermax(x – ub) ≥
ConstraintTolerance,
dann meldet der Solver, dass die Nebenbedingungen an x verletzt sind.
ConstraintTolerancekann auch eine relative Schranke sein. Siehe Tolerance Details.Hinweis
ConstraintTolerancefunktioniert anders als andere Toleranzen. WennConstraintTolerancenicht erfüllt ist (d. h., wenn der Betrag der Nebenbedingungsfunktion größer alsConstraintToleranceist), versucht der Solver, fortzufahren, sofern er nicht aus einem anderen Grund angehalten wird. Ein Solver hält nicht einfach deshalb an, weilConstraintToleranceerfüllt ist.MaxIterationsist eine Schranke für die Anzahl der Iterationen des Solvers.MaxFunctionEvaluationsist 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.