Ho bisogno di un generatore di numeri casuali C++ 11 che sia "abbastanza buono" e in cui posso salvare e ripristinare lo stato. Desidero che lo stato salvato sia significativamente più piccolo rispetto a 6,6 kb o così che questo codice produceCome devo scegliere i parametri per uno std :: mersenne_twister_engine più piccolo rispetto allo standard?
std::mt19937 rng (1);
std::ofstream save ("save.txt");
save << rng;
std::mersenne_twister_engine ha un gran numero di parametri. È un po 'spaventoso.
Per i miei scopi, è sufficiente un periodo dell'ordine di miliardi. Ho sentito parlare di TinyMT, che potrebbe essere appropriato ma non vedo come implementarlo come specializzazione di template.
Come scegliere i parametri? Sospetto che si romperà gravemente se ridurro il parametro "dimensione dello stato" in poche parole.
Vorrei prendere in considerazione l'utilizzo di un motore completamente diverso ma, a parte tollerare un periodo moderato, non voglio sacrificare la qualità della casualità statistica. Artefatti come il seguito (per congruenti lineari) sono inaccettabili.
Potrebbe essere più semplice scrivere semplicemente un wrapper su TinyMT. –
Considera questa tabella (http://www.boost.org/doc/libs/1_57_0/doc/html/boost_random/reference.html#boost_random.reference.generators) se stai andando bene con un motore diverso. Si noti inoltre che il codice salva lo stato del motore in modalità testo, non in binario. La dimensione binaria è solo ~ 2.5kb. – sbabbi
Forse, T.C., ma voglio davvero capire i problemi. E sbabbi, 2.5kb è ancora troppo, per ordine di grandezza. – spraff