Python 可访问的行业标准,用于收敛到机器精度的无约束最小化?

计算科学 优化
2021-12-07 02:52:26

我有许多变量的无约束最小化问题,我确切地知道梯度。我求助于其中包含的共轭梯度法scipy.optimize.minimize(它使用 Polak-Ribiere 算法),但是LineSearchError当我尝试将算法收敛到机器精度的平方根之外时,它会抛出一个错误。这似乎是某类线搜索算法的常见情况。

机器精度的平方根不足以满足我的目的。是否有一种强大的算法可用,它使用近似线搜索或类似的东西,它确实使一个人能够收敛到机器精度?

1个回答

我完全同意评论中的讨论:很可能您的问题有足够大的条件数,以至于您看到的问题超出了ϵmach

在不了解具体问题的情况下,一种计算成本高的解决方案是使用更高(例如,任意)精度的浮点表示。虽然它可能会显着降低性能,但它应该相对容易实现。

由于您正在使用 Python,我建议您研究mpmath这是一个提供任意精度的 Python 库。特别是,您应该研究他们对根查找和优化的实现:

class mpmath.calculus.optimization.MDNewton(ctx, f, x0, **kwargs`)

请注意,他们仍然建议从 SciPy 获得初始猜测(以提高性能),并且在您的情况下,您可以简单地使用 mpmath 来改进 SciPy 获得的解决方案。请注意,您可能必须以任意精度存储大部分内容。