本文简要介绍 python 语言中 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 条件的 alpha。
- f: 可调用 f(x,*args)
目标函数。
- myfprime: 可调用 f'(x,*args)
目标函数梯度。
- xk: ndarray
初始点。
- pk: ndarray
搜索方向。搜索方向必须是算法收敛的下降方向。
- gfk: ndarray,可选
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
值。仅当此可调用返回True
时,行搜索才接受alpha
的值。如果可调用返回False
的步长,算法将继续进行新的迭代。仅在满足强 Wolfe 条件的迭代时才调用可调用对象。- maxiter: 整数,可选
要执行的最大迭代次数。
- alpha: 浮点数或无
x_new = x0 + alpha * pk
的 Alpha 或 None 如果线搜索算法没有收敛。- fc: int
进行的函数评估次数。
- gc: int
进行的梯度评估次数。
- 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 页。
搜寻方向PK必须是下降方向(例如
-myfprime(xk)
)找到满足强沃尔夫条件的步长。如果搜索方向不是下降方向(例如myfprime(xk)
), 然后α,new_fval, 和new_slope将是无。例子:
>>> import numpy as np >>> 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 条件的 alpha。
>>> 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])
相关用法
- Python SciPy optimize.linear_sum_assignment用法及代码示例
- Python SciPy optimize.linprog_verbose_callback用法及代码示例
- Python SciPy optimize.linprog用法及代码示例
- Python SciPy optimize.least_squares用法及代码示例
- Python SciPy optimize.leastsq用法及代码示例
- Python SciPy optimize.lsq_linear用法及代码示例
- Python SciPy optimize.rosen_der用法及代码示例
- Python SciPy optimize.rosen用法及代码示例
- Python SciPy optimize.shgo用法及代码示例
- Python SciPy optimize.minimize_scalar用法及代码示例
- Python SciPy optimize.root用法及代码示例
- Python SciPy optimize.fmin用法及代码示例
- Python SciPy optimize.NonlinearConstraint用法及代码示例
- Python SciPy optimize.KrylovJacobian用法及代码示例
- Python SciPy optimize.toms748用法及代码示例
- Python SciPy optimize.bracket用法及代码示例
- Python SciPy optimize.milp用法及代码示例
- Python SciPy optimize.diagbroyden用法及代码示例
- Python SciPy optimize.bisect用法及代码示例
- Python SciPy optimize.isotonic_regression用法及代码示例
- Python SciPy optimize.golden用法及代码示例
- Python SciPy optimize.brute用法及代码示例
- Python SciPy optimize.newton用法及代码示例
- Python SciPy optimize.fsolve用法及代码示例
- Python SciPy optimize.Bounds用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.optimize.line_search。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。