在PySB库中的run_ssa工作示例?

时间:2014-03-04 11:06:13

标签: python ode pysb

我使用“Hello world”ODE仿真模型从Python PySB库中尝试run_ssa(用相应的分子数替换浓度并将确定性速率转换为随机等价物)。

这是使用odesolve方法获得的轨迹:

[(301.0, 180.0, 0.0, 0.0)
 (269.7114893451928, 148.71148934519294, 31.288510654807023, 31.288510654807023)
 (246.1336243593057, 125.13362435930587, 54.866375640694116, 54.866375640694116)
 (227.7848590843455, 106.78485908434567, 73.21514091565433, 73.21514091565433)
 (213.1444366774497, 92.1444366774498, 87.8555633225502, 87.8555633225502)...

看起来很合理。

这就是run_ssa返回的内容:

[(0.0, 0.0) (0.4, 27.0) (0.8, 54.0) (1.2, 73.0) (1.6, 81.0) (2.0, 98.0)
 (2.4, 116.0) (2.8, 124.0) (3.2, 129.0) (3.6, 135.0) (4.0, 137.0)
 (4.4, 141.0) (4.8, 144.0) (5.2, 145.0) (5.6, 146.0) (6.0, 149.0)
 (6.4, 153.0) (6.8, 157.0) (7.2, 159.0) (7.6, 160.0) (8.0, 162.0)
 (8.4, 162.0) (8.8, 165.0) (9.2, 164.0) (9.6, 166.0) (10.0, 167.0)
 (10.4, 168.0) (10.8, 171.0) (11.2, 172.0) (11.6, 172.0) (12.0, 174.0)
 (12.4, 175.0) (12.8, 176.0) (13.2, 176.0) (13.6, 176.0) (14.0, 176.0)
 (14.4, 177.0) (14.8, 177.0) (15.2, 177.0) (15.6, 177.0) (16.0, 177.0)
 (16.4, 177.0) (16.8, 177.0) (17.2, 177.0) (17.6, 177.0) (18.0, 177.0)
 (18.4, 177.0) (18.8, 177.0) (19.2, 177.0) (19.6, 178.0) (20.0, 178.0)
 (20.4, 178.0) (20.8, 178.0) (21.2, 178.0) (21.6, 178.0) (22.0, 178.0)
 (22.4, 178.0) (22.8, 179.0) (23.2, 179.0) (23.6, 179.0) (24.0, 180.0)
 (24.4, 180.0) (24.8, 180.0) (25.2, 180.0) (25.6, 180.0) (26.0, 180.0)
 (26.4, 180.0) (26.8, 180.0) (27.2, 180.0) (27.6, 180.0) (28.0, 180.0)
 (28.4, 180.0) (28.8, 180.0) (29.2, 180.0) (29.6, 180.0) (30.0, 179.0)
 (30.4, 179.0) (30.8, 179.0) (31.2, 179.0) (31.6, 179.0) (32.0, 179.0)
 (32.4, 179.0) (32.8, 179.0) (33.2, 179.0) (33.6, 179.0) (34.0, 179.0)
 (34.4, 179.0) (34.8, 179.0) (35.2, 180.0) (35.6, 180.0) (36.0, 180.0)
 (36.4, 180.0) (36.8, 180.0) (37.2, 180.0) (37.6, 180.0) (38.0, 180.0)
 (38.4, 180.0) (38.8, 180.0) (39.2, 180.0) (39.6, 180.0) (40.0, 180.0)]

看起来不是将初始条件作为起点,而是使用其中一个作为限制因素?而第一个阵列看起来就像是我的时间...... 根据描述,它应该像ODE模拟一样返回轨迹......

通过它看起来odesolve calles python库来解决ODE但run_ssa调用BioNetGen建模语言。

我试图直接使用BioNetGen实现Michaelis-Menten动力学的确定性和随机模型,它们看起来很好。

所以,问题是:有没有人让它工作?任何使用它的工作示例?

这样做的目的是测试库,我只需要知道是否可以使它工作,如果有人设法这样做。

2 个答案:

答案 0 :(得分:0)

PySB作者/开发人员。

看来我们的错误(我刚读完这篇SO文章后发现)没有记录run_ssa函数的返回类型。这将得到纠正。正如AliceNCL所提到的,run_ssa返回的输出是从BNG .gdat文件中解析回来的。然而,返回的轨迹是随机:.gdat文件包含在模型中定义的唯一Observable的轨迹:LR' LR',配体 - 受体复合物。另一方面,.cdat文件包含模型中定义的所有物种的轨迹,简单地编号为1,2,3。因此,如目前实施的,如果有特定物种,您希望获得SSA轨迹,你会为它添加一个observable。

另一方面,odesolve功能返回所有物种的重新排列(索引为' _ s0',' _s1',&# 39; __ s2') AND 命名的observable' LR'。因此,有四个条目,最后两个是相同的:配体 - 受体复合物为"物种2"并且作为命名的可观察的" LR"。

如果您(或其他任何人)在使用该库时遇到任何其他问题,请通过电子邮件发送PySB邮件列表(请参阅pysb.org上的链接)或在GitHub上发布问题告诉我们!我们只是偶尔检查Stack Overflow。

无论如何,这是一个有效的例子:

from pysb import *
from pysb.examples.hello_pysb import model
from pylab import *
from pysb import bng
from pysb.integrate import odesolve

ion()
t_end = 100

# BNG SSA simulation
ssa_sim = bng.run_ssa(model, t_end=t_end, n_steps=1000)
figure()
plot(ssa_sim['time'], ssa_sim['LR'], color='r')

# ODE simulation
t = linspace(0, t_end)
ode_sim = odesolve(model, t)
plot(t, ode_sim['LR'], color='g')

产生以下内容:http://imgur.com/xDNQDIL

答案 1 :(得分:0)

谢谢,我确实意识到它到底究竟做了什么,并设法制作了一些有用的例子。但它花了一些挖掘代码和BNG文档:)。问题在于,文档示例中的odesolve实际上返回了大量的轨迹,并且您在绘制时选择了所需的轨迹,而不仅仅是可观察的轨迹,这让我感到困惑。 当然,增加这个工作实例和对文档的一些更多解释肯定会对研究有很大的帮助! 除此之外,它是一个优秀而有用的库