问题描述
我正在使用 scipy.optimize.fmin_cg
最小化一个函数。我知道函数是正的,(通常)有一个(或多个)最小值为 0,我只对那些最小值感兴趣。 fmin_cg
在梯度范数小于参数 gtol
后停止。相反,如果函数值 f(x)
小于某个 epsilon
,我希望迭代停止。如果不存在或未找到接近 0 的最小值,则允许迭代运行直到 maxiter
被取代。
有没有办法使用 fmin_cg
以在 f(x)<epsilon
而不是 derivative_norm < gtol
时停止迭代?
我尝试将 callback
设置为断言 f(x)<epsilon
并将其分配给布尔变量的函数。如果该变量为 True
,则导数 fprime
人为地返回 0,从而导致迭代中止。 gtol
设置为 0。但是,这种方法似乎存在问题,因为显然在 fprime
的调用和中止之间的某些迭代步骤中使用了人工 0 callback
迭代,导致相当不可预测的行为。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)