4

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

谢谢你。

4

3 回答 3

3

你没有说什么语言 - 但看看实时生成(泊松?)随机变量

于 2011-02-28T23:10:12.453 回答
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;
}

此链接提供了有关如何执行此操作的大量信息以及 如何为泊松过程生成随机时序中的示例

请注意,还有其他概率分布函数可用于事件生成(均匀、三角形等)。其中许多可以通过来自 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....
}
于 2013-08-14T16:59:40.770 回答
3

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)]

感谢这个链接

于 2015-02-05T15:29:04.097 回答