为什么我的 scipy.optimize.minimize 失败了?

Why my scipy.optimize.minimize fails?

我尝试用 fmin_bfgs 找到绝对函数 abs(x) 的局部最小值。初始点设置为100.0;预期的答案是 0.0。但是,我得到:

In [184]: op.fmin_bfgs(lambda x:np.abs(x),100.0)
Warning: Desired error not necessarily achieved due to precision loss.
         Current function value: 100.000000
         Iterations: 0
         Function evaluations: 64
         Gradient evaluations: 20
Out[184]: array([100.0])

为什么?

fmin_bfgs 和 fmin_slsqp 等方法需要平滑(连续导数)函数才能提供可靠的结果。 abs(x) 在其最小值处有一个不连续的导数。在这种情况下,像 Nelder-Mead 单纯形这样不需要连续导数的方法可能会提供更好的结果。