6

私は C++11 内で利用可能な乱数ジェネレーターを使用しています。現時点では、一様分布を使用しています。これにより、指定した範囲 A と B 内の任意の数値を取得する確率が等しくなるはずです。

ただし、ポアソン分布の生成について混乱しています。ポアソン確率を決定する方法は理解していますが、ポアソン分布に基づいて乱数列を「分布」する方法がわかりません。

たとえば、ポアソン分布の C++11 コンストラクターは、分布の平均である 1 つの引数 (λ) を取ります。

std::tr1::poisson_distribution<double> poisson(7.0);
std::cout << poisson(eng) << std::endl;

ポアソン確率問題では、これは特定の間隔での成功数/発生数の期待値に等しくなります。ただし、この場合、それが何を表しているのかわかりません。乱数シナリオにおける「成功」/「発生」とは何ですか?

これを理解するのに役立つ支援や参考資料があれば感謝します。

4

1 に答える 1

3

ポアソン分布の確率は、特定の値が発生する確率です。ある地点を毎日何台の車が通過するかを計算したいとします。この値が高くなる日もあれば、低くなる日もあります。しかし、これをかなりの時間にわたって追跡すると、平均値が現れ始め、その近くの値がより頻繁に発生し、遠く離れた値 (1 日あたり 0 台または 10 倍の量) の可能性は低くなります。λ が出現したことを意味します。

これを RNG に反映すると、アルゴリズムは (一様に選択された) ランダムな日に通過した車の量を返します。ご想像のとおり、平均値 λ が出現する可能性が高く、極端な値が出現する可能性は最も低くなります。

次のリンクには、ポアソンの分布の例があり、取得した離散結果と、それぞれが発生する可能性が示されています。

http://www.mathworks.com/help/toolbox/stats/brn2ivz-127.html

サンプルの実装では、値ごとにそれが発生する確率を計算し、これらの値に基づいて範囲を計算して、一様分布をポアソンに変換できます。たとえば、λ == 2 の場合、0 の確率は 13%、1 の確率は 27%、2 の確率は 27% です。次に、0.0 から 1.0 の間の古き良き一様乱数​​を生成します。この数値が <= 0.13 の場合は 0 を返します。<= 0.40 の場合は 1 を返します。<= 0.67 の場合は 2 を返します。

于 2012-02-22T09:31:40.313 に答える