SciML / Catalyst.jl

Chemical reaction network and systems biology interface for scientific machine learning (SciML). High performance, GPU-parallelized, and O(1) solvers in open source software.
https://docs.sciml.ai/Catalyst/stable/
Other
455 stars 75 forks source link

events, constant and boundary condition species for SDEs and Jumps #414

Open isaacsas opened 2 years ago

isaacsas commented 2 years ago

We've had several requests in the past for constant species, and my general advice was if one wanted A to be constant don't write A --> B but write A --> A + B or 0 --> B with rate k*A. The problem with the first is that A is treated as a variable internally. SBML includes an explicit "constant" tag for species, so this is something commonly used in models. Along those lines we could

  1. Have a way of marking A in a DSL reaction as a constant species. The Antimony DSL would have one write $A --> B to indicate it is constant. If we had something like that in the DSL we could then move it to being a parameter before actually generating the corresponding Reaction.
  2. Use the metadata system to indicate a variable is constant. Not making it a parameter internally though would mean a lot of the current codebase would have to have special cases added to handle a constant state appropriately. So I think just modifying the DSL to allow tagging a species as constant would make more sense.
isaacsas commented 2 years ago

I guess where this would get tricky is something like 2A + B --> C with A constant and a rate k. Should this be rewritten to B --> C with rate k*A^2/2 or k*A*(A-1)/2, or something else. This would be dependent on whether the reaction is being interpreted deterministically or stochastically.

Using metadata to tag it as constant would let us keep A around as a species until model conversion, when we could resolve this, but as I mentioned above would complicate some stuff (like network analysis).

isaacsas commented 2 years ago

Also need to consider boundary condition species (which do not get ODEs from reactions, but may have constraint equations or events).

isaacsas commented 2 years ago

Closed by https://github.com/SciML/Catalyst.jl/pull/514

isaacsas commented 2 years ago

Reopening as I realized this won't work beyond ODESystems and NonlinearSystems until if/when events and/or constraints can be supported with SDESystems and/or JumpSystems.

Needed components in MT:

As these are added in MT we can add support for this in Catalyst.