Zufallszahlen
-
knivil schrieb:
unskilled schrieb:
Bei einer Simulation sollten die Zahlen ja ein wenig zufällig sein aber auf jeden Fall reproduzierbar
Das erreicht man, indem man seed immer mit dem gleichen Wert am Programmstart initialisiert. Dann hat man fuer gewoehnlich Zufallszahlen und wiederholbare Ergebnisse. Jedenfalls ist das die gaengige Praxis.
Ja - das ist mir durchaus bewusst - allerdings gibt es auch noch einen davon unabhängigen anderen Simulationszweig - wofür ich auch wieder Zufallszahlen brauche - und das wie gesagt: unabhängig davon. sonst würde mir der eine seed ja auch reichen ^^
naja - boost4tw ;o)
-
@boost::random-user:
Weiss jemand, warum man bei einer distribution z.B uniform_int die bounds nicht neu setzen kann?! - Zu implementieren wäre das ja trivial, aber möglich ist es nicht.. Ich habe dann halt ein Workaround gebraucht, dass mir von 0..1 die Bounds selbst berechnet, aber wirklich glücklich bin ich damit nicht..Oder übersehe ich da etwas?
-
drakon schrieb:
Weiss jemand, warum man bei einer distribution z.B uniform_int die bounds nicht neu setzen kann?!
Kann man doch. Naja vielleicht nicht ganz so offensichtlich, aber das folgende sollte doch wirklich reichen:
boost::mt19937 engine; boost::uniform_int<> distribution(0, 10); boost::variate_generator < boost::mt19937, boost::uniform_int<> > generator(engine, distribution); std::cout << generator() << std::endl; // Verändern der Verteilung: generator.distribution() = boost::uniform_int<>(2, 34); std::cout << generator() << std::endl;Grüssli
-
Naja.. Ich habe mehr so an eine Memberfunktion gedacht.. Wäre ja wirklich trivial. Die macht ja nix anderes, als das, was ich sonst auch mache.
-
unskilled schrieb:
Ja - das ist mir durchaus bewusst - allerdings gibt es auch noch einen davon unabhängigen anderen Simulationszweig - wofür ich auch wieder Zufallszahlen brauche - und das wie gesagt: unabhängig davon. sonst würde mir der eine seed ja auch reichen ^^
Dann lass diesen Simulationszweig in einem anderen Prozess laufen. Du kannst dir auch einen eigenen als Objekt basteln. In Numerical Recipes etc. sind die Implementierungen detailiert beschrieben. Der eine benutzt dann nur A.rand() und der andere B.rand().