シミュレーションにブーストmt19937実装を使用しています。
シミュレーションは再現可能である必要があります。つまり、後でRNGシードを保存して再利用する可能性があります。シードの外部ソースが必要であり、ランダム性の特定の保証のためではないため、Windows暗号化APIを使用してシード値を生成しています。シミュレーション実行の出力には、RNGシードを含むメモが含まれるため、シードは適度に短くする必要があります。一方、シミュレーションの分析の一環として、いくつかの実行を比較しますが、これらの実行が実際に異なることを確認するには、異なるシードを使用する必要があるため、シードは十分に長くする必要があります偶発的な衝突を避けるため。
64ビットのシードで十分であると判断しました。衝突の可能性は、約2 ^ 32回の実行後に50%に達します。その確率は十分に低いため、それによって引き起こされる平均誤差は私には無視できます。32ビットのシードを使用するのは難しいです。衝突の可能性は、2 ^ 16の実行後にすでに50%に達します。それは私の好みには少しありそうです。
残念ながら、ブーストの実装は、完全な状態ベクトル(遠い、長すぎる)をシードするか、単一の32ビットのunsignedlongをシードします。これは理想的ではありません。
32ビット以上で完全な状態ベクトル未満のジェネレーターをシードするにはどうすればよいですか?ベクトルをパディングするか、シードを繰り返して状態ベクトルを埋めようとしましたが、結果をざっと見ただけでも、結果が良くないことがわかります。