java - 如何生成具有泊松分布的离散随机事件?

标签 java events simulation poisson

我知道 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/

相关文章:

r - 如何使用 R 中每列的不同值转换数据集的均值和标准差

java - 我们是否应该通过 Android 平台中的接口(interface)来引用对象

java - Android edittext 带有像cardview一样的阴影

javascript - Javascript 函数数组或函数包装/嵌套更适合手动/直接 "event"订阅吗?

java - 单击按钮时无法重新绘制圆圈

c++ - 这会导致事件驱动编程中的竞争条件吗?

java - 在整个应用程序中引用在一个类中创建的静态对象

java - 使用拦截器的 CXF 的 ws-security

c# - 为什么我们不能用访问器引发事件?

java - 我从哪里开始编写/使用 3D 物理模拟引擎?