模拟泊松等待时间

时间:2011-06-29 21:15:20

标签: java poisson

我需要模拟泊松等待时间。我发现了许多模拟到达次数的例子,但我需要模拟一次到达的等待时间,给定平均等待时间。

我一直在寻找这样的代码:

public int getPoisson(double lambda) 
{   
    double L = Math.exp(-lambda);   
    double p = 1.0;   
    int k = 0;   

    do 
    {    
        k++;     
        p *= rand.nextDouble(); 
        p *= Math.random(); 
    } while (p > L);   

    return k - 1; 
} 

但这是到达人数,而不是到达时间。

效率优于准确度,更多是因为功耗比时间。我正在使用的语言是Java,如果算法只使用Random类中可用的方法,那将是最好的,但这不是必需的。

2 个答案:

答案 0 :(得分:6)

到达之间的时间是指数分布,您可以使用以下公式生成随机变量X~exp(lambda)

-ln(U)/lambda` (where U~Uniform[0,1]). 

有关generating exponential variable的更多信息。

请注意,到达之间的时间也与首次到达之间的时间相匹配,因为指数分布为memoryless

答案 1 :(得分:0)

如果你想模拟出现在屏幕上的地震或闪电或小动物,通常的方法是假设泊松分布的平均到达率为λ。

更容易做的是模拟到达间隔:

随着泊松分布,随着时间的推移,到达的可能性更大。它对应于该概率密度函数的累积分布。泊松分布随机变量的期望值等于λ,因此其方差也是如此。 最简单的方法是“采样”具有指数形式的累积分布(e)^ - λt,其给出t = -ln(U)/λ。您选择一个统一的随机数U并插入公式以获得在下一个事件之前应该通过的时间。 不幸的是,因为U通常属于[0,1 [可能导致日志问题,所以通过使用t = -ln(1-U)/λ更容易避免它。

示例代码可以在以下链接中找到。

https://stackoverflow.com/a/5615564/1650437