Я пытаюсь уместить набор данных с помощью пакета 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), я могу передавать аргументы ключевого слова через функцию минимизации в базовый scipy минимизатор, используя словарь ** fit_kws.
Я пробовал несколько вариантов, чтобы передать ключевое слово в процедуру подбора. Примеры:
fit_kws={'maxiter':20}
out = minimize(f2min, fit_params, args=(q, Iexp, errI), iter_cb=printout, method='differential_evolution', **fit_kws)
or
out = minimize(f2min, fit_params, args=(q, Iexp, errI), iter_cb=printout, method='differential_evolution', fit_kws={'maxiter':20})
or
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?
maxiter=20
функции вместо dict, что тогда произойдет? - person Tinu   schedule 05.11.2019kws={'maxiter'=20}
вместоfit_kws={'maxiter'=20}
. - person Tinu   schedule 05.11.2019minimize(..., method='differential_evolution', maxiter=20)
должно работать. Если вы уверены, что это не работает (каковы доказательства? FWIW, гдеdifferential_evolution
,maxiter
означает максимальное количество поколений), задайте вопрос в списке рассылки или отправьте отчет об ошибке. - person M Newville   schedule 06.11.2019