私は現在、乱数ジェネレーター ( gslまたはboost ) を使用している C/C++ プロジェクトに取り組んでいます。アイデア全体は、シードを受け取って結果を返す非自明な確率プロセスに単純化できます。プロセスのさまざまな実現の平均を計算しています。
したがって、シードは重要です。プロセスは異なるシードを使用する必要があります。そうしないと、平均に偏りが生じます。
これまでのところ、私はtime(NULL)
種を与えるために使用しています。ただし、2 つのプロセスが同じ秒に開始された場合、シードは同じです。これは、( openMPを使用して)並列化を使用しているために発生します。
だから、私の質問は: 独立したシードを与える C/C++ で「シード ギバー」を実装する方法は?
たとえば、私はスレッド番号 ( thread_num
)を使用していますseed = time(NULL)*thread_num
。ただし、これはシードが相関していることを意味します。シードは相互に倍数です。それは「疑似ランダム」に問題を引き起こしますか、それともシーケンシャルシードと同じくらい良いですか?
要件は、Mac OS (私の pc) と OS Cent (クラスター) に似た Linux ディストリビューションの両方で動作する必要があることです (そして、独立した実現を自然に提供します)。