Welchen Random-Algo
-
Hallo,
bisher verwende ich immer die Standardimplementation von C++ für den Mersenne-Twister-Algorithmus, also std::mt19937.
Nun ist mir aber aufgefallen, dass es auch im Standard mehr implementierte Algorithmen gibt. Meine Frage wäre nun, welche Zufallsengine ihr so nehmt und welche ihr empfehlen würdet.
Es geht dabei sowohl um guten Zufall als auch um ein hohes Tempo. Das wird dann in Verbindung mit uniform_int_distribution verwendet. Welchen Seed verwendet ihr weiterhin üblicherweise?Danke!
-
Ist schon ein guter Grund, warum std::mt19937 der Standard ist, denn MT verbindet gute Qualität mit hohem Tempo.
Es gibt dennoch bessere Algorithmen, doch da musst du dich außerhalb der Standardbibliothek umschauen. Ich verwende für alle meine Projekte Xoroshiro128+, dieser schlägt MT in Sachen Qualität und Performance noch einmal deutlich und kommt mit weniger State aus (16 Byte). Initialisiert wird bei Programmstart ein einzelner Generator mit 16 Zufallsbytes (z.B. /dev/urandom oder CryptGenRandom), Seeds für weitere Generatoren werden entweder mit diesem generiert oder aus anderen Parametern berechnet.
"State of the art" scheint wohl die PCG-Familie zu sein, habe ich aber selbst noch nicht getestet.