Kann ein Zufallszahlengenerator bei identischen Samen jemals eine andere Ausgabe erzeugen?

10

Der Titel fasst es zusammen. Ich bin interessiert zu wissen, ob es einen Algorithmus gibt, der bei identischer Eingabe eine variable Ausgabe erzeugen kann, ohne sich auf andere Zufallsquellen wie DateTime.Now oder eine von einem Lichtsensor usw. erzeugte Zahl zu verlassen. Außerdem kann der Algorithmus nicht ausgeführt werden nacheinander nur zwei unterschiedliche, nicht verwandte Läufe, die unterschiedliche Ausgaben erzeugen.

ConditionRacer
quelle
Sie sprechen von einem Pseudozufallszahlengenerator, um genau zu sein.
Marcel
Die meisten Sprachen bieten die Möglichkeit, einen Zufallszahlengenerator zu instanziieren, ohne den Startwert angeben zu müssen, sodass der Startwert ebenfalls "zufällig" ist. Es gibt einen Grund, warum Samen verwendet werden.
Neil
1
@Neil: In diesen Fällen gibt es immer noch einen Startwert, es ist nur implizit, normalerweise die Systemzeit.
Michael Borgwardt
@ MichaelBorgwardt, ich habe einfach gesagt, dass der Samen auch zufällig sein würde. Natürlich ist nichts wirklich zufällig, aber normalerweise liefert die Systemzeit einen anständigen Startwert, solange Sie einen Zufallszahlengenerator nicht oft instanziieren, ohne einen Startwert zu übergeben. In diesem Fall erhalten Sie möglicherweise denselben Startwert "zufällig" zweimal.
Neil
Es gibt ein interessantes Forschungsgebiet für ungenaue Hardware, das eine statistisch genau definierte Ungenauigkeit aufweist. Der potenzielle Vorteil ist ein geringerer Stromverbrauch. Nur eine Berechnung 2.0 + 2.0auf einem solchen System würde nicht zu identischen Ergebnissen führen. Es braucht keine andere Quelle der Zufälligkeit.
MSalters

Antworten:

15

Ich bin interessiert zu wissen, ob es einen Algorithmus gibt, der in der Lage ist, bei identischer Eingabe eine variable Ausgabe zu erzeugen, ohne sich auf andere Zufallsquellen wie DateTime.Now oder eine von einem Lichtsensor usw. erzeugte Zahl zu verlassen.

Nein, das ist grundsätzlich unmöglich, da die Definition eines Algorithmus darin besteht, dass er gut definiert und deterministisch ist, dh bei gleicher Eingabe immer dieselbe Ausgabe erzeugt. Es gibt randomisierte Algorithmen, die jedoch Zufälligkeit als Eingabe erfordern.

Darüber hinaus ist Determinismus das wichtigste Entwurfsziel von Computerhardware. Eine CPU, die bei gleichem Eingang nicht den gleichen Ausgang erzeugt, wäre für die meisten Zwecke völlig nutzlos.

Michael Borgwardt
quelle
14

Nein, ein Algorithmus zur Erzeugung von Pseudozufallszahlen erzeugt bei gleichem Startwert immer dieselbe Ausgabe (daher Pseudozufallszahlen ).

Ich finde es interessant, dass Sie den Begriff "Algorithmus" anstelle von "Programm" verwendet haben. Dies schließt eine bestimmte Klasse von Ja-Antworten aus (weiche Fehler im RAM, unterschiedliche Thread-Interleavings in einem Multithread-RNG usw.). Wenn Sie davon ausgehen, dass jeder Lauf Ihres Algorithmus bei jeder Iteration dieselbe Eingabe ohne Zufälligkeit enthält, wird bei jedem Lauf dieselbe Ausgabe generiert.

Davon abgesehen sind selbst grundlegende Dinge wie die CPU-Temperatur unvorhersehbar genug, um als Entropiequelle zu fungieren, wenn sie angemessen normalisiert werden. Denken Sie also nicht, dass dies impliziert, dass ein "kryptografisch sicherer" Zufallszahlengenerator vorhergesagt werden kann, wenn Sie wissen, wann er ausgeführt wurde. Viele von ihnen verwenden systemgenerierte Entropie-Feeds.

Brian
quelle
Algorithmus war das richtige Wort :) Ich versuche speziell, externe Entropiequellen, Speicherfehler, Thread-Reihenfolge, unvorhersehbare Eingaben wie eine Lichtquelle usw. zu beseitigen. Ich denke, meine Frage ergibt sich aus meinem Unverständnis für zufällige Algorithmen und vielleicht auch Ich hätte die Frage allgemeiner machen können. Ich frage mich wirklich, ob es möglich ist, eine Funktion zu erstellen, die bei identischer Eingabe (einschließlich aller Entropiequellen) unterschiedliche Ergebnisse zurückgibt. Scheint, als ob die Antwort nein ist
ConditionRacer
7

Wussten Sie, dass die Leute sehr hart arbeiten, um sicherzustellen, dass bei gleichem Startwert jedes Mal dieselbe Folge von Zufallszahlen erzeugt wird? Dies ist eine wünschenswerte Eigenschaft für Dinge wie die Monte-Carlo-Simulation, da dies bedeutet, dass die Ergebnisse vollständig reproduzierbar sind. Wenn Sie den Startwert nicht angeben, wird so etwas wie die Zeit verwendet, aber diese genaue Reproduzierbarkeit ist wirklich erwünscht.

Die einzigen RNGs, bei denen dies wirklich unerwünscht ist, sind diejenigen, die für die Kryptographie verwendet werden, und diejenigen, die dies normalerweise erreichen, indem sie die eigene Zufallszahlenquelle des Betriebssystems verwenden (die unter normalen Umständen nicht zurückgespult werden kann und möglicherweise ausgefallene Hardware verwendet), um ihren Startwert bereitzustellen.

Donal Fellows
quelle
Ja, ich verstehe, was du sagst. Ich versuche nicht, etwas Neues umzusetzen, das war nur eine nächtliche Neugier.
ConditionRacer
1

Ich nehme an, wenn Sie den Algorithmus auf verschiedenen Hardwareplattformen implementiert haben und Techniken wie das Entnehmen der mittleren N Bits aus einer Ganzzahl verwendet haben, könnten Sie möglicherweise unterschiedliche Antworten erhalten, wenn die Ganzzahlcodierung unterschiedlich wäre (Big / Little / Mid-Endian). Es kann auch vorkommen, dass auf Computern mit FPUs Probleme auftreten, die auf Computern mit FPUs nicht auftreten, wenn Sie Gleitkommazahlen bearbeiten. Wahrscheinlich kein Problem auf Computern der Desktop-Klasse, könnte aber ein Problem auf Telefonen sein.

TMN
quelle