Examples
Birth-Death Model
This example models a linear birth-death process. The reaction network is easily defined using Catalyst.jl. Our truncated state space has length 50, which is enough for this simple system.
using FiniteStateProjection
using OrdinaryDiffEq
rn = @reaction_network begin
σ, 0 --> A
d, A --> 0
end
sys = FSPSystem(rn)
# Parameters for our system
ps = [ 10.0, 1.0 ]
# Initial distribution (over 1 species)
# Here we start with 0 copies of A
u0 = zeros(50)
u0[1] = 1.0
prob = ODEProblem(sys, u0, (0, 10.0), ps)
sol = solve(prob, Vern7())
Telegraph Model
Here we showcase the telegraph model, a simplistic description of mRNA transcription in biological cells. We have one gene that transitions stochastically between an on and an off state and produces mRNA molecules while it is in the on state.
The most straightforward description of this system includes three species: two gene states, G_on
and G_off
, and mRNA M
. The state space for this system is 3-dimensional. We know, however, that G_on
and G_off
never occur at the same time, indeed the conservation law [G_on] + [G_off] = 1
allows us to express the state of the system in terms of G_on
and M
only. The state space of this reduced system is 2-dimensional.If we use an mRNA cutoff of 100, the state space for the original model has size $2 \times 2 \times 100 = 400$, while the reduced state space has size $2 \times 100 = 200$, a two-fold saving. Since the FSP get computationally more expensive for each species in a system, eliminating redundant species as above is recommended for improved performance.
The class ReducingIndexHandler
, which performed such reduction on the fly, has been deprecated and will be moved into Catalyst.jl.
using FiniteStateProjection
using OrdinaryDiffEq
rn = @reaction_network begin
σ_on * (1 - G_on), 0 --> G_on
σ_off, G_on --> 0
ρ, G_on --> G_on + M
d, M --> 0
end
sys = FSPSystem(rn)
# Parameters for our system
ps = [ 0.25, 0.15, 15.0, 1.0 ]
# Initial distribution (over two species)
# Here we start with 0 copies of G_on and M
u0 = zeros(2, 50)
u0[1,1] = 1.0
prob = ODEProblem(sys, u0, (0, 10.0), ps)
sol = solve(prob, Vern7())