8

time はシード空間のサイズを効果的に縮小するため、乱数生成のシードとして安全ではないことを理解しています。

しかし、私はセキュリティを気にしないと言います。たとえば、カード ゲームのモンテカルロ シミュレーションを行っているとします。ただし、可能な限り真のランダム性に近づけることに気を配っています。シードとしての時間は出力のランダム性に影響しますか? この場合、PRNG の選択はシードよりも重要だと思います。

4

4 に答える 4

5

セキュリティ上の理由から、明らかに高エントロピー シードが必要です。そして、時間だけではそれを提供することはできません。

シミュレーションの目的では、シードが一意である限り、シードの品質はあまり重要ではありません。ご指摘のとおり、ここでは PRNG の品質がより重要です。
ゲーム内の PRNG でさえ、安全である必要がある場合があります。たとえば、マルチプレイヤー ゲームでは、プレイヤーは PRNG の内部状態を見つけ出し、それを使用して将来のランダム イベントを予測したり、対戦相手のカードを推測したり、より良い戦利品を獲得したりできます...

時間を使用して PRNG をシードする一般的な落とし穴の 1 つは、時間が頻繁に変更されないことです。たとえば、Windows では、ほとんどの時間関連の関数は、数ミリ秒ごとに戻り値を変更するだけです。したがって、その間隔内で作成されたすべての PRNG は、同じシーケンスを返します。

于 2011-07-12T19:56:56.267 に答える
4

完全を期すために、松本らによるこの論文。初期化スキーム (つまり、シードの選択方法) がシミュレーションにとっていかに重要かをよく示しています。RNG アルゴリズム自体は原理的にはかなり優れていますが、不適切な初期化スキームは結果を大きく偏らせる可能性があることが判明しました。

于 2011-07-16T18:12:32.200 に答える
2

プログラムのインスタンスを 1 つだけ実行している場合は、それほど多くの問題は発生しないはずです。

しかし、同時に複数のプログラムを開始し、時間の経過とともに各プログラムがシードされる人を見てきました。その場合、すべてのプログラムが乱数の同じシーケンスを取得します。特に、乱数をセッション ID として使用するために呼び出しごとに apache プロセスをシードしている人々を見てきましたが、異なる人々が同時に Web サーバーにアクセスしていることがわかりました。時間はまったく同じ ID を取得します。

したがって、プログラムの複数のバージョンを同時に実行することを期待している場合、時間を使用することは非常に悪い考えです。

于 2011-07-12T19:57:31.263 に答える
1

あなたのプログラムは非常に高速に実行され、非常に短い間隔で、優れたシーケンスでシードとして使用するシステムの時間を要求すると考えてください。答えと同じ時間を得ることができるので、同じ乱数を生成することになります。したがって、シミュレーションでも、低エントロピーが問題になる可能性があります。

システムにエントロピーの他のソースを持つことはそれほど難しくないことを考えると、オペレーティング システムでさえほとんど乱数を提供できるので、それらを使用して時間ベースのシードのエントロピーを増やすことができます。

于 2011-07-12T20:03:45.320 に答える