Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于在python中使用Gillespie算法的问题_Python_Numpy_Scipy - Fatal编程技术网

关于在python中使用Gillespie算法的问题

关于在python中使用Gillespie算法的问题,python,numpy,scipy,Python,Numpy,Scipy,我正在处理一个考虑两个事件(W,m)的问题,并尝试使用Gillespie计算从W到m的时间衰减。这是问题的图示 我用以下代码解决了这个问题: RMW=1 RWM=0.35 t=[] 对于范围(010000)内的i: 如果(i%2)=0:#W存在 tM=0 dt=指数rvs(RWM,尺寸=1) tM+=dt 其他: tW=0 dt=指数rvs(RMW,尺寸=1) tW+=dt t、 附加(dt) 现在我转到一个更复杂的问题,其中有三个事件(W,M1和M2)。费率也不同,如RWM1=0.35和R

我正在处理一个考虑两个事件(
W
m
)的问题,并尝试使用Gillespie计算从
W
m
的时间衰减。这是问题的图示

我用以下代码解决了这个问题:

RMW=1
RWM=0.35
t=[]
对于范围(010000)内的i:
如果(i%2)=0:#W存在
tM=0
dt=指数rvs(RWM,尺寸=1)
tM+=dt
其他:
tW=0
dt=指数rvs(RMW,尺寸=1)
tW+=dt
t、 附加(dt)
现在我转到一个更复杂的问题,其中有三个事件(
W
M1
M2
)。费率也不同,如
RWM1=0.35
RWM2=0.1
。这是图示


现在我无法理解从哪里开始。如果有人能根据前面的代码给我一些建议来解决这类问题,那将非常有帮助。

如果
dt
的值应该像您所说的那样加起来,这可能解决您的问题吗

RMW=1
RWM=0.35
t=[]
对于范围(010000)内的i:
如果(i%2)=0:#W存在
tM=0
dt=指数rvs(WM1,尺寸=1)
dt+=指数rvs(WM1_M2M1,尺寸=1)
tM+=dt
其他:
tW=0
dt=指数rvs(M2M,尺寸=1)
dt+=指数rvs(M2M_M2M1,尺寸=1)
tW+=dt
t、 附加(dt)

对于
M2W
-->
M2M1
WM1
-->
M2M1
,dt的值是否应该相加?是的,对于M2W-->M2M1和WM1-->M2M1,dt的值相加谢谢。如果这些值不相加。我的方法是什么?这取决于事件之间的相互联系。在本例中,路径的数量只有两个(尽管是两步过程),就像您最初没有多少工作要做的代码一样。您是否有任何具体问题或其他要求?谢谢您的回答。是的,我有不同的条件。这是当dt的值与M2W->M2M1和WM1->M2M不相加时的一种情况。速率RWM1=0.20(WM1->M2M1)和RWM2=0.1(M2W->M2M1),与速率(RWM1=0.35,WW-->WM1和RWM2=0.05,对于WW-->WM2)值不同。此外,是否有方法在代码中添加W、M1和M2之间的“耦合值”。因此,基于该值,反应WM1-->M2M1和M2W-->M2M1的速率将发生变化。您好,很抱歉我的回复太晚。我认为基于状态机的方法将是解决您的问题的非常优雅的解决方案。请看一看如何控制事件转换,以及如何使用回调控制事件转换期间执行的方法。