首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟泊松等待时间

模拟泊松等待时间
EN

Stack Overflow用户
提问于 2011-06-30 05:15:20
回答 2查看 6.5K关注 0票数 7

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

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

代码语言:javascript
复制
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类中提供的方法将是最好的,但这不是必需的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-30 05:23:37

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

代码语言:javascript
复制
-ln(U)/lambda` (where U~Uniform[0,1]). 

有关generating exponential variable的更多信息。

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

票数 6
EN

Stack Overflow用户

发布于 2013-03-09 13:09:48

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

更容易做的事情是模拟到达之间的距离:

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6527345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档