I’m creating an ODESystem using ModelingToolkit.jl and was wondering if for EnsembleProblems there is an easier way to specify the parameters in remake.
Example, from the documentation of ModelingToolkit:
using ModelingToolkit
using DifferentialEquations
@variables t x(t) RHS(t)
@parameters τ
D = Differential(t)
@named fol_separate = ODESystem([ RHS ~ (1 - x)/τ,
D(x) ~ RHS ])
tspan = (0.0, 10.0)
u0 = [x => 0.0]
p = [τ => 3.0]
prob = ODEProblem(structural_simplify(fol_separate), u0, tspan, p)
τs = range(0.1,10,length = 10)
For an EnsembleProblem I create a function to modify the problem with remake
function prob_func(prob,i,repeat)
remake(prob, p = [τs[i]])
end
And then specify and solve the EnsembleProblem
ens_prob = EnsembleProblem(prob, prob_func = prob_func)
sim = solve(ens_prob, Tsit5(), EnsembleThreads(), trajectories = size(τs)[1])
This is fine for smaller problems, but for systems with more parameters I first have to check the order with parameters(fol_separate) and then manually type it out in the correct order in prob_func. This is rather cumbersome and prone to errors for systems with more parameters.
Is there some more convenient method to assign the changed parameters for remake?
E.g. something like remake(prob, p = [τ => 0.1]); which I know doesn’t work because p can’t be a vector{Pair}.
Summarizing:
I’m looking for a way to remake an ODEProblem created with an ODESystem where in remake I can specify which parameter to change, instead of typing out the p = [...] array