Scipy Miniminum для оптимизации параметров ODEPython

Программы на Python
Ответить
Anonymous
 Scipy Miniminum для оптимизации параметров ODE

Сообщение Anonymous »

Я определил функцию оды langmuir_ode следующим образом:

Код: Выделить всё

def langmuir_ode(t, AL, Rmax, kon, koff):
A = np.interp(t, time, concs)
L = Rmax - AL
return kon * A * L - koff * AL
t — некоторый массив времени (n,). concs — это (n) массив со значениями на момент времени в t. Посколькуsolve_ivp может захотеть оценить моменты времени не напрямую в t, я разрешаю интерполяцию, чтобы найти значение A из массивов time и concs. Rmax, kon и koff — это параметры, которые я хотел бы оптимизировать с помощью scipy Miniminum.
Далее я определяю функцию obj для вычисления ошибки между некоторыми смоделированными данными ysim и решением, найденнымsolve_ivp:

Код: Выделить всё

def obj(t, *args):
sol = solve_ivp(fun=langmuir_ode,
t_span=[0,t[-1]],
y0=[0.0],
t_eval=t,
args=args
)
sol = sol.y.ravel()
error = ysim - sol
res_sd = np.std(error)
print('Standard deviation of fit residuals:', format(res_sd,'.2f'))
SSQ = np.sum(error**2)
return SSQ
Используя параметры, которые, как известно, являются правильными для смоделированных данных, я получаю хорошие значения SSQ согласно:

Код: Выделить всё

print('Sum of squared fit residuals:', format(obj(time, 250, 1e5, 5e-3),'.2f'))
Standard deviation of fit residuals: 1.58
Sum of squared fit residuals: 848.23
Мой вопрос: как мне использовать функцию минимизации Scipy для оптимизации параметров Rmax, kon и koff с учетом некоторых начальных значений и вышеуказанных функций?

Код: Выделить всё

initial_values = 300, 5e4, 4e-5
fit = minimize(obj, initial_values)
дает:

Код: Выделить всё

Traceback (most recent call last):

File C:\Program Files\Spyder\pkgs\spyder_kernels\py3compat.py:356 in compat_exec
exec(code, globals, locals)

File c:\users\avdkadmin\untitled0.py:66
fit = minimize(obj, initial_values)

File C:\Program Files\Spyder\pkgs\scipy\optimize\_minimize.py:691 in minimize
res = _minimize_bfgs(fun, x0, args, jac, callback, **options)

File C:\Program Files\Spyder\pkgs\scipy\optimize\_optimize.py:1362 in _minimize_bfgs
sf = _prepare_scalar_function(fun, x0, jac, args=args, epsilon=eps,

File C:\Program Files\Spyder\pkgs\scipy\optimize\_optimize.py:332 in _prepare_scalar_function
sf = ScalarFunction(fun, x0, args, grad, hess,

File C:\Program Files\Spyder\pkgs\scipy\optimize\_differentiable_functions.py:158 in __init__
self._update_fun()

File C:\Program Files\Spyder\pkgs\scipy\optimize\_differentiable_functions.py:251 in _update_fun
self._update_fun_impl()

File C:\Program Files\Spyder\pkgs\scipy\optimize\_differentiable_functions.py:155 in update_fun
self.f = fun_wrapped(self.x)

File C:\Program Files\Spyder\pkgs\scipy\optimize\_differentiable_functions.py:137 in fun_wrapped
fx = fun(np.copy(x), *args)

File c:\users\avdkadmin\untitled0.py:50 in obj
sol = solve_ivp(fun=langmuir_ode,

File C:\Program Files\Spyder\pkgs\scipy\integrate\_ivp\ivp.py:540 in solve_ivp
raise ValueError("Values in `t_eval` are not within `t_span`.")

ValueError: Values in `t_eval` are not within `t_span`.
Вероятно, я неправильно понимаю синтаксис, необходимый для правильного вызова функции минимизации.
Есть предложения?

Подробнее здесь: https://stackoverflow.com/questions/788 ... parameters
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»