概要: プログラムが起動されるたびにシードが異なるように、RNG をシードする簡単な自己完結型の方法が必要です。
詳細:
結果に関する良い統計を得るために、同じプログラム (モンテカルロ シミュレーションなどの乱数を使った計算を行うプログラム) を何度も実行する必要があることがよくあります。この場合、乱数ジェネレーターが実行ごとに異なるシードを持つことが重要です。
プログラム自体に含めることができる、これに対する単純なクロスプラットフォームのソリューションが必要です。(つまり、異なるシード パラメータを使用してプログラムの各インスタンスを起動するスクリプトを作成するという面倒な作業を常に行う必要はありません。)
time(0)
タイマーの分解能が悪いため、シードとして使用することは良い解決策ではないことに注意してください。複数のプロセスが並行して起動される場合、それらは から同じシードを取得する可能性がありtime(0)
ます。
要件:
- できるだけシンプルに
- クロス プラットフォーム (現在、Windows と Linux、x86 と x64 のみで動作する必要があります)。
- 自己完結型: プログラムを起動する特別な方法に依存するべきではありません (起動スクリプトからパラメータとしてシードを渡すのは面倒です)。
- すべてを小さなライブラリにラップして、最小限の労力で新しいプロジェクトに含めることができ、次のようなことをしたいと思います
SeedMyRNG(getSeed());
編集:
os.urandom()
私の主な質問は、C (または C++) でこれを行うことについてでしたが、Python ソリューションとして見つけた回答で提供されたポインターに基づいています(これは私にとっても役立ちます)。