gpt4 book ai didi

python - 在 scipy 优化中限制/最小化步长?

转载 作者:行者123 更新时间:2023-12-04 11:38:48 25 4
gpt4 key购买 nike

我正在使用以下命令(使用 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++ double 运行。所以到小数点后 8 或 9 位,有很多噪声影响能量(能量是函数的输出,我试图通过改变温度来最小化),并且随机数播种对其影响很小以及。

所以我想要做的是告诉 scipy 优化器它不能采取比 1e-4 更小的步骤。但我似乎找不到办法做到这一点。如果可能的话,我想坚持使用 L-BFGS-B 方法。我已经查看了一些文档,但到目前为止我发现的唯一一件事是如何使用“eps”选项选择初始步长。

最佳答案

我参加聚会有点晚了,但是当我遇到类似问题时,我只想分享我的解决方法。
优化器的初始步骤似乎与正在优化的变量(x0 参数)的初始猜测有关。就我而言,我需要优化一个角度。当我最初对角度的猜测接近零度时,算法采取了非常小的步长(度数的分数),这比我的函数的灵敏度要小。这导致了对正确解决方案的失败搜索。
我能够通过将 360 度添加到角度的原始初始猜测来解决问题。这迫使最小化算法在开始时采取更大的步骤并收敛到正确的值。

您可以尝试通过在优化之前向模型添加恒定偏差并稍后减去它来尝试做类似的事情。这不是最优雅的解决方案,但它对我的情况有所帮助。

关于python - 在 scipy 优化中限制/最小化步长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46102464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com