函数scipy.optimize.minimize的选项

时间:2014-12-22 16:47:03

标签: python optimization options minimize

我试图最小化一个非常长的函数(它是500000个子函数的总和),以便将一些参数拟合到概率模型。我使用scipy.optimize.minimize函数。我尝试了PowellNelder-Mead算法,而Powell在我的设置中看起来更快。但是,我真的不明白如何强制这个过程在给定的时间后给我一些结果,即使它们不是最佳的"。

我填写了选项maxitermaxfevxtolftol,但我并不是真的了解这些选项,因为我试图提出{ {1}}在我的函数中,我注意到算法对它的评估超过print次,但是当它达到maxiter点时,它会发送一个错误"达到最大迭代次数"。 / p>

任何人都可以向我解释他们如何使用我正在使用的两种算法吗?该文件非常不清楚。

我的代码:

maxfev

谢谢。

1 个答案:

答案 0 :(得分:3)

你应该在scipy邮件列表,甚至scipy开发人员邮件列表上问这个问题,但是看看source code的Nelder-Mead算法,我注意到maxiter上的实际检查maxfev位于外部while循环中。函数在while循环中被调用多次,因此函数评估的实际数量可以轻松超过maxfev。 鲍威尔方法的main loop内部发生了类似的事情。对于该方法,在测试评估次数(N参数数量)之前,似乎评估函数N次。

我想这样做是因为否则核心循环中会有太多if语句检查maxfev,并且在内循环之外有条件被认为更快/更清楚。