scipy.optimize.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)[源代码]¶
找到满足强Wolfe条件的α。
- 参数
- f可调用f(x,*args)
目标函数。
- myfprime可调用f‘(x,*args)
目标函数梯度。
- xkndarray
起点。
- pkndarray
搜索方向。
- gfkndarray,可选
x=xk的梯度值(xk是当前参数估计)。如果省略,将重新计算。
- old_fval浮动,可选
x=xk的函数值。如果省略,将重新计算。
- old_old_fval浮动,可选
x=xk之前的点的函数值。
- args元组,可选
传递给目标函数的其他参数。
- c1浮动,可选
Armijo条件规则的参数。
- c2浮动,可选
曲率条件规则的参数。
- amax浮动,可选
最大步长
- extra_condition可调用,可选
表单的可调用对象
extra_condition(alpha, x, f, g)
返回布尔值。参数是建议的步骤alpha
以及相应的x
,f
和g
价值。行搜索接受的值为alpha
仅当此可调用函数返回True
。如果可调用函数返回False
对于步长,算法将继续进行新的迭代。只有满足强Wolfe条件的迭代才会调用Callable。- maxiter整型,可选
要执行的最大迭代次数。
- 退货
- alpha浮动或无
其中的Alpha
x_new = x0 + alpha * pk
,如果线搜索算法不收敛,则为None。- fc集成
进行的功能评估次数。
- gc集成
进行的渐变求值次数。
- new_fval浮动或无
新函数值
f(x_new)=f(x0+alpha*pk)
,如果线搜索算法不收敛,则为None。- old_fval浮动
旧函数值
f(x0)
。- new_slope浮动或无
位于新值的沿搜索方向的局部坡度
<myfprime(x_new), pk>
,如果线搜索算法不收敛,则为None。
注意事项
使用线搜索算法来实施强Wolfe条件。见Wright和Nocedal,“数值优化”,1999年,第59-61页。
示例
>>> from scipy.optimize import line_search
定义了目标函数及其梯度。
>>> def obj_func(x): ... return (x[0])**2+(x[1])**2 >>> def obj_grad(x): ... return [2*x[0], 2*x[1]]
我们可以找到满足强Wolfe条件的α。
>>> 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])