我知道 Knuth 用于生成随机泊松分布数的算法(下文在 Java 中),但我如何将其转化为随时间随机调用方法 generateEvent()
?
int poissonRandomNumber(int lambda) {
double L = Math.exp(-lambda);
int k = 0;
double p = 1;
do {
k = k + 1;
double u = Math.random();
p = p * u;
} while (p > L);
return k - 1;
}
最佳答案
如果您希望模拟事件间到达时间,则需要指数分布。
看看Pseudorandom Number Generator - Exponential Distribution
您的代码将如下所示:
// Note L == 1 / lambda
public double poissonRandomInterarrivalDelay(double L) {
return (Math.log(1.0-Math.random())/-L;
}
...
while (true){
// Note -- lambda is 5 seconds, convert to milleseconds
long interval= (long)poissonRandomInterarrivalDelay(5.0*1000.0);
try {
Thread.sleep(interval);
fireEvent();
}
关于java - 如何生成具有泊松分布的离散随机事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2206199/