7

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

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

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 类中可用的方法,那将是最好的,但这不是必需的。

4

2 回答 2

6

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

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

有关生成指数变量的更多信息。

请注意,到达之间的时间也与第一次到达之前的时间相匹配,因为指数分布是无记忆的。

于 2011-06-29T21:23:37.130 回答
0

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

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

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

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

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

于 2013-03-09T05:09:48.427 回答