Fig 7.25

model of quorum sensing mechanism of Vibrio fischeri

using OrdinaryDiffEq
using SteadyStateDiffEq
using ComponentArrays
using SimpleUnPack
using Plots
Plots.default(linewidth=2)
hil(x, k) = x / (k + x)
hil(x, k, n) = hil(x^n, k^n)
function model725!(D, u, p, t; feedback=true)
    @unpack k0, k1, k2, n, a, b, a0, KM, RT, diff, popsize = p
    @unpack A, I, Rstar, Aout = u
    R0 = RT - 2Rstar
    v0 = k0 * ifelse(feedback, I, 15.0)
    v1 = k1*A^2 * R0^2
    v2 = k2 * Rstar
    va = n * (A - Aout)
    D.A = v0 - 2v1 + 2v2 - va
    D.I = a0 + a * hil(Rstar, KM) - b * I
    D.Rstar = v1 - v2
    D.Aout =  popsize * va - diff * Aout
    nothing
end

function model725_nofeed!(D, u, p, t)
    model725!(D, u, p, t; feedback=false)
end
model725_nofeed! (generic function with 1 method)
ps725 = ComponentArray(
    k1=0.5, # /muM^3 /min
    k2=0.02, # /min
    b=0.07, # /min
    KM=0.01, # muM
    a=10, # muM/min
    diff=1000,
    popsize=1000,
    RT=0.5,
    k0=0.0008,
    n=0.6,
    a0=0.05
)

ics725 = ComponentArray(
    A=0.0,
    I=0.0,
    Rstar=0.0,
    Aout=0.0,
)

prob725 = SteadyStateProblem(model725!, ics725, ps725)
prob725_nofeed = SteadyStateProblem(model725_nofeed!, ics725, ps725)
npops = 1:5000
trajectories = length(npops)
alg = DynamicSS(KenCarp47())
prob_func = (prob, i, repeat) -> remake(prob, p=ComponentArray(ps725; popsize=npops[i]))

eprob = EnsembleProblem(prob725; prob_func)
eprob_nofeed = EnsembleProblem(prob725_nofeed; prob_func)
EnsembleProblem with problem SteadyStateProblem
@time sim = solve(eprob, alg; trajectories);
@time sim_nofeed = solve(eprob_nofeed, alg; trajectories);
 16.594765 seconds (75.74 M allocations: 3.267 GiB, 5.78% gc time, 122.45% compilation time)
  6.270481 seconds (33.60 M allocations: 1.505 GiB, 4.52% gc time, 91.12% compilation time)
luxI = map(s->s.u.I, sim)
luxI_nofeed = map(s->s.u.I, sim_nofeed)
plot(npops, [luxI, luxI_nofeed], label=["Original model" "Without Feedback"], xlabel="Population Size", ylabel="LuxI Concentration (μM)", title="Fig. 7.25", legend=:bottomright)


This notebook was generated using Literate.jl.

Back to top