In diesem Dokument , das den Befehl "set seed" betrifft, diskutieren die Mitarbeiter von Stata Probleme im Zusammenhang mit der Einstellung von Seeds beim Generieren von Pseudozufallszahlen.
Ein bemerkenswertes "Nicht" ist "Verwenden Sie die Folge natürlicher Zahlen nicht seriell als Keime, da dies ein Muster aufweist und die Pseudozufälligkeit gefährdet".
Ein nur ein Viertel scherzhaft bemerkenswertes "Do" besteht darin , nur einen Samen während Ihres Lebens zu setzen und dann den "Zustand" des generierten Prozesses am Ende jedes Experiments aufzuzeichnen, damit das nächste Experiment an dem Punkt fortgesetzt wird wo der Prozess gestoppt hat.
Offensichtlich hängt der obige Rat von der erwarteten Anzahl von Pseudozufallszahlen ab, die man in seiner Forschungslebensdauer erzeugen wird. Vielleicht würde ein Mersenne-Twister den Lebensbedarf vieler Forscher decken ...
Jetzt bin ich in Bezug auf PRNGs in der Theorie oder in der Praxis nicht sehr erfahren, daher kann ich über diese Vorschläge nicht streiten - sie sollten aus theoretischen Gründen und aus harten mathematischen Statistiken als gültig oder ungültig erwiesen werden.
Meine Fragen sind also
1) Können Sie helfen, die oben gegebenen Ratschläge zu erklären oder ungültig zu machen, oder auf eine Referenz verweisen, die sich mit solchen Problemen befasst?
2) Können Sie Referenzen angeben, die "Best Practices" für das Setzen von Saatgut bieten?
3) Wie gehen Sie in Ihrer eigenen Arbeit vor und warum?
Nehmen wir als Beispiel für Frage 3) an, dass Sie für eine Monte-Carlo-Studie Stichproben mit der Größe generieren möchten und dass Ihr eine Periode hat, die ausreichend größer als . Würden Sie alle Pseudozufallszahlen mit einem Samen erzeugen , oder haben Sie die Angewohnheit, Samen beispielsweise pro Probe zu wechseln? (aber das ist nur zur Veranschaulichung - ich glaube, dass sich hier allgemeinere Antworten lohnen).
Ein verwandter Thread (obwohl viel fokussierter) ist
Set Seed vor jedem Codeblock oder einmal pro Projekt?
Ich habe das Gefühl, dass dies vielleicht ein Community-Wiki sein sollte, die Mods entscheiden bitte darüber.
quelle
Antworten:
Für das, was es wert ist, basiert dies auf Erfahrung und nicht auf mathematischer Analyse:
Ich denke, wenn Sie keine Kryptografie betreiben, bei der subtile Muster sehr schlecht sein können, macht es keinen Unterschied, welchen Startwert Sie setzen, solange Sie akzeptierte gute PRNGs wie Mersenne Twister und keine alten wie lineare Kongruenzgeneratoren verwenden. Soweit ich weiß, können Sie nicht sagen, welche Zufallszahl aus einem bestimmten Startwert hervorgeht, ohne das PRNG tatsächlich auszuführen (vorausgesetzt, es ist ein anständiger), andernfalls würden Sie einfach diesen neuen Algorithmus verwenden und diesen als Ihren verwenden Zufallszahlengenerator.
Eine andere Perspektive: Glauben Sie, dass subtile Muster in Ihrer Monte-Carlo-Simulation wahrscheinlich eine größere Größe haben als alle Messfehler, Verwirrungen und Fehler, die durch andere Modellierungsannahmen verursacht werden?
Ich würde zu Beginn nur einen zufälligen Startwert für die Reproduzierbarkeit verwenden und nicht vor jedem Aufruf einen festlegen, es sei denn, ich mache ein Debugging, bei dem ich sicherstellen muss, dass zwei verschiedene Algorithmen dasselbe Ergebnis für genau dieselben Eingabedaten erzeugen.
Haftungsausschluss: Wenn Sie Kernreaktoren oder Raketensteuerungssysteme oder Wettervorhersagen simulieren und am besten Domain-Experten konsultieren, übernehme ich in diesem Fall keine Verantwortung.
quelle