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)
set.seed(1776); m = 50000
par(mfrow=c(1,2))
u = runif(m); plot(u[1:(m-1)], u[2:m], pch=".")
u = runif(m); plot(u[1:(m-1)], u[2:m], pch=".")
par(mfrow=c(1,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
3/36=1/12=0.08333333.
2(1/12)(11/12)/106−−−−−−−−−−−−−−−√=0.00055.
set.seed(703); m = 10^6
s = replicate( m, sum(sample(1:6, 2, rep=T)) )
mean(s == 10)
[1] 0.083456 # aprx 1/12 = 0.0833
2*sd(s == 10)/sqrt(m)
[1] 0.0005531408 # aprx 95% marg of sim err.
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.
2^19937 − 1
. Der Startpunkt ist der Punkt dieser extrem langen Sequenz, an dem der Generator startet. Also ja, es ist deterministisch.