1

この質問はプログラミングと数学の半分であるため、StackOverflowがこの質問をするのに適切な場所かどうかはわかりません。また、私の質問がばかげている場合は本当に申し訳ありません^ _ ^

「モンテカルロ法」の本でモンテカルロシミュレーションについて勉強しています。私が最初に学ばなければならないことの1つは、乱数ジェネレーターについてです。RNGの基本的なアルゴリズムは次のとおり
です。1。初期化:S上の分布µからシードS0を描画します。t= 1に設定します
。2。遷移:St = f(St-1)に設定します。
3.出力:Ut = g(St)に設定します。
4.繰り返します。t=t+ 1に設定し、ステップ2に戻り

ます(µは状態Sの有限集合の確率分布であり、入力はS0であり、出力Utに必要な乱数です)

理解するのは難しいことではありませんが、ここでの問題は、繰り返しの数にあるランダムな要因が見当たらないことです。RNGのループをいつ停止するかをどのように決定できますか?RNGを実装する私が読んだすべての例は、100回のループであり、特定のシードに対して同じ値を返します。まったくランダムではありません>_<

誰かが私がここで欠けているものを説明できますか?どんな助けでもありがたいです。みんな、ありがとう

4

2 に答える 2

2

専用のハードウェアがなければ、コンピューター上で真の乱数シーケンスを取得することはできません。(このような特殊なハードウェアは、物理学を使用してサイコロを最初に振るのと同等のランダム性を提供します。電子的なハードウェアは、一定の温度で特殊なダイオードの電子ノイズを使用することが多く、他のハードウェアは放射性崩壊イベントを使用します。)

その特殊なハードウェアがなければ、生成できるのは疑似乱数です。これは、観察したように、同じ初期シードに対して常に同じ数列を生成します。単純なアプリケーションの場合、呼び出し時から初期シードを生成することで回避できることがよくあります。これは事実上ランダムです。

そして、私が「単純なアプリケーション」と言うとき、私は暗号化を除外しています。 (それだけでなく、特にそれ。)

于 2012-04-09T05:47:57.337 に答える
1

シミュレーションをデバッグしようとしているときに、実際には「乱数」の再現可能なストリームが必要な場合があるため、特定のシードで開始するストリームを具体的に送信する場合があります。

たとえば、回答では、各プロットに異なる注釈を付けたggplot2でfacet_wrapプロットを作成すると、 rcsは、Rコードを使用して再現可能なデータセットを作成することで回答を開始します。

set.seed(1)
df <- data.frame(x=rnorm(300), y=rnorm(300), cl=gl(3,100))   # create test data

実際の質問に答える方法を示す前に。

于 2012-05-10T05:42:49.053 に答える