I’m still a bit new to MTK, please excuse me if I’m missing something simple here.
I have an ODE model that integrates over two variables, V_a and V_b. However, I can only measure the total volume, V_tot, so I have constructed my model to be:
@parameters begin
p_a = ...
p_b = ...
end
@variables begin
V_a(t) = 0.0
V_b(t) = 0.0
f_a(t) = ...
f_b(t) = ...
V_tot(t)
end
eqs = [
D(V_a) ~ (1 - (V_a + V_b)) * f_a(t; p_a...)
D(V_b) ~ (1 - (V_a + V_b)) * f_b(t; p_b...)
V_tot ~ V_a + V_b
]
Where f_a and f_b contain the parameters I am trying to optimize. I know that the build_loss_objective function in DiffEqParamEstim can be passed solver kwargs, but the kwarg save_idxs only appears to return integrated variables, so I can’t do something like save_idxs = [V_tot].
I have even tried to build my own loss function by following the documentation:
function loss(sol)
	tot_loss = 0.0
    if any((!SciMLBase.successful_retcode(s.retcode) for s in sol))
        tot_loss = Inf
    else
        tot_loss = sum((V_tot_train .- sol[Vtot]).^2)/length(V_tot_train)
    end
	tot_loss
end
But when I try to run the solver using this, it causes the solver to throw an error:
ArgumentError: invalid index: ModelingToolkit.ParameterIndex{SciMLStructures.Tunable, Int64}(SciMLStructures.Tunable(), 1, false) of type ModelingToolkit.ParameterIndex{SciMLStructures.Tunable, Int64}
Which I’m really struggling to understand…  The loss function runs without throwing an error, and the build_loss_objective function runs without an error.
Any hints would be a huge help!