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)[source]#
- Find alpha that satisfies strong Wolfe conditions. - Parameters:
- fcallable f(x,*args)
- Objective function. 
- myfprimecallable f’(x,*args)
- Objective function gradient. 
- xkndarray
- Starting point. 
- pkndarray
- Search direction. The search direction must be a descent direction for the algorithm to converge. 
- gfkndarray, optional
- Gradient value for x=xk (xk being the current parameter estimate). Will be recomputed if omitted. 
- old_fvalfloat, optional
- Function value for x=xk. Will be recomputed if omitted. 
- old_old_fvalfloat, optional
- Function value for the point preceding x=xk. 
- argstuple, optional
- Additional arguments passed to objective function. 
- c1float, optional
- Parameter for Armijo condition rule. 
- c2float, optional
- Parameter for curvature condition rule. 
- amaxfloat, optional
- Maximum step size 
- extra_conditioncallable, optional
- A callable of the form - extra_condition(alpha, x, f, g)returning a boolean. Arguments are the proposed step- alphaand the corresponding- x,- fand- gvalues. The line search accepts the value of- alphaonly if this callable returns- True. If the callable returns- Falsefor the step length, the algorithm will continue with new iterates. The callable is only called for iterates satisfying the strong Wolfe conditions.
- maxiterint, optional
- Maximum number of iterations to perform. 
 
- Returns:
- alphafloat or None
- Alpha for which - x_new = x0 + alpha * pk, or None if the line search algorithm did not converge.
- fcint
- Number of function evaluations made. 
- gcint
- Number of gradient evaluations made. 
- new_fvalfloat or None
- New function value - f(x_new)=f(x0+alpha*pk), or None if the line search algorithm did not converge.
- old_fvalfloat
- Old function value - f(x0).
- new_slopefloat or None
- The local slope along the search direction at the new value - <myfprime(x_new), pk>, or None if the line search algorithm did not converge.
 
 - Notes - Uses the line search algorithm to enforce strong Wolfe conditions. See Wright and Nocedal, ‘Numerical Optimization’, 1999, pp. 59-61. - The search direction pk must be a descent direction (e.g. - -myfprime(xk)) to find a step length that satisfies the strong Wolfe conditions. If the search direction is not a descent direction (e.g.- myfprime(xk)), then alpha, new_fval, and new_slope will be None.- Examples - >>> import numpy as np >>> from scipy.optimize import line_search - A objective function and its gradient are defined. - >>> def obj_func(x): ... return (x[0])**2+(x[1])**2 >>> def obj_grad(x): ... return [2*x[0], 2*x[1]] - We can find alpha that satisfies strong Wolfe conditions. - >>> 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])