Ich habe eine gewöhnliche Google-Suche usw. versucht, aber die meisten Antworten, die ich finde, sind entweder mehrdeutig oder sprach- / bibliotheksspezifisch wie Python oder C ++ stdlib.h
usw. Ich suche eine sprachunabhängige, mathematische Antwort, nicht die Besonderheiten einer Bibliothek.
Zum Beispiel sagen viele, dass der Startwert ein Ausgangspunkt für einen Zufallszahlengenerator ist und derselbe Startwert immer die gleiche Zufallszahl erzeugt. Was heißt das? Bedeutet dies, dass die Ausgabezahl eine deterministische Funktion eines bestimmten Startwerts ist und die Zufälligkeit vom Wert des Startwerts abhängt? Aber wenn das der Fall ist, dann schaffen wir, die Programmierer, die Zufälligkeit, indem wir den Samen liefern, anstatt die Maschine das tun zu lassen?
Was bedeutet in diesem Zusammenhang auch ein Ausgangspunkt ? Ist dies eine nicht strenge Art und Weise, ein Element der Domäne einer Map ? Oder verstehe ich etwas falsch? f : X → Y
quelle
2^19937 − 1
. Der Startpunkt ist der Punkt dieser extrem langen Sequenz, an dem der Generator startet. Also ja, es ist deterministisch.Antworten:
Die meisten Pseudozufallszahlengeneratoren (PRNGs) basieren auf Algorithmen, die eine Art rekursives Verfahren verwenden, wobei von einem Basiswert ausgegangen wird, der durch eine Eingabe bestimmt wird, die als "Startwert" bezeichnet wird. Das Standard-PRNG in den meisten statistischen Programmen (R, Python, Stata usw.) ist der Mersenne-Twister-Algorithmus MT19937, der in Matsumoto und Nishimura (1998) beschrieben ist . Dies ist ein komplizierter Algorithmus. Lesen Sie daher am besten das Papier, wenn Sie wissen möchten, wie er im Detail funktioniert. In diesem speziellen Algorithmus gibt es eine Wiederholungsbeziehung vom Grad , und Ihr Eingabesamen ist eine Anfangsmenge von Vektoren . Der Algorithmus verwendet eine lineare Wiederholungsrelation, die Folgendes generiert:x 0 , x 1 , . . . , x n - 1n x0,x1,...,xn−1
Dabei sind und und Objekte, die im Algorithmus als Parameter angegeben werden können. Da der Startwert den anfänglichen Satz von Vektoren (und gegebene andere feste Parameter für den Algorithmus) angibt, ist die Reihe von Pseudozufallszahlen, die durch den Algorithmus erzeugt werden, fest. Wenn Sie den Startwert ändern, ändern Sie die Anfangsvektoren, wodurch die vom Algorithmus generierten Pseudozufallszahlen geändert werden. Dies ist natürlich die Funktion des Samens.1⩽m⩽n r A
Nun ist es wichtig anzumerken, dass dies nur ein Beispiel ist, das den MT19937-Algorithmus verwendet. Es gibt viele PRNGs, die in statistischer Software verwendet werden können, und sie beinhalten jeweils unterschiedliche rekursive Methoden, und daher bedeutet der Startwert in jedem von ihnen eine andere Sache (in technischen Begriffen).
R
In dieser Dokumentation finden Sie eine Bibliothek mit PRNGs , in der die verfügbaren Algorithmen und die Papiere aufgeführt sind, in denen diese Algorithmen beschrieben werden.Der Zweck des Startwerts besteht darin, dem Benutzer zu ermöglichen, den Pseudozufallszahlengenerator zu "sperren", um eine reproduzierbare Analyse zu ermöglichen. Einige Analysten möchten den Startwert mithilfe eines echten Zufallszahlengenerators (TRNG) festlegen, der Hardwareeingaben verwendet, um eine anfängliche Startwertnummer zu generieren, und diese dann als gesperrte Nummer melden. Wenn der Startwert vom ursprünglichen Benutzer festgelegt und gemeldet wird, kann ein Prüfer die Analyse wiederholen und die gleiche Folge von Pseudozufallszahlen wie der ursprüngliche Benutzer erhalten. Wenn der Startwert nicht festgelegt ist, verwendet der Algorithmus normalerweise eine Art Standardstartwert (z. B. von der Systemuhr), und es ist im Allgemeinen nicht möglich, die Randomisierung zu replizieren.
quelle
Erstens gibt es in den heutigen computergenerierten "Zufallszahlen" keine echte Zufälligkeit . Alle Pseudozufallsgeneratoren verwenden deterministische Methoden. (Möglicherweise werden Quantencomputer das ändern.)
Die schwierige Aufgabe besteht darin, Algorithmen zu entwickeln, die eine Ausgabe erzeugen, die nicht sinnvoll von Daten unterschieden werden kann, die aus einer wirklich zufälligen Quelle stammen.
Sie haben Recht, dass das Setzen eines Startwerts Sie an einem bestimmten bekannten Startpunkt in einer langen Liste von Pseudozufallszahlen startet. Für die in R, Python usw. implementierten Generatoren ist die Liste enorm lang. Ausreichend lang, dass nicht einmal das größte realisierbare Simulationsprojekt die 'Periode' des Generators überschreitet, sodass die Werte erneut durchlaufen werden.
Bei vielen gewöhnlichen Anwendungen setzen die Menschen keinen Samen. Dann wird automatisch ein unvorhersehbarer Startwert ausgewählt (z. B. aus den Mikrosekunden der Betriebssystemuhr). Pseudozufallsgeneratoren, die im allgemeinen Gebrauch sind, wurden Testbatterien unterzogen, die größtenteils aus Problemen bestehen, die sich mit früheren, unbefriedigenden Generatoren als schwierig zu simulieren erwiesen haben.
Normalerweise besteht die Ausgabe eines Generators aus Werten, die aus praktischen Gründen nicht von Zahlen zu unterscheiden sind, die wirklich zufällig aus der Gleichverteilung aufDann werden diese Pseudozufallszahlen so manipuliert, dass sie mit denen übereinstimmen, die zufällig von anderen Verteilungen wie Binomial, Poisson, Normal, Exponential usw. abgetastet werden.(0,1).
Ein Test eines Generators besteht darin, ob seine aufeinanderfolgenden Paare in 'Beobachtungen', die als simuliert werden, tatsächlich so aussehen, als würden sie das Einheitsquadrat zufällig ausfüllen. (Unten zweimal ausgeführt.) Das leicht marmorierte Aussehen ist das Ergebnis von inhärenten Schwankungen. Es wäre sehr verdächtig, ein Grundstück zu bekommen, das vollkommen gleichmäßig grau aussieht. [Bei einigen Auflösungen kann es zu einem regelmäßigen Moiré-Muster kommen. Bitte ändern Sie die Vergrößerung nach oben oder unten, um den falschen Effekt zu beseitigen, falls er auftritt.]Unif(0,1)
Es ist manchmal nützlich, einen Samen zu setzen. Einige solche Verwendungen sind wie folgt:
Beim Programmieren und Debuggen ist eine vorhersehbare Ausgabe von Vorteil. So viele Programmierer setzen eine
set.seed
Anweisung zu Beginn eines Programms, bis das Schreiben und Debuggen abgeschlossen ist.Beim Unterrichten über Simulation. Wenn ich den Schülern zeigen möchte, dass ich mit der
sample
Funktion in R Würfe eines fairen Würfels simulieren kann , könnte ich schummeln, viele Simulationen ausführen und die auswählen, die einem theoretischen Zielwert am nächsten kommt. Dies würde jedoch einen unrealistischen Eindruck davon vermitteln, wie die Simulation wirklich funktioniert.Wenn ich zu Beginn einen Startwert setze, wird die Simulation jedes Mal dasselbe Ergebnis erzielen. Die Schüler können ihre Kopie meines Programms Korrektur lesen, um sicherzustellen, dass die beabsichtigten Ergebnisse erzielt werden. Dann können sie ihre eigenen Simulationen ausführen, entweder mit ihren eigenen Samen oder indem sie das Programm einen eigenen Startplatz auswählen lassen.
Zum Beispiel ist die Wahrscheinlichkeit, die 10 zu bekommen, wenn zwei faire Würfel gewürfelt werden,Mit einer Million Experimente mit zwei Würfeln sollte ich eine Genauigkeit von zwei oder drei Stellen erreichen. Die 95% -Marge des Simulationsfehlers beträgt ungefähr
Beim Teilen statistischer Analysen, die Simulationen beinhalten. Heutzutage beinhalten viele statistische Analysen eine Simulation, zum Beispiel einen Permutationstest oder einen Gibbs-Sampler. Indem Sie den Ausgangswert anzeigen, können Personen, die die Analyse lesen, die Ergebnisse auf Wunsch genau replizieren.
Beim Schreiben von wissenschaftlichen Artikeln mit Randomisierung. Akademische Artikel durchlaufen in der Regel mehrere Peer-Review-Runden. Ein Plot kann beispielsweise zufällig gestörte Punkte verwenden, um ein Überplotten zu reduzieren. Wenn die Analysen als Reaktion auf Kritikerkommentare leicht geändert werden müssen, ist es gut, wenn sich ein bestimmtes, nicht zusammenhängendes Jitter zwischen den Review-Runden nicht ändert, was für besonders nervtötende Kritiker verwirrend sein könnte. Setzen Sie also einen Startwert vor dem Jitter.
quelle
TL; DR;
Mit einem Startwert können Sie normalerweise die Folge von Zufallszahlen reproduzieren. In diesem Sinne handelt es sich nicht um echte Zufallszahlen, sondern um "Pseudozufallszahlen", daher ein PNR-Generator (PNRG). Dies ist eine echte Hilfe im wirklichen Leben!
Ein bisschen mehr Detail:
Praktisch alle in Computersprachen implementierten "Zufalls" -Zahlengeneratoren sind Pseudozufallszahlengeneratoren. Dies liegt daran, dass sie bei gegebenem Startwert (===> Startwert) immer die gleiche Folge von Pseudozufallsergebnissen liefern. Ein guter Generator erzeugt eine Sequenz, die statistisch nicht von einer echten Zufallssequenz zu unterscheiden ist (einen echten Würfel, eine echte Münze usw. werfen).
In vielen Simulationsfällen möchten Sie eine echte "zufällige" Erfahrung machen. Sie möchten jedoch auch Ihre Ergebnisse reproduzieren können. Warum? Nun, zumindest die Aufsichtsbehörden interessieren sich für diese besondere Sache.
Es gibt viel zu erleben. Die Leute analysieren sogar die "besten" zufälligen Samen. Meiner Meinung nach macht dies ihr Modell ungültig, da sie nicht mit "echtem" Zufallsverhalten umgehen können - oder ihr PRNG ist nicht für ihre Implementierung geeignet. Meistens machen sie einfach nicht genug Simulationen - aber sie brauchen Zeit.
Stellen Sie sich nun ein "echtes" RNG vor. Man könnte dies basierend auf einer Art Zufall in der Maschine implementieren. Wenn Sie nur einen zufälligen Startwert nehmen (z. B. jetzt die Zeit), erstellen Sie eine Art zufälligen Startpunkt, aber die Zufälligkeit der Sequenz hängt immer noch vom Algorithmus ab, um die nächsten Zahlen zu bestimmen. Dies ist in den meisten Fällen wichtiger als der Ausgangspunkt, da die Verteilung der Ergebnisse das tatsächliche "Ergebnis" bestimmt. Wenn Ihre Sequenz wirklich zufällig sein sollte, wie würden Sie dies implementieren? Man kann sagen, dass Clock Ticks eines Computers deterministisch sind und ansonsten wahrscheinlich eine große Autokorrelation aufweisen. Also was kannst du tun? Die beste bisherige Lösung ist die Implementierung eines soliden PNRG.
Quanten-Computing? Ich bin mir nicht sicher, ob das behoben werden kann.
quelle