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 gtol sind. 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 < xtol ist, wobei tr_radius der 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_radius sein 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), wobei constr_norm_l2(x) die l2-Norm eines Vektors aller Nebenbedingungen ist. Die Zielfunktion wird verwendet, um Testpunkte zu akzeptieren oder abzulehnen, und constr_penalty gewichtet die beiden gegensätzlichen Ziele der Reduzierung der Zielfunktion und der Nebenbedingungen. Der Strafterm wird während des Optimierungsprozesses automatisch aktualisiert, wobei initial_constr_penalty sein 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 Ungleichheitsnebenbedingungen c(x) <= 0 zu behandeln, führt der Algorithmus Schlupfvariablen ein und löst das Problem min_(x,s) f(x) + barrier_parameter*sum(ln(s)) unter den Gleichungsnebenbedingungen c(x) + s = 0 anstelle des ursprünglichen Problems. Dieses Teilproblem wird für abnehmende Werte von barrier_parameter und mit abnehmenden Toleranzen für die Beendigung gelöst, beginnend mit initial_barrier_parameter für den Barriereparameter und initial_barrier_tolerance für die Barriertoleranz. Standardwert ist 0,1 für beide Werte (empfohlen in [1] S. 19). Beachten Sie auch, dass barrier_parameter und barrier_tolerance mit 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.T und ‘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:
OptimizeResult mit den unten dokumentierten Feldern. Beachten Sie Folgendes:
  1. 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.

  2. 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.success nun 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

[1] (1,2,3,4)

Conn, A. R., Gould, N. I., & Toint, P. L. Trust region methods. 2000. Siam. S. 19.