1

我正在尝试使用 lmfit 包拟合一组数据。作为最小化例程,我选择了差分进化(https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.optimize.differential_evolution.html)并且我想限制最大迭代次数执行。

根据 lmfit 手册(https://lmfit.github.io/lmfit-py/fitting.html#the-minimize-function),我可以使用 **fit_kws 通过最小化函数将关键字参数传递给底层 scipy 最小化器字典。

我尝试了几个选项,将关键字传递给 fit 例程。例子是:

fit_kws={'maxiter':20}
out = minimize(f2min, fit_params, args=(q, Iexp, errI), iter_cb=printout, method='differential_evolution', **fit_kws) 

或者

out = minimize(f2min, fit_params, args=(q, Iexp, errI), iter_cb=printout, method='differential_evolution', fit_kws={'maxiter':20})

或者

out = minimize(f2min, fit_params, args=(q, Iexp, errI), iter_cb=printout, method='differential_evolution', maxiter = 20)

我没有收到任何错误消息,但 maxiter 只是被忽略了。我会简单地期望在 20 次迭代后(我也尝试过更大的数字),拟合过程会停止。另外,如果我将 fit_kws 定义为

fit_kws={'maxiter':a}

这是胡说八道,我预计会出现错误,但我没有得到。

你能帮我理解如何将一些参数传递给底层的 scipy.optimize 函数吗?

4

1 回答 1

0

我遇到了同样的问题,尽管在我的情况下出现了错误,请参阅下面的SO question

简而言之,您可以使用关键字参数将关键字参数传递给底层求解器options

fit = fitter.minimize(method='differential_evolution', options={'maxiter':20})

或更具体地说,对于您上面的示例:

out = minimize(f2min, fit_params, args=(q, Iexp, errI), iter_cb=printout, method='differential_evolution', options={'maxiter':20})
于 2020-01-14T12:30:53.033 回答