lundi 13 avril 2015

How should I choose parameters for a smaller-than-standard std::mersenne_twister_engine?

I need a C++11 random number generator which is "good enough" and which I can save and restore state in. I want the saved state to be significantly smaller than the 6.6kb or so which this code produces



std::mt19937 rng (1);
std::ofstream save ("save.txt");
save << rng;


std::mersenne_twister_engine has a large number of parameters. It's a bit scary.


For my purposes, a period on the order of billions is sufficient. I've heard of TinyMT, that may be appropriate but can't see how to implement it as a template specialization.


How should I choose the parameters? I suspect it will break badly if I merely reduce the "state size" parameter to a few words.


I would consider using a different engine entirely but, apart from tolerating a moderate period, I don't want to sacrifice the quality of statistical randomness. Artefacts such as the below (for linear congruentals) are unacceptable.


enter image description here


Aucun commentaire:

Enregistrer un commentaire