使用与 gtol 不同的条件中断 ```scipy.optimize.fmin_cg```

问题描述

我正在使用 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 (将#修改为@)