Catalyst.jl
Catalyst.jl 是一个用于化学反应网络及相关动力系统分析与高性能仿真的符号建模包。模型可以使用直观的领域特定语言(DSL)进行指定,或以编程方式构建。Catalyst 支持 ODE、稳态 ODE、SDE、随机化学动力学(跳跃)以及混合仿真,包括将反应与微分方程、事件和外部噪声(通过布朗运动和/或泊松过程)耦合的模型。
基于 ModelingToolkitBase.jl 和 Symbolics.jl,Catalyst 利用符号计算进行稀疏性利用、雅可比矩阵构建、依赖图分析和并行化。生成的模型与更广泛的 Julia 和 SciML 生态系统集成,用于敏感性分析、参数估计、分岔分析等。
安装
Catalyst 可以按以下方式安装。
using Pkg
# (optional but recommended) create new environment in which to install Catalyst
Pkg.activate("catalyst_environment")
# install latest Catalyst release
Pkg.add("Catalyst")
v16 的新特性
版本 16 是一个破坏性版本。 大多数破坏性更改主要影响基于 Catalyst 构建的库。请参阅 HISTORY.md 以获取完整的破坏性更改列表和迁移指南。
Highlights:
- ModelingToolkitBase 基础 — 在不减少核心功能的情况下,Catalyst 现在依赖于 ModelingToolkitBase 而非 ModelingToolkit,以避免添加新的非 MIT 许可的依赖项。
- 兼容 ModelingToolkit - Catalyst 仍然兼容 ModelingToolkit,供希望利用更强大但非 MIT 许可的结构简化库(例如用于 Catalyst 生成的 DAE 模型)的用户使用。
- 混合模型 — 新的
HybridProblem和hybrid_model允许通过每个反应的PhysicalScale元数据,在单个系统中混合 ODE、SDE 和 Jump 反应。 - 简化的 jump API — 直接使用
JumpProblem(rs, u0, tspan, ps)创建 jump 问题,无需DiscreteProblem或JumpInputs中间步骤。 - 新的 DSL 选项 —
@brownians和@poissonians用于耦合环境噪声,@discretes用于事件修改的参数,@tstops用于求解器时间停止,以及=>语法用于事件影响。 - 现代化的转换 API —
ode_model、sde_model、jump_model和ss_ode_model取代了旧的convert(ODESystem, rs)模式,并且都生成 ModelingToolkitBaseSystem。 - 单位验证 —
@unit_checksDSL 选项和validate_units/assert_valid_units函数,通过 DynamicQuantities.jl 符号单位完全支持非 SI 单位。
教程和文档
使用 Catalyst 的最新教程和信息可在 稳定版文档 中获取。开发版文档 描述了当前 master 分支中未发布的特性。
该包的概述、功能以及对比基准测试(截至版本 13)也可在其对应的研究论文中找到,Catalyst: Fast and flexible modeling of reaction networks.
功能
- 反应网络 DSL — 一种使用化学反应符号指定模型的可读、简洁格式。
- 多种模拟类型 — 从单个
ReactionSystem生成并模拟 ODE、稳态 ODE、SDE、跳跃和混合模型。 - 耦合模型 — 将反应与微分方程、事件、布朗噪声(
@brownians)和泊松跳跃(@poissonians)相结合。 - 网络分析 — 计算连接类、缺陷、可逆性及其他网络属性。
- 组合建模 — 使用
@network_component、compose和extend分层构建模型。 - 空间建模 — 在离散空间域上模拟反应网络。
- 稳态分析 — 寻找并分析稳态、稳定性及分岔图。
- 逆问题 — 参数估计、敏感性分析和结构可辨识性。
- 模型 I/O — 从 SBML 和 BioNetGen
.net文件导入,导出为 LaTeX 及其他格式。 - 可视化 — 反应网络图和 LaTeX 渲染。
快速示例
米氏酶动力学的确定性 ODE 模拟
这里我们展示一个简单的示例,其中使用 Catalyst DSL 创建模型,然后将其作为 常微分方程进行模拟。
# Fetch required packages.
using Catalyst, OrdinaryDiffEq, Plots
# Create model.
model = @reaction_network begin
kB, S + E --> SE
kD, SE --> S + E
kP, SE --> P + E
end
# Create an ODE that can be simulated.
u0 = [:S => 50.0, :E => 10.0, :SE => 0.0, :P => 0.0]
tspan = (0., 200.)
ps = [:kB => 0.01, :kD => 0.1, :kP => 0.1]
ode = ODEProblem(model, u0, tspan, ps)
# Simulate ODE and plot results.
sol = solve(ode)
plot(sol; lw = 5)
随机跳跃模拟
相同的模型可以作为其他类型模拟的输入。例如,这里我们 改为生成并模拟反应网络的随机化学动力学跳跃过程模型。 使用自动选择的随机模拟算法(SSA)对跳跃过程进行精确采样 (对于当前示例中的小型网络,最终采用的是 Gillespie 直接法):
# The initial conditions are now integers as we track exact populations for each species.
using JumpProcesses
u0_integers = [:S => 50, :E => 10, :SE => 0, :P => 0]
jprob = JumpProblem(model, u0_integers, tspan, ps)
jump_sol = solve(jprob)
plot(jump_sol; lw = 2)
带有耦合方程、事件和环境噪声的 SDE 模拟
本示例展示了 Catalyst 的多个功能组合在一起。我们建模
一个体积($V$)与磷酸化生长因子
($G^P$)成正比增长的细胞,并通过 @brownians
DSL 选项添加环境随机性($\sigma,dW$)。$G$ 的磷酸化
($G \to G^P$)由周期性阳光信号 $k_p(\sin(t)+1)$ 驱动,当体积
达到临界阈值 $V_m$ 时发生细胞分裂:
using Catalyst
cell_model = @reaction_network begin
@parameters Vₘ g σ
@brownians W
@equations begin
D(V) ~ g*Gᴾ + σ*W
end
@continuous_events begin
[V ~ Vₘ] => [V => V/2]
end
kₚ*(sin(t)+1)/V, G --> Gᴾ
kᵢ/V, Gᴾ --> G
end
我们现在将系统作为化学朗之万动力学 SDE 模型进行研究:
u0 = [:V => 25.0, :G => 50.0, :Gᴾ => 0.0]
tspan = (0.0, 20.0)
ps = [:Vₘ => 50.0, :g => 0.3, :kₚ => 100.0, :kᵢ => 60.0, :σ => 0.5]
sprob = SDEProblem(cell_model, u0, tspan, ps)
该问题编码了以下随机微分方程模型:
\begin{align*}
dG(t) &= - \left( \frac{k_p(\sin(t)+1)}{V(t)} G(t) + \frac{k_i}{V(t)} G^P(t) \right) dt - \sqrt{\frac{k_p (\sin(t)+1)}{V(t)} G(t)} \, dW_1(t) + \sqrt{\frac{k_i}{V(t)} G^P(t)} \, dW_2(t) \\
dG^P(t) &= \left( \frac{k_p(\sin(t)+1)}{V(t)} G(t) - \frac{k_i}{V(t)} G^P(t) \right) dt + \sqrt{\frac{k_p (\sin(t)+1)}{V(t)} G(t)} \, dW_1(t) - \sqrt{\frac{k_i}{V(t)} G^P(t)} \, dW_2(t) \\
dV(t) &= \left(g \, G^P(t)\right) dt + \sigma \, dW(t)
\end{align*}
其中 $dW_1(t)$ 和 $dW_2(t)$ 是来自反应的化学朗之万方程噪声项,而 $dW(t)$ 是代表环境随机性的独立布朗运动。最后,我们可以模拟并绘制结果:
using StochasticDiffEq, Plots
sol = solve(sprob, EM(); dt = 0.05)
plot(sol; xguide = "Time (au)", lw = 2)
此处使用的一些功能:
- 耦合微分方程 在反应网络的同时对细胞体积进行了建模。
- 事件 在体积达到阈值时触发了细胞分裂。
@brownians向体积方程中添加了环境噪声。- 为 SDE 模拟选择了特定的 求解器和求解器选项。
- 模拟结果 使用 Plots.jl 绘制。
生态系统
Catalyst 与广泛的 Julia 软件包集成:
| 类别 | 软件包 |
|---|---|
| ODE/SDE/Jump 求解 | OrdinaryDiffEq, StochasticDiffEq, JumpProcesses |
| GPU 并行 | DiffEqGPU |
| 稳态与分岔 | HomotopyContinuation, SteadyStateDiffEq, NonlinearSolve, BifurcationKit |
| 参数估计 | Optimization, PEtab, Turing |
| 敏感性与可辨识性 | GlobalSensitivity, SciMLSensitivity, StructuralIdentifiability |
| 动力系统 | DynamicalSystems |
| 可视化 | Plots, Makie, GraphMakie, Latexify |
| 模型导入 | SBMLImporter, SBMLToolkit, ReactionNetworkImporters |
| 随机扩展 | MomentClosure, FiniteStateProjection, DelaySSAToolkit |
获取帮助或参与贡献
Catalyst 开发者活跃于 Julia Discourse 以及 Julia Slack 的 #sciml-bridged 和 #sciml-sysbio 频道。 对于错误或功能请求,请 提交 issue。
支持与引用 Catalyst.jl
本生态系统中的软件是作为学术研究的一部分开发的。如果您愿意帮助 支持它,请为仓库添加星标,因为这些指标可能有助于我们未来获得资助。如果 您在研究、教学或其他活动中使用了 Catalyst,我们将不胜感激您 能够引用我们的工作:
@article{CatalystPLOSCompBio2023,
doi = {10.1371/journal.pcbi.1011530},
author = {Loman, Torkel E. AND Ma, Yingbo AND Ilin, Vasily AND Gowda, Shashi AND Korsbo, Niklas AND Yewale, Nikhil AND Rackauckas, Chris AND Isaacson, Samuel A.},
journal = {PLOS Computational Biology},
publisher = {Public Library of Science},
title = {Catalyst: Fast and flexible modeling of reaction networks},
year = {2023},
month = {10},
volume = {19},
url = {https://doi.org/10.1371/journal.pcbi.1011530},
pages = {1-19},
number = {10},
}