タグ付けされた質問 「random-number-generation」

4
FortunaまたはMersenne Twisterは、アルゴリズムRNGとして望ましいですか?
最近の回答では、モンテカルロシミュレーションをシードするためにFortunaまたはMersenne Twister Random Number Generators(RNG)を使用することに言及しました。フォーチュナのことを聞いたことがなかったので調べてみたところ、主に暗号化の使用を目的としているようです。 現在、実動コードでMersenne Twisterを使用してK-Meansアルゴリズムをシードしています。 「FortunaまたはMersenne Twister」は、「アルゴリズムシード」​​アプリケーション(モンテカルロとK-Meansのシードなど)に最適と見なされますか?または、それは「投げる」-つまり最も便利なものを使用します。 私が座っているところから、「最高」は最高品質の乱数を提供し、迅速に動作し、(おそらく)メモリのフットプリントが小さいはずです。これらのうち、おそらく品質は私たちのほとんどにとって最も重要です。

1
擬似乱数ジェネレータの周期をどのように決定できますか?
線形合同擬似乱数ジェネレーター(PRNG)を使用しているとします。シード、乗算係数(a)、シフト係数(c)およびモジュラス係数(m)が与えられた場合、PRNGの期間をどのように決定できますか?実験/パターン検出アルゴリズムによって決定しますか、またはその期間を計算するための直接的な式はありますか? x0x0x_0 私の質問は特に線形合同法に関するものですが、他のPRNGについても実際に期間がどのように計算されるかについて詳しく知りたいと思います。

1
シーケンスが指定されている場合、疑似乱数ジェネレータの初期値をどのように決定できますか?
乱数列が線形合同生成器によって生成されることを知っていたとします。あれは、 バツn + 1= (Xん+ c )mod mバツん+1=(aバツん+c)モッドメートルx_{n+1}=(aX_n+c) \bmod m 期間全体(または少なくともその連続する大きなサブシーケンス)が与えられた場合、このシーケンスを生成したパラメーターa、c、ma 、c 、ma、c、メートルa,c,mおよびバツ0バツ0x_0をどのように再構築できますか?疑似乱数ジェネレータがわかっている場合に、初期パラメータを決定できる一般的な方法を探しています。

3
モンテカルロのための並列メルセンヌツイスター
最近、モンテカルロ法を行うほとんどすべての研究者が間違っていると主張するコメントに出くわしました。Mersenne TwisterなどのPRNGのインスタンスごとに異なるシードを選択するだけでは、悪い衝突が発生する可能性があるため、公平な結果を保証するには不十分であるとさらに説明しました。メルセンヌツイスター上のWikipediaの記事を裏付けるようです: 複数のパラメーター値のセットを選択する方法はありますが、シード値のみが異なる(他のパラメーターは異なる)複数のMersenne Twisterインスタンスは、独立した乱数ジェネレーターを必要とするモンテカルロシミュレーションには一般的に適していません。 私は認めなければならない、私は起訴されたように有罪です。しかし、これまでに見てきた他のすべての並列モンテカルロライブラリの実装、特にALPSも同様です。 ウィキペディアの記事では、救済策を提供する2つの論文も参照しています。 動的な作成(DC)制度(1998)は、対応する固有多項式が互いに素であれば、彼らは独立しているという仮説に基づいて、MTのためのパラメータセットを選びます。 控えのためにジャンプ -linearのRNGF2F2\mathbb F_2(2008)。LCGのリープフロッグ法に似ていると思います。 どちらの方法も、メルセンヌツイスターアルゴリズムの原作者である松本と西村によって共同開発されました。 私は、数論や代数についてあまり知識がなく、上記のスキームやメルセンヌツイスターの背後にある数学を完全には理解していません。私の質問は主に実用的な性質のものです: そのようなスキームを採用していない場合、実際に(少なくとも私のコミュニティでは)誰もそれを気にしない場合、シミュレーションにバイアスを導入することについて本当に心配する必要がありますか? これらの対策の1つを実装した場合、Jump-Aheadは確固たる理論に基づいており、より近代的な方法であるため、Jump-Aheadの方が適していると思いますか?

4
使用する低差異シーケンスをどのようにして知ることができますか?
立方体または最適化に準モンテカルロ法を使用するときはいつでも、ファンデルコープ、ハルトン、ハンマースリー、フォーレ、ニーダーライター、ソボルの名前に関連して、さまざまな低不一致シーケンスから選択できるようです。覚えていない他の名前。計算に最も適切な低不一致シーケンスを選択する方法に関する優れた経験則はありますか?

1
WELL疑似乱数生成
私はMT19937テストハーネスで使用して、一様に(符号なし)32ビット[0、2322322^{32}-1]値は、元の作者のmt19937.c実装に基づいており、統計的にランダムなビットオクテットストリームの(本質的に無尽蔵)供給を生成します。これは、これらの特定のテストに必要ではないCSPRNGの代わりです。しかし、私は最近WELLPRNGを検討しています-統計的性質自体(どちらも私のニーズに十分すぎるように思われる)のためではありませんが、より効率的な実装を提案しているようです。 私は学術論文の数学的背景が足りませんが、少なくとも前者の「ねじれ」行列と焼戻し変換に従うことができました。ただし、WELL-n関数の作成者が提供するコードの多くは、いくつかの魔法の浮動小数点定数(例:)を使用して、浮動小数点生成に焦点を当てているようです2.32830643653869628906e-10。WELLコードからステップを省略して、32ビットの均一な配布を提供できますか?または、アルゴリズムは特に浮動小数点分布用に設計/バイアスされていますか? またはWELL、要件を満たしながら、「バルク」uint32ベクトル生成のパフォーマンス向上をもたらすと考えるのは間違っていますか?

3
Cythonからの乱数生成
cythonを使用してPythonプログラムを高速にしたいのですが、内部ループがまだ乱数ジェネレーターへのPython呼び出しを遅くしています!数年前、この同じ問題が賢人サポートの誰かによって提起され、その時点で良い解決策はないようでした。ランダムなサンプルの長いリストを事前に生成するのは便利ではありません。以前のサンプルを条件とする方法でさまざまな分布から実際にサンプリングしているからです。 これが、cythonからgslに接続することによってこれがどのように回避されたかを説明するブログ投稿です:http ://pyinsci.blogspot.com/2010/12/efficient-mcmc-in-python-errata-and.html そして、誰かがgsl kludgeを実装しようとしているstackoverflowの投稿:https://stackoverflow.com/questions/8177446/random-number-generators-to-work-on-x86-64

4
最大周期の並列線形合同擬似乱数ジェネレータをシードするにはどうすればよいですか?
通常、Cで順次乱数ジェネレータをシードするときは、次の呼び出しを使用します srand(time(NULL)) 次に使用します rand() mod N 0とN-1の間のランダムな整数を取得します。ただし、これを並行して実行すると、time(NULL)の呼び出しが互いに非常に近いため、最終的にはまったく同じ数になります。 私は線形合同乱数ジェネレーターを使ってみました: xn+1:=axn+c(modm)xn+1:=axn+c(modm)x_{n+1} := a x_n + c\;\;\; (\bmod m) a,c,a,c,a,c,mmm 私が選択することを知っている、いくつかの大きな整数のためにモジュラス演算子が桁を切り捨てることによって計算することができるので、迅速な結果を生成します。しかし、周期の大きいランダムなシーケンスを並列に生成するシードを確立するのは難しいと思います。次の場合、期間の長さが最大であることを知っています m=2km=2km=2^kkkk cとmは互いに素である a-1はmのすべての素因数で割り切れる mが4の倍数の場合、a-1も4の倍数でなければなりません。 (ソース:ウィキペディア) しかし、どのようにすればすべての乱数ストリームにこの最大の特性があることを確認できますか?MPIに関して、rankおよびを組み込んでsize線形合同法を使用して最大周期を生成するにはどうすればよいですか?ラグのあるフィボナッチまたはメルセンヌツイスターを使用して、より長い並列ランダムストリームを生成する方が簡単でしょうか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.