7

ポアソン待機時間をシミュレートする必要があります。到着数をシミュレートする例をたくさん見つけましたが、平均待機時間を考えると、1回の到着の待機時間をシミュレートする必要があります。

私はこのようなコードを見つけ続けます:

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

地震、または画面に表示される稲妻や生き物をシミュレートする場合、通常の方法は、平均到着率λのポアソン分布を想定することです。

より簡単な方法は、到着間のシミュレーションを行うことです。

ポアソン分布では、時間が経過するにつれて到着する可能性が高くなります。これは、その確率密度関数の累積分布に対応します。ポアソン分布確率変数の期待値はλに等しく、分散も等しくなります。最も簡単な方法は、t = -ln(U)/λを与える指数形式(e)^-λtを持つ累積分布を「サンプリング」することです。均一な乱数Uを選択し、数式をプラグインして、次のイベントまでに経過する時間を取得します。残念ながら、Uは通常[0,1 [に属しているため、ログで問題が発生する可能性があります。したがって、t = -ln(1-U)/λを使用することで、Uを回避する方が簡単です。

サンプルコードは以下のリンクにあります。

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

于 2013-03-09T05:09:48.427 に答える