line_search#
- scipy.optimize.line_search(f, myfprime, xk, pk, gfk=None, old_fval=None, old_old_fval=None, args=(), c1=0.0001, c2=0.9, amax=None, extra_condition=None, maxiter=10)[Quelle]#
Finden Sie ein Alpha, das die starken Wolfe-Bedingungen erfüllt.
- Parameter:
- fcallable f(x,*args)
Zielfunktion.
- myfprimecallable f’(x,*args)
Gradient der Zielfunktion.
- xkndarray
Startpunkt.
- pkndarray
Suchrichtung. Die Suchrichtung muss eine Abstiegsrichtung sein, damit der Algorithmus konvergiert.
- gfkndarray, optional
Gradientenwert für x=xk (wobei xk die aktuelle Parameterschätzung ist). Wird neu berechnet, wenn weggelassen.
- old_fvalfloat, optional
Funktionswert für x=xk. Wird neu berechnet, wenn weggelassen.
- old_old_fvalfloat, optional
Funktionswert für den Punkt vor x=xk.
- argstuple, optional
Zusätzliche Argumente, die an die Zielfunktion übergeben werden.
- c1float, optional
Parameter für die Armijo-Bedingungsregel.
- c2float, optional
Parameter für die Krümmungsbedingungsregel.
- amaxfloat, optional
Maximale Schrittweite
- extra_conditioncallable, optional
Ein Callable der Form
extra_condition(alpha, x, f, g), das einen booleschen Wert zurückgibt. Die Argumente sind die vorgeschlagene Schrittweitealphaund die entsprechendenx-,f- undg-Werte. Die Liniensuche akzeptiert den Wert vonalphanur, wenn dieses CallableTruezurückgibt. Wenn das Callable für die SchrittlängeFalsezurückgibt, wird der Algorithmus mit neuen Iterationen fortgesetzt. Das Callable wird nur für Iterationen aufgerufen, die die starken Wolfe-Bedingungen erfüllen.- maxiterint, optional
Maximale Anzahl durchzuführender Iterationen.
- Rückgabe:
- alphafloat oder None
Alpha, für das
x_new = x0 + alpha * pkgilt, oder None, wenn der Liniensuche-Algorithmus nicht konvergiert ist.- fcint
Anzahl der durchgeführten Funktionsauswertungen.
- gcint
Anzahl der durchgeführten Gradientenauswertungen.
- new_fvalfloat oder None
Neuer Funktionswert
f(x_new)=f(x0+alpha*pk)oder None, wenn der Liniensuche-Algorithmus nicht konvergiert ist.- old_fvalfloat
Alter Funktionswert
f(x0).- new_slopefloat oder None
Die lokale Steigung entlang der Suchrichtung am neuen Wert
<myfprime(x_new), pk>oder None, wenn der Liniensuche-Algorithmus nicht konvergiert ist.
Hinweise
Verwendet den Liniensuche-Algorithmus, um die starken Wolfe-Bedingungen zu erzwingen. Siehe Wright und Nocedal, 'Numerical Optimization', 1999, S. 59-61.
Die Suchrichtung pk muss eine Abstiegsrichtung sein (z. B.
-myfprime(xk)), um eine Schrittlänge zu finden, die die starken Wolfe-Bedingungen erfüllt. Wenn die Suchrichtung keine Abstiegsrichtung ist (z. B.myfprime(xk)), dann werden alpha, new_fval und new_slope None sein.Beispiele
>>> import numpy as np >>> from scipy.optimize import line_search
Eine Zielfunktion und ihr Gradient sind definiert.
>>> def obj_func(x): ... return (x[0])**2+(x[1])**2 >>> def obj_grad(x): ... return [2*x[0], 2*x[1]]
Wir können ein Alpha finden, das die starken Wolfe-Bedingungen erfüllt.
>>> start_point = np.array([1.8, 1.7]) >>> search_gradient = np.array([-1.0, -1.0]) >>> line_search(obj_func, obj_grad, start_point, search_gradient) (1.0, 2, 1, 1.1300000000000001, 6.13, [1.6, 1.4])