scipy.optimize.

fmin_tnc#

scipy.optimize.fmin_tnc(func, x0, fprime=None, args=(), approx_grad=0, bounds=None, epsilon=1e-08, scale=None, offset=None, messages=15, maxCGit=-1, maxfun=None, eta=-1, stepmx=0, accuracy=0, fmin=0, ftol=-1, xtol=-1, pgtol=-1, rescale=-1, disp=None, callback=None)[Quelle]#

Minimiert eine Funktion mit Variablen, die Beschränkungen unterliegen, unter Verwendung von Gradienteninformationen in einem abgeschnittenen Newton-Algorithmus. Diese Methode kapselt eine C-Implementierung des Algorithmus.

Parameter:
funccallable func(x, *args)

Zu minimierende Funktion. Muss eines der folgenden tun:

  1. Gibt f und g zurück, wobei f der Wert der Funktion und g ihr Gradient (eine Liste von Floats) ist.

  2. Gibt den Funktionswert zurück, aber die Gradientenfunktion wird separat als fprime bereitgestellt.

  3. Gibt den Funktionswert zurück und setzt approx_grad=True.

Wenn die Funktion None zurückgibt, wird die Minimierung abgebrochen.

x0array_like

Anfängliche Schätzung des Minimums.

fprimecallable fprime(x, *args), optional

Gradient von func. Wenn None, dann muss entweder func den Funktionswert und den Gradienten zurückgeben (f,g = func(x, *args)) oder approx_grad muss True sein.

argstuple, optional

Argumente, die an die Funktion übergeben werden.

approx_gradbool, optional

Wenn True, wird der Gradient numerisch angenähert.

boundslist, optional

(min, max) Paare für jedes Element in x0, die die Grenzen für diesen Parameter definieren. Verwenden Sie None oder +/-inf für eines von min oder max, wenn in dieser Richtung keine Grenze vorhanden ist.

epsilonfloat, optional

Wird verwendet, wenn approx_grad True ist. Die Schrittweite bei einer endlichen Differenznäherung für fprime.

scalearray_like, optional

Skalierungsfaktoren, die auf jede Variable angewendet werden. Wenn None, sind die Faktoren up-low für intervallgebundene Variablen und 1+|x| für die anderen. Standardmäßig None.

offsetarray_like, optional

Wert, der von jeder Variablen subtrahiert wird. Wenn None, sind die Offsets (up+low)/2 für intervallgebundene Variablen und x für die anderen.

messagesint, optional

Bitmaske, die zur Auswahl der angezeigten Nachrichten während der Minimierung verwendet wird. Die Werte sind im MSGS-Wörterbuch definiert. Standardmäßig MGS_ALL.

dispint, optional

Ganzzahlige Schnittstelle zu Nachrichten. 0 = keine Nachricht, 5 = alle Nachrichten

maxCGitint, optional

Maximale Anzahl von Hesse-Vektor-Auswertungen pro Hauptiteration. Wenn maxCGit == 0, ist die gewählte Richtung -gradient. Wenn maxCGit < 0, wird maxCGit auf max(1,min(50,n/2)) gesetzt. Standardmäßig -1.

maxfunint, optional

Maximale Anzahl von Funktionsauswertungen. Wenn None, wird maxfun auf max(100, 10*len(x0)) gesetzt. Standardmäßig None. Beachten Sie, dass diese Funktion das Limit überschreiten kann, da Gradienten durch numerische Differenzierung ausgewertet werden.

etafloat, optional

Schweregrad der Liniensuche. Wenn < 0 oder > 1, wird auf 0,25 gesetzt. Standardmäßig -1.

stepmxfloat, optional

Maximaler Schritt für die Liniensuche. Kann während des Aufrufs erhöht werden. Wenn zu klein, wird er auf 10,0 gesetzt. Standardmäßig 0.

accuracyfloat, optional

Relative Genauigkeit für endliche Differenzberechnungen. Wenn <= Maschinenpräzision, wird auf sqrt(Maschinenpräzision) gesetzt. Standardmäßig 0.

fminfloat, optional

Geschätzter minimaler Funktionswert. Standardmäßig 0.

ftolfloat, optional

Genauigkeitsziel für den Wert von f im Stoppkriterium. Wenn ftol < 0,0, wird ftol auf 0,0 gesetzt. Standardmäßig -1.

xtolfloat, optional

Genauigkeitsziel für den Wert von x im Stoppkriterium (nach Anwendung der x-Skalierungsfaktoren). Wenn xtol < 0,0, wird xtol auf sqrt(Maschinenpräzision) gesetzt. Standardmäßig -1.

pgtolfloat, optional

Genauigkeitsziel für den Wert des projizierten Gradienten im Stoppkriterium (nach Anwendung der x-Skalierungsfaktoren). Wenn pgtol < 0,0, wird pgtol auf 1e-2 * sqrt(accuracy) gesetzt. Die Einstellung auf 0,0 wird nicht empfohlen. Standardmäßig -1.

rescalefloat, optional

Skalierungsfaktor (in log10), der verwendet wird, um die Neuskalierung des f-Werts auszulösen. Wenn 0, wird bei jeder Iteration neu skaliert. Wenn ein großer Wert, wird nie neu skaliert. Wenn < 0, wird rescale auf 1,3 gesetzt.

callbackcallable, optional

Wird nach jeder Iteration aufgerufen, als callback(xk), wobei xk der aktuelle Parametervektor ist.

Rückgabe:
xndarray

Die Lösung.

nfevalint

Die Anzahl der Funktionsauswertungen.

rcint

Rückgabecode, siehe unten.

Siehe auch

minimieren

Schnittstelle zu Minimierungsalgorithmen für multivariate Funktionen. Siehe insbesondere die Methode ‚TNC‘ method.

Hinweise

Der zugrunde liegende Algorithmus ist der abgeschnittene Newton-Algorithmus, auch Newton-Conjugate-Gradient genannt. Diese Methode unterscheidet sich von scipy.optimize.fmin_ncg dadurch, dass

  1. sie eine C-Implementierung des Algorithmus kapselt

  2. sie erlaubt jedem Variablen eine obere und untere Grenze.

Der Algorithmus integriert die Randbeschränkungen, indem er die Abstiegsrichtung wie bei einem unbeschränkten abgeschnittenen Newton-Algorithmus bestimmt, aber nie einen Schritt macht, der zu groß ist, um den Raum zulässiger x-Werte zu verlassen. Der Algorithmus verfolgt eine Menge von aktuell aktiven Beschränkungen und ignoriert diese bei der Berechnung der minimal zulässigen Schrittgröße. (Die zugehörigen x-Werte werden fest gehalten.) Wenn die maximal zulässige Schrittgröße Null ist, wird eine neue Beschränkung hinzugefügt. Am Ende jeder Iteration kann eine der Beschränkungen als nicht mehr aktiv betrachtet und entfernt werden. Eine Beschränkung gilt als nicht mehr aktiv, wenn sie aktuell aktiv ist, aber der Gradient für diese Variable von der Beschränkung nach innen zeigt. Die spezifische entfernte Beschränkung ist diejenige, die mit der Variable des größten Index verbunden ist, deren Beschränkung nicht mehr aktiv ist.

Rückgabecodes sind wie folgt definiert:

  • -1 : Unzulässig (untere Grenze > obere Grenze)

  • 0 : Lokales Minimum erreicht (\(|pg| \approx 0\))

  • 1 : Konvergiert (\(|f_n-f_(n-1)| \approx 0\))

  • 2 : Konvergiert (\(|x_n-x_(n-1)| \approx 0\))

  • 3 : Maximale Anzahl von Funktionsauswertungen erreicht

  • 4 : Liniensuche fehlgeschlagen

  • 5 : Alle unteren Grenzen sind gleich den oberen Grenzen

  • 6 : Kann keinen Fortschritt erzielen

  • 7 : Benutzer hat das Ende der Minimierung angefordert

Referenzen

Wright S., Nocedal J. (2006), ‚Numerical Optimization‘

Nash S.G. (1984), „Newton-Type Minimization Via the Lanczos Method“, SIAM Journal of Numerical Analysis 21, S. 770-778