我正在尝试使用lmfit软件包拟合一组数据。作为最小化例程,我选择了differential_evolution(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函数?

最佳答案

我遇到了同样的问题,尽管在我的情况下出现了错误,请参见以下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})

10-08 14:03