【发布时间】:2015-01-27 10:00:17
【问题描述】:
我想用scipy.optimize.fmin 最小化一个函数。请注意,在评估我的函数时,我会强制使用 print。
我的问题是,当我开始最小化时,打印的值会减少,直到达到某个点(值 46700222.800)。在那里它继续以非常小的咬合减少,例如,46700222.797,46700222.765,46700222.745,46700222.699,46700222.688,46700222.678
所以直观地说,我觉得我已经达到了最小值,因为每一步的长度都是负 1。但是算法一直运行,直到我得到一个“Maximum number of function evaluations has been exceeded”错误。
我的问题是:当函数评估达到一个不再真正演变的值时,我如何强制我的算法接受参数的值(比如说,我在迭代后获得的收益不超过 1 )。我读到可以使用选项ftol,但它对我的代码绝对没有影响。事实上,我什至不知道为ftol 赋予什么价值。我尝试了从 0.00001 到 10000 的所有值,但仍然没有收敛。
【问题讨论】:
-
如 seth 所述,请发布代码,否则我们只能发送更多指向文档的链接。
-
我可以将我的问题改写如下:有人知道 ftol 和 xtol 必须如何使用吗?有没有人知道当达到一定程度的非进化时如何强制收敛?这完全独立于任何代码。
-
我在使用 Scipy 时遇到了完全相同的问题。我感到非常沮丧,以至于我将所有内容都翻译成 Matlab,与 Python 相比,它的代码对用户非常不友好,但它也遇到了同样的问题。也许优化器在某些情况下只是忽略了 xtol 和 ftol。
-
@Titanic,优化器不会忽略
xtol和ftol,但需要停止对它们的两个约束。看我的回答。
标签: python optimization scipy