如何模拟泊松到达?

时间:2011-02-28 23:05:31

标签: poisson

我想生成以“t”秒“到达”的事件作为平均到达间延迟?从时间0开始,如何生成事件发生的时间?基本上,我想在事件发生时生成诸如t1,t2,t3等的时间序列。我该如何编写这样的函数?

谢谢。

3 个答案:

答案 0 :(得分:3)

最简单的解决方案是计算下一个事件的时间 关于“L”到达间延迟。这是基于累积的 指数的分布函数:F(x)= 1 - e **( - lambda * x) 其中lambda是1 / L,平均时间,x是时间量。

这可以用x求解,并用均匀的随机数进行输出:

x = -ln(1-U)/ lambda其中U是随机值0..1。

从链接1

#include <math.h> 
#include <stdlib.h>

float nextTime(float rateParameter) {
  return -logf(1.0f - (float) random() / (RAND_MAX + 1)) / rateParameter;
}

此链接提供了有关如何执行此操作以及示例的大量信息 How to Generate Random Timings for a Poisson Process

请注意,还可以使用其他概率分布函数 用于事件生成(统一,三角形等)。其中许多都可以 由Boost的代码或使用GNU Scientific Library(GSL)生成。

所以要计算事件的时间:     next_event = time()+ nextTime(D);     following_event = next_event + nextTime(D);

如果事件有持续时间,则持续时间可以是另一个,独立的 泊松分布,随机分布,固定间隔等。但是, 将需要检查下一个事件的间隔是否不短 比你正在模拟的事件的持续时间:

deltaT = nextTime(MEAN_EVT);
dur    = nextTime(MEAN_DUR);
if (deltaT <= dur) {
  // either fix duration or get another event....
}

答案 1 :(得分:2)

你没说什么语言 - 但看看Generate (Poisson?) random variable in real-time

答案 2 :(得分:2)

Python包含random.expovariate,这在Python中非常容易。例如,创建10个样本:

import random
random.expovariate(0.2) for i in range(10)]

通常,这将转换为整数:

import random
[int(random.expovariate(0.2)) for i in range(10)]

感谢this link