乱数発生器は、同じシードが与えられても、異なる出力を生成できますか?


10

タイトルはそれを要約します。DateTime.Nowや、光センサーなどから生成された数値など、他のソースのランダム性に依存せずに、同じ入力が与えられた場合に可変出力を生成できるアルゴリズムが存在するかどうかを知りたい。さらに、アルゴリズムを実行できない順番に、異なる出力を生成する2つの異なる無関係な実行。


あなたが話しているのは、具体的には、疑似乱数ジェネレータです。
マルセル

ほとんどの言語では、シードを「ランダム」にするためにシードを指定する必要なく、乱数ジェネレータをインスタンス化する可能性があります。種を使うのには理由があります。
2013

1
@ニール:これらの場合、まだシードがあります。それは暗黙的なもので、通常はシステム時間です。
Michael Borgwardt 2013

@MichaelBorgwardt、私は単純にシードもランダムになると言っただけです。もちろん、真にランダムなものはありませんが、通常、シードを渡さずに乱数ジェネレータをインスタンス化しない限り、システム時間は適切なシードを提供します。この場合、同じシードの「ランダム」シードを2回取得することがあります。
2013

統計的に明確に定義された不正確さを持つ、不正確なハードウェアに関する興味深い研究領域があります。潜在的な利点は、消費電力が少ないことです。2.0 + 2.0このようなシステムで計算するだけでは、同じ結果は得られません。それはランダム性の別のソースを必要としません。
MSalters 2013

回答:


15

DateTime.Nowや光センサーなどから生成された数値などのランダム性を他のソースに依存せずに、同一の入力を指定して可変出力を生成できるアルゴリズムが存在するかどうか知りたいです。

いいえ、それは根本的に不可能です。なぜなら、アルゴリズムの定義自体は、アルゴリズムが明確で決定論的であることです。つまり、同じ入力を与えると、常に同じ出力が生成されます。ランダム化されたアルゴリズムがありますが、入力としてランダム性が必要です。

さらに、決定論はコンピューターハードウェアの最も重要な設計目標です。同じ入力が与えられた場合に同じ出力を生成しないCPUは、ほとんどの目的でまったく役に立ちません。


14

いいえ、疑似乱数生成アルゴリズムは、同じシードを指定すると常に同じ出力を生成します(したがって、疑似乱数)。

「プログラム」ではなく「アルゴリズム」という言葉を使ったのは面白いと思います。これには、特定のクラスのイエスの回答(RAMのソフトエラー、マルチスレッドRNGでの異なるスレッドインターリーブなど)は含まれません。アルゴリズムのすべての実行で、各反復で同じ入力がランダム性なしに十分に指定されていると仮定すると、実行ごとに同じ出力が生成されます。

そうは言っても、CPU温度のような基本的なものでさえも、それらが適切に正規化されていれば、エントロピーソースとして機能するほど予測不可能です。したがって、これが実行された時刻がわかっている場合は、「暗号的に安全な」乱数ジェネレータが予測できることを意味しているとは考えないでください。それらの多くは、システムで生成されたエントロピーフィードを利用しています。


アルゴリズムは正しい言葉でした:)私は特に、エントロピー、メモリ障害、スレッドの順序、光源などの予測不可能な入力などの外部ソースを排除しようとしています。私の質問は、ランダムアルゴリズムの理解の欠如に起因していると思います。私は質問をより一般的にすることができたでしょう。同じ入力(エントロピーのすべてのソースを含む)を指定して、異なる結果を返す関数を作成できるかどうか、本当に疑問に思っています。答えはノーのようです
ConditionRacer

7

同じ種が与えられたときに、同じ乱数列が毎回生成されることを保証するために人々が一生懸命働いていることをご存知ですか?これは、結果が完全に再現可能であることを意味するため、モンテカルロシミュレーションなどの場合に望ましい特性です。シードを指定しない場合、時間などが使用されますが、その正確な再現性が本当に必要です。

これが本当に望ましくない唯一のRNGは暗号化に使用されるものであり、それらは通常、オペレーティングシステムの独自の乱数ソース(通常の状況では巻き戻せず、ファンシーハードウェアを使用する可能性があります)を使用してシードを提供することでこれを実現します。


はい、あなたの言っていることが理解できます。私は何も新しく実装しようとはしていません。これは深夜の好奇心でした。
ConditionRacer

1

アルゴリズムをさまざまなハードウェアプラットフォームに実装し、整数から中央のNビットを取得するなどの手法を使用した場合、整数のエンコーディングが異なる(ビッグ/リトル/ミッドエンディアン)と、異なる答えが得られると考えられます。また、浮動小数点数を操作している場合とは異なり、FPUが搭載されたマシンで実行すると問題が発生する可能性があります。おそらくデスクトップクラスのマシンでは問題ではありませんが、電話では問題になる可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.