scipy.optimize.fmin_bfgs:“由于精度损失,不一定能达到预期的误差”

计算科学 优化 Python
2021-12-24 10:25:56

尝试使用scipy.optimize.fmin_bfgs函数优化 Python 中的函数时,我在帖子主题中收到警告完整的输出:

警告:由于精度损失,不一定能达到预期的误差

     Current function value: nan
     Iterations: 1
     Function evaluations: 18
     Gradient evaluations: 3

这不是一个致命的错误,我得到了答案,但它们远非我搜索的最佳值。

是否有任何可能产生此错误的典型“菜鸟”错误?我昨天才开始使用这个包;事实上,我什至不知道从哪里开始寻找。任何帮助表示赞赏!

1个回答

在这种情况下查看源代码会很有帮助。这很容易,因为其中的所有内容scipy都是开源的!

从阅读源代码可以看出,当warnflag==2. linesearch函数返回 None (失败)时,这将在代码的其他地方设置。

那么为什么线搜索会失败呢?优化算法的目标是通过一系列连续的迭代找到某个目标函数的最小值。在这种情况下,线搜索试图找到一个步长,其中 BFGS 中的近似值仍然有效。当您的函数的 Hessian 或其梯度以某种方式表现不佳时,即使梯度不为零,括号中的步长也可以计算为零。

我想我的建议是要么去文献(Nocedal 和 Wright 对线搜索和 BFGS 方法有很好的讨论),要么去你的函数,并确保它在你正在搜索的区域中表现良好。