当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy optimize.line_search用法及代码示例


本文简要介绍 python 语言中 scipy.optimize.line_search 的用法。

找到满足强 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 和相应的 xfg 值。仅当此可调用返回 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])

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.optimize.line_search。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。