この質問は主に実用的なソフトウェアエンジニアリングの問題に関連していますが、理論家がより多くの洞察を提供できるかどうか聞いてみたいです。
簡単に言えば、擬似乱数ジェネレーターを使用するモンテカルロシミュレーションがあり、同じシミュレーションを並列で実行する1000台のコンピューターがあるように並列化したいと思います。したがって、擬似乱数の1000個の独立したストリームが必要です。
次のプロパティを持つ1000個の並列ストリームを使用できますか?ここで、は、あらゆる種類の素晴らしい理論的および経験的特性を備えた、非常によく知られ、広く研究されているPRNGである必要があります。
ストリームは、私は単純に使用した場合になるだろうどのように良いと証明可能ですしてによって生成されたストリーム分割 1000個のストリームにします。
ストリーム内の次の番号の生成は、て次の番号を生成するのと(ほぼ)同じくらい高速です。
別の言い方をすれば、複数の独立したストリームを「無料で」取得できますか?
もちろん、常にを使用し、常に999個の数字を破棄して1を選択した場合、確かにプロパティ1が得られますが、実行時間で1000倍になります。
単純なアイデアは、シード1、2、...、1000 で 1000コピーを使用することです。これは確かに高速になりますが、ストリームに良好な統計特性があるかどうかは明らかではありません。
グーグルでいくつか調べた後、たとえば次のことがわかりました。
メルセンヌツイスターは最近人気のあるPRNGのようで、複数のストリームを並行して生成できるバリアントへの参照をいくつか見つけました。
しかし、これはすべて私自身の研究領域からは程遠いため、実際に最先端のものがどれであるか、どの構造が理論上だけでなく実際にもうまく機能するかを理解できませんでした。
いくつかの明確化:暗号化プロパティは一切必要ありません。これは科学計算用です。数十億の乱数が必要になるので、周期がジェネレーターはすべて忘れてしまいます。
編集:私は真のRNGを使用できません。確定的なPRNGが必要です。第一に、それはデバッグに大いに役立ち、すべてを繰り返し可能にします。第二に、マルチパスモデルを使用できるという事実を利用することで、たとえば中央値検出を非常に効率的に行うことができます(この質問を参照)。
編集2:密接に関連する質問@ StackOverflowがあります:クラスタ環境用の擬似乱数ジェネレータ。