我正在尝试使用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})