python - 模拟多个泊松过程

标签 python math

我有 N 个进程,每个进程都有不同的泊松率。我想模拟所有 N 个进程的到达时间。如果 N =1 我可以做到这一点

t = 0
N = 1
for i in range(1,10):
   t+= random.expovariate(15)
   print N, t

但是,如果我有 N = 5 和一个费率列表

rates =  [10,1,15,4,2]

我想以某种方式让循环以正确的顺序输出所有 N 个进程的到达时间。也就是说,我仍然希望每行只有两个数字(进程 ID 和到达时间),但按到达时间全局排序。

我可以制作 N 个列表然后合并它们,但我希望首先以正确的顺序输出到达时间。

更新。一个问题是,如果您只是从每个流程中抽取固定数量的到达样本,您只能从高速率流程中获得早期时间。所以我认为我需要从每个过程的固定时间间隔进行采样,因此样本数量会根据速率而变化。

最佳答案

如果我没理解错的话:

import random
import itertools

def arrivalGenerator(rate):
    t = 0
    while True:
        t += random.expovariate(rate)
        yield t

rates = [10, 1, 15, 4, 2]
t = [(i, 0) for i in range(0, len(rates))]
arrivals = []
for i in range(len(rates)):
    t = 0
    generator = arrivalGenerator(rates[i])
    arrivals += [(i, arrival) \
                 for arrival in itertools.takewhile(lambda t: t < 100, generator)]


sorted_arrivals = sorted(arrivals, key=lambda x: x[1])
for arrival in sorted_arrivals:
    print arrival[0], arrival[1]

请注意,您的初始逻辑是为每个流程生成固定数量的到达。您真正想要的是一个特定的时间窗口,并为给定的进程持续生成,直到您超过该时间窗口。

关于python - 模拟多个泊松过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17491448/

相关文章:

c# - 获得围绕给定值的随机偏差

sql - 计算不同组合的查询

python - 如何将图像移动到不同的目录?

python - pyqt 如何从 QDateTimeEdit 获取 python 时间戳

python - django csrf token 在每个请求上都必须是唯一的吗?

objective-c - objective-c/cocoa-touch 中有哪些对数函数/方法?

c# - 我怎样才能找到圆的两点之间的角度?

python - 我可以为此使用 python ast 模块吗?

python - 创建新页面时只有 'Title' 菜单。安装鹡鸰

python - 在 C 中除以大(多)数(得到一个零,当我知道它不为零时)