首页 > 解决方案 > 在搜索函数的最小值时,如何为有限差分梯度设置变量的最小变化?

问题描述

我想在 python y = f(x) 中找到函数的最小值

问题:求解器试图用超接近的 x 值(delta x 在 1e-8 附近)计算梯度,而我的函数 f 对这么小的步长不敏感(即,当 delta x 在 1e-1 附近时,我们可以看到 y 变化) . 因此,求解器的梯度为 0,无法找到合适的解。

我已经尝试过关注 scipy 的求解器,但找不到我正在寻找的选项..

scipy.optimize.minimize

scipy.optimize.fmin

在 Matlab fmincon 中,有一个选项可以完成“DiffMinChange”的工作:有限差分梯度的变量最小变化(正标量)。

标签: pythonoptimization

解决方案


您可能想尝试使用 scipy 中的 L-BFGS-B:

https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_l_bfgs_b.html

并提供大约 0.1/0.05 的“epsilon”参数,看看它是否会变得更好。我当然假设您将让求解器通过数值微分(即,您将 fprime=None 和 approx_grad=True 传递给例程)为您计算梯度。

我个人鄙视各种求解器的“最小化”界面,所以我更喜欢自己处理实际的求解器。


推荐阅读