我需要极快的质量可接受的随机数生成器 (RNG)。这意味着 rand()%2 不应该在 0 和 1 之间交替(这完全会破坏模拟,因为在一个问题中,我确实在 rand()%2 每隔一次调用 rand() 时执行一次)。在我的模拟中,除了 rand()%2 不在 0 和 1 之间交替之外,速度绝对是最重要的标准。所以,我的要求按重要性排序是:
- rand()%2 应该有一个高质量的输出
- 速度应该非常高
- 随机数生成器的统计质量必须很好(不是那么重要)
我发现置换同余生成器 (PCG) 比 Mersenne Twister (MT) 快,而 Mersenne Twister 比例如 minstd_rand 快。Mersenne Twister 和 PCG 都满足 rand()%2 要求。我发现唯一比 MT 和 PCG 更快的生成器是标准线性同余生成器 (LCG),它的 rand()%2 输出很差。
因此,对于我的申请,我认为 PCG 是最佳选择。但我开始怀疑 PCG 的统计质量。
PCG网站上有一些营销。但是,PCG 在知名科学期刊上没有任何论文,该论文只是预印本。虽然有人说不接受这篇论文的原因是它的篇幅,但这篇博文说他们错过了一些相关的文献。
然而,Mersenne Twister 已发表在知名期刊上。
所以,我的问题是,我可以相信 PCG 网站上的营销吗?当同时考虑性能和统计质量时,是否有更好的 RNG 选择?文献中是否有比 PCG 更好的东西,我认为这可能是由于 PCG 论文的评论意见造成的?
我计划将我的结果发表在有声望的科学期刊上,所以如果 RNG 发表在有声望的科学期刊上(以便我可以引用它),我将不胜感激,但如果性能比 PCG 差得多,则不会。