minimize(method=’trust-constr’)#
- scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)
Minimiert eine skalare Funktion unter Berücksichtigung von Nebenbedingungen.
- Parameter:
- gtolfloat, optional
Toleranz für die Beendigung anhand der Norm des Lagrange-Gradienten. Der Algorithmus wird beendet, wenn sowohl die Unendlich-Norm (d. h. der Betrag des größten Wertes) des Lagrange-Gradienten als auch die Nebenbedingungsverletzung kleiner als
gtolsind. Standardwert ist 1e-8.- xtolfloat, optional
Toleranz für die Beendigung anhand der Änderung der unabhängigen Variablen. Der Algorithmus wird beendet, wenn
tr_radius < xtolist, wobeitr_radiusder Radius der beim Algorithmus verwendeten Vertrauensregion ist. Standardwert ist 1e-8.- barrier_tolfloat, optional
Schwellenwert für den Barriereparameter zur Beendigung des Algorithmus. Wenn Ungleichheitsnebenbedingungen vorhanden sind, wird der Algorithmus nur beendet, wenn der Barriereparameter kleiner als barrier_tol ist. Standardwert ist 1e-8.
- sparse_jacobian{bool, None}, optional
Bestimmt, wie die Jacobimatrizen der Nebenbedingungen dargestellt werden. Wenn bool, dann werden die Jacobimatrizen aller Nebenbedingungen in das entsprechende Format konvertiert. Wenn None (Standard), dann werden die Jacobimatrizen nicht konvertiert, aber der Algorithmus kann nur fortfahren, wenn sie alle dasselbe Format haben.
- initial_tr_radius: float, optional
Anfänglicher Vertrauensradius. Der Vertrauensradius gibt den maximalen Abstand zwischen Lösungspunkten in aufeinanderfolgenden Iterationen an. Er spiegelt das Vertrauen wider, das der Algorithmus in die lokale Approximation des Optimierungsproblems setzt. Für eine genaue lokale Approximation sollte die Vertrauensregion groß sein, und für eine Approximation, die nur nahe am aktuellen Punkt gültig ist, sollte sie klein sein. Der Vertrauensradius wird während des Optimierungsprozesses automatisch aktualisiert, wobei
initial_tr_radiussein Anfangswert ist. Standardwert ist 1 (empfohlen in [1], S. 19).- initial_constr_penaltyfloat, optional
Anfänglicher Strafterm für Nebenbedingungen. Der Strafterm wird verwendet, um die Anforderungen an die Verringerung der Zielfunktion und die Erfüllung der Nebenbedingungen auszugleichen. Er wird zur Definition der Zielfunktion verwendet:
merit_function(x) = fun(x) + constr_penalty * constr_norm_l2(x), wobeiconstr_norm_l2(x)die l2-Norm eines Vektors aller Nebenbedingungen ist. Die Zielfunktion wird verwendet, um Testpunkte zu akzeptieren oder abzulehnen, undconstr_penaltygewichtet die beiden gegensätzlichen Ziele der Reduzierung der Zielfunktion und der Nebenbedingungen. Der Strafterm wird während des Optimierungsprozesses automatisch aktualisiert, wobeiinitial_constr_penaltysein Anfangswert ist. Standardwert ist 1 (empfohlen in [1], S. 19).- initial_barrier_parameter, initial_barrier_tolerance: float, optional
Anfänglicher Barriereparameter und anfängliche Toleranz für das Barriere-Teilproblem. Beide werden nur verwendet, wenn Ungleichheitsnebenbedingungen vorhanden sind. Um Optimierungsprobleme
min_x f(x)unter Ungleichheitsnebenbedingungenc(x) <= 0zu behandeln, führt der Algorithmus Schlupfvariablen ein und löst das Problemmin_(x,s) f(x) + barrier_parameter*sum(ln(s))unter den Gleichungsnebenbedingungenc(x) + s = 0anstelle des ursprünglichen Problems. Dieses Teilproblem wird für abnehmende Werte vonbarrier_parameterund mit abnehmenden Toleranzen für die Beendigung gelöst, beginnend mitinitial_barrier_parameterfür den Barriereparameter undinitial_barrier_tolerancefür die Barriertoleranz. Standardwert ist 0,1 für beide Werte (empfohlen in [1] S. 19). Beachten Sie auch, dassbarrier_parameterundbarrier_tolerancemit demselben Vorfaktor aktualisiert werden.- factorization_methodstring oder None, optional
Methode zur Faktorisierung der Jacobimatrix der Nebenbedingungen. Verwenden Sie None (Standard) für die automatische Auswahl oder eine der folgenden Optionen:
‘NormalEquation’ (erfordert scikit-sparse)
‘AugmentedSystem’
‘QRFactorization’
‘SVDFactorization’
Die Methoden ‘NormalEquation’ und ‘AugmentedSystem’ können nur mit dünn besetzten Nebenbedingungen verwendet werden. Die vom Algorithmus benötigten Projektionen werden jeweils mithilfe der Ansätze der Normalengleichung und des erweiterten Systems berechnet, wie in [1] erläutert. ‘NormalEquation’ berechnet die Cholesky-Faktorisierung von
A A.Tund ‘AugmentedSystem’ führt die LU-Faktorisierung eines erweiterten Systems durch. Sie liefern normalerweise ähnliche Ergebnisse. ‘AugmentedSystem’ wird standardmäßig für dünn besetzte Matrizen verwendet.Die Methoden ‘QRFactorization’ und ‘SVDFactorization’ können nur mit dichten Nebenbedingungen verwendet werden. Sie berechnen die erforderlichen Projektionen mithilfe von QR- bzw. SVD-Faktorisierungen. Die Methode ‘SVDFactorization’ kann mit Jacobimatrizen mit mangelhaftem Zeilenrang umgehen und wird verwendet, wenn andere Faktorisierungsmethoden fehlschlagen (was die Konvertierung von dünn besetzten Matrizen in ein dichtes Format erfordern kann, wenn nötig). Standardmäßig wird ‘QRFactorization’ für dichte Matrizen verwendet.
- finite_diff_rel_stepNone oder array_like, optional
Relative Schrittgröße für die Finite-Differenzen-Approximation.
- maxiterint, optional
Maximale Anzahl von Algorithmus-Iterationen. Standardwert ist 1000.
- verbose{0, 1, 2, 3}, optional
Level der Ausführlichkeit des Algorithmus
0 (Standard) : arbeitet leise.
1 : zeigt einen Beendigungsbericht an.
2 : Fortschritt während der Iterationen anzeigen.
3 : Fortschritt während der Iterationen anzeigen (vollständigerer Bericht).
- dispbool, optional
Wenn True (Standard), wird verbose auf 1 gesetzt, wenn es 0 war.
- workersint, map-ähnlicher aufrufbarer Typ, optional
Ein map-ähnlicher aufrufbarer Typ, wie z.B. multiprocessing.Pool.map, zur parallelen Auswertung von numerischen Differenzierungen. Diese Auswertung erfolgt als
workers(fun, iterable).Hinzugefügt in Version 1.16.0.
- Rückgabe:
OptimizeResultmit den unten dokumentierten Feldern. Beachten Sie Folgendes:Alle Werte, die sich auf die Nebenbedingungen beziehen, sind in der Reihenfolge geordnet, in der sie dem Solver übergeben wurden. Werte, die sich auf bounds-Nebenbedingungen beziehen, werden *nach* anderen Nebenbedingungen platziert.
Alle Anzahlen von Funktions-, Jacobi- oder Hess-Auswertungen beziehen sich auf die Anzahl tatsächlicher Python-Funktionsaufrufe. Das bedeutet zum Beispiel, dass, wenn ein Jacobi durch endliche Differenzen geschätzt wird, die Anzahl der Jacobi-Auswertungen null beträgt und die Anzahl der Funktionsauswertungen um alle Aufrufe während der Schätzung der endlichen Differenzen erhöht wird.
- xndarray, Form (n,)
Gefundene Lösung.
- optimalityfloat
Unendlich-Norm des Lagrange-Gradienten an der Lösung.
- constr_violationfloat
Maximale Nebenbedingungsverletzung an der Lösung.
- funfloat
Zielfunktion an der Lösung.
- gradndarray, shape (n,)
Gradient der Zielfunktion an der Lösung.
- lagrangian_gradndarray, shape (n,)
Gradient der Lagrange-Funktion an der Lösung.
- nitint
Gesamtzahl der Iterationen.
- nfevinteger
Anzahl der Auswertungen der Zielfunktion.
- njevinteger
Anzahl der Auswertungen des Gradienten der Zielfunktion.
- nhevinteger
Anzahl der Auswertungen der Hesse-Matrix der Zielfunktion.
- cg_niterint
Gesamtzahl der Iterationen der konjugierten Gradientenmethode.
- method{‘equality_constrained_sqp’, ‘tr_interior_point’}
Verwendete Optimierungsmethode.
- constrlist von ndarray
Liste der Nebenbedingungswerte an der Lösung.
- jaclist von {ndarray, sparse array}
Liste der Jacobi-Matrizen der Nebenbedingungen an der Lösung.
- vlist von ndarray
Liste der Lagrange-Multiplikatoren für die Nebenbedingungen an der Lösung. Für eine Ungleichheitsnebenbedingung bedeutet ein positiver Multiplikator, dass die obere Schranke aktiv ist, ein negativer Multiplikator, dass die untere Schranke aktiv ist, und wenn ein Multiplikator null ist, bedeutet dies, dass die Nebenbedingung nicht aktiv ist.
- constr_nfevlist von int
Anzahl der Auswertungen der Nebenbedingungen für jede der Nebenbedingungen.
- constr_njevlist von int
Anzahl der Auswertungen der Jacobi-Matrix für jede der Nebenbedingungen.
- constr_nhevlist von int
Anzahl der Auswertungen der Hesse-Matrix für jede der Nebenbedingungen.
- tr_radiusfloat
Radius der Vertrauensregion in der letzten Iteration.
- constr_penaltyfloat
Strafterm-Parameter in der letzten Iteration, siehe initial_constr_penalty.
- barrier_tolerancefloat
Toleranz für das Barriere-Teilproblem in der letzten Iteration. Nur für Probleme mit Ungleichheitsnebenbedingungen.
- barrier_parameterfloat
Barriereparameter in der letzten Iteration. Nur für Probleme mit Ungleichheitsnebenbedingungen.
- execution_timefloat
Gesamte Ausführungszeit.
- messagestr
Nachricht zur Beendigung.
- status{0, 1, 2, 3, 4}
Beendigungsstatus
0 : Maximale Anzahl von Funktionsauswertungen überschritten.
1 : Die Abbruchbedingung gtol ist erfüllt.
2 : Die Abbruchbedingung xtol ist erfüllt.
3 : Die Callback-Funktion hat eine Beendigung angefordert.
4 : Die Nebenbedingungsverletzung überschreitet ‘gtol’.
Geändert in Version 1.15.0: Wenn die Nebenbedingungsverletzung gtol überschreitet, ist
result.successnun False.- cg_stop_condint
Grund für die Beendigung des CG-Teilproblems in der letzten Iteration
0 : CG-Teilproblem nicht ausgewertet.
1 : Iterationslimit erreicht.
2 : Vertrauensradiusgrenze erreicht.
3 : Negative Krümmung erkannt.
4 : Toleranz erfüllt.
Referenzen