我想生成以“t”秒“到达”的事件作为平均到达间延迟?从时间 0 开始,如何生成事件发生的时间?基本上,我想在事件发生时生成时间序列,例如 t1、t2、t3、...。我该如何编写这样的函数?
谢谢你。
我想生成以“t”秒“到达”的事件作为平均到达间延迟?从时间 0 开始,如何生成事件发生的时间?基本上,我想在事件发生时生成时间序列,例如 t1、t2、t3、...。我该如何编写这样的函数?
谢谢你。
你没有说什么语言 - 但看看实时生成(泊松?)随机变量
最简单的解决方案是根据“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....
}
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)]
感谢这个链接。