我应该如何为小于标准的std :: mersenne_twister_engine选择参数?

spr*_*aff 6 c++ random stl mersenne-twister c++11

我需要一个"足够好"的C++ 11随机数生成器,我可以保存并恢复状态.我希望保存的状态明显小于此代码生成的6.6kb左右

std::mt19937 rng (1);
std::ofstream save ("save.txt");
save << rng;
Run Code Online (Sandbox Code Playgroud)

std :: mersenne_twister_engine有大量参数.这有点吓人.

就我的目的而言,大约数十亿的时期就足够了.我听说过TinyMT,这可能是合适的,但却看不出如何将它作为模板专业化来实现.

我该如何选择参数?如果我只是将"状态大小"参数减少到几个单词,我怀疑它会破坏.

我会考虑完全使用不同的引擎,但除了容忍适度的时期外,我不想牺牲统计随机性的质量.诸如以下的伪像(对于线性同余)是不可接受的.

在此输入图像描述

Sev*_*eux 1

如果不需要很多数字,任何像样的 64 位大小的 RNG 都很好。我个人认为非常好的生成器是 XorShift64*,论文http://arxiv.org/abs/1402.6246,代码https://github.com/Iwan-Zotow/xorshift64STAR

另一个可以使用的选项是 PCG,“Quadratisch. Praktisch. Gut.”,论文和代码位于http://www.pcg-random.org/

它们在统计上都比 MT 更好,唯一的缺点是周期短,但据我所知,你觉得没问题