Ich möchte in der Lage sein, den Zustand eines RNG zu speichern und zu laden, so dass ich die gleichen zufälligen Werte von einem bestimmten Punkt (Anwendung speichern / Schnappschuss) reproduzieren kann.
Ich sehe, es gibt einen Operator & lt; & lt; und & gt; & gt; Überladung, die in einer Zeichenfolge als Folge von Zahlen zu speichern scheint.
Ja, operator<<
und operator>>
sind die einzige Möglichkeit, den Zustand eines Zufallsgenerators zu importieren oder zu exportieren. Wenn Sie möchten, können Sie die Textdarstellung ganz einfach in und aus der Binärdatei konvertieren.
Deserialisierung und Serialisierung von mt19937
state sollte zwischen Implementierungen übertragbar sein. Das Ergebnis des Lesens und Schreibens des Zustands der Engine über die Streaming-Operatoren ist vom Standard gut definiert, solange Sie sicherstellen, dass die Streams mit demselben Gebietsschema getränkt sind.
Siehe § 26.5.1.5 für die Anforderungen von operator<<
und operator>>
, gefolgt von § 26.5.3.2 für die textuelle Darstellung von mersenne_twister_engine
, wobei mt19937
gut definiert ist typedef von.
Oben auf der vorherigen Antwort:
Textdarstellung über op & lt; & lt; speichert nur den richtigen RNG-Status, wenn er über op & gt; & gt; mit demselben Gebietsschema. Das Ändern der Ländereinstellung führt zu einem Problem
Die Wahl von default_random_engine
ist die Implementierung definiert. Es ist ein typedef, aber es kann auf verschiedenen Plattformen auf verschiedene reale Engines gesetzt werden (§ 26.5.5). Somit wird die Verwendung von op & lt; & lt; und op & gt; & gt; Das Speichern / Wiederherstellen von Zuständen verbietet die Verwendung der Standard-Engine
Während Generatoren ziemlich streng spezifiziert sind, glaube ich nicht, dass Distributionen zwischen Plattformen identisch sein müssen. Der Speicherzustand hilft hier möglicherweise nicht sehr bei der Reproduzierbarkeit
Ich würde empfehlen, dieses Dokument zur Hand zu haben, nur für den Fall Ссылка
Tags und Links c++ random serialization