0

モンテカルロシミュレーションを書こうとしています。私のシミュレーションでは、離散確率分布から多くのランダムな変量を生成する必要があります。

私は分布の閉じた形の解を持っており、それは有限のサポートを持っています。ただし、これは標準の配布ではありません。均一[0,1)確率変数を描画し、それをCDFと比較して、分布から確率変数を取得できることを認識していますが、分布のパラメーターは常に変化しています。この方法の使用は遅すぎます。

ですから、私の質問には2つの部分があると思います。

  1. CDFを使用せずに有限の離散ランダム変量をすばやく生成する方法/アルゴリズムはありますか?

  2. すでにこの機能を備えているPythonモジュールやC++ライブラリはありますか?

4

3 に答える 3

0

Acceptance \ Rejection:常にpdfよりも高い関数を見つけます。2つのランダム変量を生成します。最初の値をスケーリングして値を計算し、2番目の値を使用して選択を受け入れるか拒否するかを決定します。すすぎ、値を受け入れるまで繰り返します。申し訳ありませんが、具体的には言えませんが、しばらくは行っていません。これは標準的なアルゴリズムですが、個人的に最初から実装するので、実装を認識していません。

于 2013-02-01T22:08:44.863 に答える
0

確かに、あなたがあなたのpdfを分析的に知っているならば、受け入れ/拒絶は行く方法です。それをf(x)と呼びましょう。cg(x)> f(x)のような定数cが存在し、pdf g(x)を使用して変数をシミュレートする方法を知っているようなpdf g(x)を見つけます-たとえば、作業中に有限のサポートを備えた分布では、ユニフォームは次のようになります。ドメイン全体でg(x)= 1 /(ドメインのサイズ)。

次に、Gがpdf g(x)でシミュレートされ、Uが[0、cg(G)]で均一になるように、カップル(G、U)を描画します。次に、U <f(G)の場合、変数としてUを受け入れます。それ以外の場合は、再度描画します。最終的に受け入れるUは、pdfとしてfを持ちます。

定数cがメソッドの効率を決定することに注意してください。cが小さいほど、最も効率的です。基本的に、適切な変数を取得するには、平均してcの図面が必要になります。関数gを十分に単純にする方がよいですが(gをpdfとして使用して変数を描画する必要があることを忘れないでください)、可能な限り最小のcになります。

于 2013-02-02T00:38:28.180 に答える
0

受け入れ拒否も非効率的である場合は、マルコフ連鎖MC法を試すこともできます。それぞれが前のサンプルに依存するサンプルのシーケンスを生成するため、それらのブロックをスキップすることで、多かれ少なかれ独立したセットを取得するサブサンプルを作成できます。必要なのはPDFだけ、またはその倍数だけです。通常、それらは固定された分布で機能しますが、ゆっくりと変化する分布に適応させることもできます。

于 2013-09-19T09:08:27.310 に答える