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