【发布时间】:2018-05-21 17:38:40
【问题描述】:
在 SciPy 1.0.0 中,根据 its documentation,scipy.optimize.line_search 有一个可选参数 amax,它决定了“最大步长”。
因此,我希望第一个返回值 alpha 始终小于给定的 amax,但事实并非如此,如下例所示:
from scipy.optimize import line_search
def f(x):
return x[0]**2 + x[1]**2
def df(x):
return 2*x
x = np.array([4, 5])
line_search(f, df, x, -df(x), amax=0.001)
# Returns (0.5, 3, 1, 0.0, 41.0, array([ 0., 0.]))
其中alpha的值为0.5,而amax的值为0.001,小于0.5。
另一种解释可能是amax 限制了输出值x_new 和x0 之间的距离,但事实并非如此。
我是否误解了文档,或者这是 SciPy 中的错误?而且,如果它按预期工作,amax 的正确解释是什么,还有其他方法来限制执行线搜索的 alpha 范围吗?
【问题讨论】:
-
哦,line_search 模块。碰过一次,失败了。似乎 alpha 增加了(从 1 开始),因此第一个 pick=1 用于您。您是否需要基于 wolfe 条件的行搜索。如果没有,我会尝试 armijo-ls,它可以从 1 到 0 工作。但当然它是另外一回事。如果您需要坚持这一点,您可能会在 github 上的问题跟踪器中找到一些讨论,当然还有 Nocedal 的数值优化中的伪代码。
-
Armijo 按预期做了(尝试过)(但仍未回答您的问题)。
-
阅读代码感觉就像一个错误。如果初始猜测成功,则永远不会触及 amax。与 Nocedal 的区别也令人费解:amax 是 init 阶段的一部分。
标签: python scipy mathematical-optimization