1

我刚刚安装了 PySB 并试图让它工作。我运行附带下载文档的示例,但它不起作用。

import pysb as psb
from pysb.integrate import odesolve as psb
from pylab import linspace, plot, xlabel, ylabel, show:   

psb.Model()

# Declare the monomers
psb.Monomer('L', ['s'])
psb.Monomer('R', ['s'])

# Declare the parameters
psb.Parameter('L_0', 100)
psb.Parameter('R_0', 200)
psb.Parameter('kf', 1e-3)
psb.Parameter('kr', 1e-3)

# Declare the initial conditions
psb.Initial(L(s=None), L_0)
psb.Initial(R(s=None), R_0)

# Declare the binding rule
psb.Rule('L_binds_R', L(s=None) + R(s=None) <> L(s=1) % R(s=1), kf, kr)

# Observe the complex
psb.Observable('LR', L(s=1) % R(s=1))

if __name__ == '__main__':
    print __doc__
    # Simulate the model through 40 seconds
    time = linspace(0, 40, 100)
    print "Simulating..."
    x = psb.odesolve(model, time)
    # Plot the trajectory of LR
    plot(time, x['LR'])
    xlabel('Time (seconds)')
    ylabel('Amount of LR')
    show()

我遇到的第一个错误是psb.odesolve()

AttributeError: 'function' object has no attribute 'Model'

你能建议吗?谢谢

我尝试了 pysb.org 的代码,但出现错误:

Traceback (most recent call last):
  File "C:\Users\Ruda\Desktop\t2.py", line 33, in <module>
    x = odesolve(model, time)
  File "C:\Python27\lib\site-packages\pysb\integrate.py", line 298, in odesolve
    solver = Solver(model, tspan, integrator, **integrator_options)
  File "C:\Python27\lib\site-packages\pysb\integrate.py", line 86, in __init__
    pysb.bng.generate_equations(model)
  File "C:\Python27\lib\site-packages\pysb\bng.py", line 261, in generate_equations
    lines = iter(generate_network(model).split('\n'))
  File "C:\Python27\lib\site-packages\pysb\bng.py", line 220, in generate_network
    bng_file = open(bng_filename, 'w')
IOError: [Errno 22] invalid mode ('w') or filename: '<interactive>_5136_5952_temp.bngl'
4

3 回答 3

1

PySB 开发人员在这里。

问题如下:

import pysb as psb
from pysb.integrate import odesolve as psb
psb.Model()

您已将 pysb 导入为“psb”,但随后您将函数 odesolve也导入为 psb。因此,当您调用 psb.Model() 时,它会尝试在函数 odesolve 上调用类构造函数“Model”。这就是为什么它给出错误“'function' object has no attribute 'Model'”的原因。

为了这个例子,我建议只做

from pysb import *
from pysb.integrate import odesolve

并删除组件构造函数前面的 psb 限定符。

另外,我建议通过发送电子邮件至 pysb@librelist.org 注册 pysb 邮件列表!我们可以在那里及时回复您的问题。如果您有任何其他问题,请告诉我们。

最好的,

约翰·巴赫曼

于 2013-08-11T20:47:04.710 回答
1

与http://pysb.org/上的示例相比,您似乎有轻微的语法错误和不同的导入。此外,PySB 文档说您必须这样做:

from pysb import *
Model()

初始化事物,然后该构造显然会model在模块的名称空间中创建一个变量。我建议完全按原样复制 pysb 样本,并在开始调整之前验证它是否正常工作。

于 2013-07-26T17:18:01.947 回答
0

另一个 PySB 开发人员在这里。John Bachman 是对的——在您的原始代码中,您的第一个导入import pysb as psb被第二个导入所掩盖,from pysb.integrate import odesolve as psb. 只需删除as psb第二行中的 并将psb.odesolve下面更改为odesolve. 第三行末尾还有一个多余的冒号,需要删除。我解决了这些问题,代码运行良好。

关于您使用 pysb.org 主页中的示例代码时遇到的错误,您似乎已将代码粘贴到交互式 python 会话中。不幸的是,在这种情况下运行 odesolve() 存在错误。尝试将示例代码保存到 .py 文件并从命令行运行它。该错误将在下一个 PySB 版本中修复。

于 2014-01-07T21:07:21.523 回答