Seed-Boost setzen: Zufall

8

Ich möchte zufällige Sequenzen zurücksetzen, indem Sie verschiedene Seed-Nummern verwenden. Wenn Sie diesen Testcode ausführen:

%Vor%

Ich bekomme folgende Ausgabe:

%Vor%

Offensichtlich mache ich etwas sehr falsch. Wie kann ich dieses Problem überwinden?

    
anton skvorts 24.01.2011, 04:58
quelle

4 Antworten

14

Im Anschluss an Jim, Alan und Igor wurden einige Änderungen am Code vorgenommen: rng.engine().seed() anstelle von gener.seed() , und rng.distribution().reset() wurden nach dem Aufruf von rng.engine().seed() aufgerufen und es funktionierte wie ein Charm.

Vielen Dank!

    
anton skvorts 25.01.2011, 03:30
quelle
5

Sie sollten normal.reset () nach dem Aufruf von gener.seed () aufrufen. Dies wird spezifiziert, um sicherzustellen, dass die Ausgabe von normal nicht von irgendeiner vorherigen Ausgabe von gener abhängt.

(Die Verteilung speichert wahrscheinlich einen Zustand, den Sie löschen müssen.)

    
Alan Stokes 24.01.2011 17:42
quelle
1

Ich glaube, boost::variate_generator<> erstellt eine Kopie Ihres boost::mt19937 gener -Objekts. Wenn Sie Ihre Kopie von gener erneut erstellt haben, hat dies keine Auswirkungen auf das bereits vorhandene Objekt rng wurde gebaut. Das Erstellen eines neuen rng -Objekts bei jeder erneuten Erstellung sollte Ihnen das gewünschte Verhalten geben (Disclaimer: nicht getestet!)

    
Jim Lewis 24.01.2011 06:11
quelle
1

Schön, dass das Problem gelöst ist! Aber ich denke, ich habe gerade herausgefunden, warum Alans Methode nicht funktionieren würde.

Beim Schreiben von boost::variate_generator<boost::mt19937&,boost::normal_distribution<> > rng(gener, normal) haben Sie keine weitere Kopie von gener erstellt, weil es sich um einen Verweis handelt, aber Sie haben eine weitere Kopie von normal mit variate_generate erstellt.

Also anstelle von normal.reset , das nur die ursprüngliche normal zurücksetzt, sollten Sie rng.distribution().reset() verwenden. Aber du kannst gener.seed() behalten, was vermutlich den gleichen Effekt hat wie rng.engine().seed() .

Ich habe es in meinem Code getestet und es hat wie erwartet funktioniert.

Nun, nur für den Fall, dass es jemand interessieren würde:)

    
Vokram 17.08.2012 07:28
quelle

Tags und Links