fmin_cg#
- scipy.optimize.fmin_cg(f, x0, fprime=None, args=(), gtol=1e-05, norm=inf, epsilon=np.float64(1.4901161193847656e-08), maxiter=None, full_output=0, disp=1, retall=0, callback=None, c1=0.0001, c2=0.4)[Quelle]#
Minimiert eine Funktion mithilfe eines nichtlinearen konjugierten Gradienten-Algorithmus.
- Parameter:
- faufrufbar,
f(x, *args) Zu minimierende Zielfunktion. Hier muss x ein 1D-Array der Variablen sein, die bei der Suche nach einem Minimum geändert werden sollen, und args sind die anderen (festen) Parameter von f.
- x0ndarray
Ein vom Benutzer bereitgestellter erster Schätzwert für xopt, den optimalen Wert von x. Muss ein 1D-Array von Werten sein.
- fprimeaufrufbar,
fprime(x, *args), optional Eine Funktion, die den Gradienten von f an der Stelle x zurückgibt. Hier sind x und args wie oben für f beschrieben. Der zurückgegebene Wert muss ein 1D-Array sein. Standardwert ist None, in diesem Fall wird der Gradient numerisch angenähert (siehe epsilon unten).
- argstuple, optional
Parameterwerte, die an f und fprime übergeben werden. Muss bereitgestellt werden, wenn zusätzliche feste Parameter benötigt werden, um die Funktionen f und fprime vollständig zu spezifizieren.
- gtolfloat, optional
Stoppt, wenn die Norm des Gradienten kleiner als gtol ist.
- normfloat, optional
Reihenfolge, die für die Norm des Gradienten verwendet werden soll (
-np.infist Minimum,np.infist Maximum).- epsilonfloat oder ndarray, optional
Schrittgröße(n), die verwendet werden sollen, wenn fprime numerisch angenähert wird. Kann ein Skalar oder ein 1D-Array sein. Standardwert ist
sqrt(eps), wobei eps die Gleitkomma-Maschinengenauigkeit ist. Normalerweise istsqrt(eps)etwa 1,5e-8.- maxiterint, optional
Maximale Anzahl von Iterationen, die durchgeführt werden sollen. Standardwert ist
200 * len(x0).- full_outputbool, optional
Wenn True, werden zusätzlich zu xopt auch fopt, func_calls, grad_calls und warnflag zurückgegeben. Siehe den Abschnitt Returns unten für zusätzliche Informationen zu optionalen Rückgabewerten.
- dispbool, optional
Wenn True, wird eine Konvergenzmeldung gefolgt von xopt zurückgegeben.
- retallbool, optional
Wenn True, werden die Ergebnisse jeder Iteration zu den zurückgegebenen Werten hinzugefügt.
- callbackcallable, optional
Eine optionale Funktion, die vom Benutzer bereitgestellt wird und nach jeder Iteration aufgerufen wird. Aufruf erfolgt als
callback(xk), wobeixkder aktuelle Wert von x0 ist.- c1float, Standard: 1e-4
Parameter für die Armijo-Bedingungsregel.
- c2float, Standard: 0.4
Parameter für die Krümmungsbedingungsregel.
- faufrufbar,
- Rückgabe:
- xoptndarray
Parameter, die f minimieren, d.h.
f(xopt) == fopt.- foptfloat, optional
Gefundener Minimalwert, f(xopt). Wird nur zurückgegeben, wenn full_output True ist.
- func_callsint, optional
Die Anzahl der durchgeführten Funktionsaufrufe. Wird nur zurückgegeben, wenn full_output True ist.
- grad_callsint, optional
Die Anzahl der durchgeführten Gradientenaufrufe. Wird nur zurückgegeben, wenn full_output True ist.
- warnflagint, optional
Ganzzahliger Wert mit Warnstatus, wird nur zurückgegeben, wenn full_output True ist.
0 : Erfolg.
1 : Die maximale Anzahl von Iterationen wurde überschritten.
- 2Gradienten- und/oder Funktionsaufrufe haben sich nicht geändert. Kann darauf hindeuten,
dass die Genauigkeit verloren ging, d.h. die Routine ist nicht konvergiert.
3 : NaN-Ergebnis aufgetreten.
- allvecsListe von ndarray, optional
Liste von Arrays, die die Ergebnisse jeder Iteration enthalten. Wird nur zurückgegeben, wenn retall True ist.
Siehe auch
minimierengemeinsame Schnittstelle zu allen
scipy.optimize-Algorithmen für die unbeaufsichtigte und beaufsichtigte Minimierung multivariater Funktionen. Sie bietet eine alternative Möglichkeit,fmin_cgaufzurufen, indemmethod='CG'angegeben wird.
Hinweise
Dieser konjugierte Gradientenalgorithmus basiert auf dem von Polak und Ribiere [1].
Konjugierte Gradientenmethoden funktionieren tendenziell besser, wenn
f einen eindeutigen globalen Minimierungspunkt und keine lokalen Minima oder andere stationäre Punkte hat,
f zumindest lokal durch eine quadratische Funktion der Variablen angenähert werden kann,
f stetig ist und einen stetigen Gradienten hat,
fprime nicht zu groß ist, z.B. eine Norm kleiner als 1000 hat,
Der erste Schätzwert, x0, ist dem globalen Minimierungspunkt von f, xopt, einigermaßen nahe.
Die Parameter c1 und c2 müssen
0 < c1 < c2 < 1erfüllen.Referenzen
[1]Wright & Nocedal, „Numerical Optimization“, 1999, S. 120-122.
Beispiele
Beispiel 1: Suchen Sie den minimalen Wert des Ausdrucks
a*u**2 + b*u*v + c*v**2 + d*u + e*v + ffür gegebene Parameterwerte und einen ersten Schätzwert(u, v) = (0, 0).>>> import numpy as np >>> args = (2, 3, 7, 8, 9, 10) # parameter values >>> def f(x, *args): ... u, v = x ... a, b, c, d, e, f = args ... return a*u**2 + b*u*v + c*v**2 + d*u + e*v + f >>> def gradf(x, *args): ... u, v = x ... a, b, c, d, e, f = args ... gu = 2*a*u + b*v + d # u-component of the gradient ... gv = b*u + 2*c*v + e # v-component of the gradient ... return np.asarray((gu, gv)) >>> x0 = np.asarray((0, 0)) # Initial guess. >>> from scipy import optimize >>> res1 = optimize.fmin_cg(f, x0, fprime=gradf, args=args) Optimization terminated successfully. Current function value: 1.617021 Iterations: 4 Function evaluations: 8 Gradient evaluations: 8 >>> res1 array([-1.80851064, -0.25531915])
Beispiel 2: Lösen Sie dasselbe Problem mit der Funktion
minimize. (Dieses myopts-Dictionary zeigt alle verfügbaren Optionen, obwohl in der Praxis nur nicht standardmäßige Werte benötigt würden. Der Rückgabewert ist ein Dictionary.)>>> opts = {'maxiter' : None, # default value. ... 'disp' : True, # non-default value. ... 'gtol' : 1e-5, # default value. ... 'norm' : np.inf, # default value. ... 'eps' : 1.4901161193847656e-08} # default value. >>> res2 = optimize.minimize(f, x0, jac=gradf, args=args, ... method='CG', options=opts) Optimization terminated successfully. Current function value: 1.617021 Iterations: 4 Function evaluations: 8 Gradient evaluations: 8 >>> res2.x # minimum found array([-1.80851064, -0.25531915])