【发布时间】:2018-02-16 13:16:14
【问题描述】:
我正在使用以下命令(使用 scipy,在 python 中):
minimize(func, 0.35, method='L-BFGS-B, bounds=np.array([0.075, None]), options={'eps':0.01})
它执行以下操作:通过改变它的一个输入参数(参数是温度,这是一个化学模拟)最小化我的函数(func),初始猜测为 0.35,将温度保持在 [0.075,inf)范围内,采用 0.01 的初始步长(换句话说,它测试的第二个点是 0.36,在初始 0.35 之后)。
这一切都很好。问题是一段时间后,步长变得非常小。 bfgs 优化器首先采用 0.01 的步长,但很快就会收紧到非常小的步长。最后,有时它只会将温度改变到小数点后的第 8 位或第 9 位。这是一个问题,因为我最小化的功能不是那么敏感。基本上,温度参数被传递给计算化学模拟包。它使用了一些随机数播种,并且在 bfgs 的每次交互中可能是化学模拟中的千万亿次 FLOP,它主要以 c++ 双精度运行。所以到小数点后 8 位或 9 位,有很多噪声影响能量(能量是函数的输出,我试图通过改变温度来最小化它),并且随机数播种对它的影响很小也是。
所以我想做的是告诉 scipy 优化器它不能采取小于例如 1e-4 的步数。但我似乎无法找到一种方法来做到这一点。如果可能的话,我想坚持使用 L-BFGS-B 方法。我浏览了一些文档,但到目前为止我发现的唯一一件事是如何使用“eps”选项选择初始步长。
【问题讨论】:
-
使用多元最小化器来最小化一个变量的函数似乎很奇怪。
-
我实际上是在最小化多个参数,但只有一个参数有这个问题。我想如果我去掉额外的细节会让我的问题更清楚
标签: python numpy math optimization scipy