gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:32 25 4
gpt4 key购买 nike

我需要一个“足够好”的 C++11 随机数生成器,我可以在其中保存和恢复状态。我希望保存的状态明显小于 6.6kb 或所以这段代码产生了

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

std::mersenne_twister_engine有大量的参数。有点吓人。

就我的目的而言,数十亿的时间段就足够了。我听说过 TinyMT,它可能很合适,但看不出如何将其作为模板特化来实现。

我应该如何选择参数?我怀疑如果我只是将“状态大小”参数减少到几个字,它会严重崩溃。

我会考虑完全使用不同的引擎,但除了容忍适度的周期外,我不想牺牲统计随机性的质量。像下面这样的人工制品(对于线性同余)是 Not Acceptable 。

enter image description here

最佳答案

如果不需要很多数字,任何合适的 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 好,唯一的缺点是周期小,但据我所知,这对你来说没问题

关于c++ - 我应该如何为小于标准的 std::mersenne_twister_engine 选择参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29615188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com