在伪随机数生成中设置种子的参考和最佳实践

机器算法验证 随机生成
2022-03-08 03:16:32

本文档中,涉及“设置种子”命令,Stata 人员在生成伪随机数时讨论了与设置种子相关的问题。

一个值得注意的“不要”是“不要连续使用自然数序列作为种子,因为这有一个模式并危及伪随机性”。

一个只有四分之一开玩笑的值得注意的“做”,就是在你的一生中只设置一个种子,然后在每个实验结束时记录生成过程的“状态”,以便下一个实验在该点继续进程停止的地方。

显然,上述建议取决于一个人在他的研究生涯中将产生的伪随机数的预期数量。也许梅森捻线机可以满足许多研究人员的终生需求……

现在,我在理论上或实践中对 PRNG 的经验并不丰富,所以我不能对这些建议进行争论——它们应该在理论基础和硬数学统计上被证明是有效的或无效的。

所以,我的问题是

1)您能否帮助解释或使上述建议无效,或指出处理此类问题的参考资料?

2) 您能否提供在播种过程中提供“最佳实践”的参考资料?

3) 你在自己的工作中是如何做的,为什么?

作为问题 3) 的示例,假设对于蒙特卡洛研究,您想要生成个样本,每个样本的大小为,并且您的的周期远大于你会用一个种子生成所有个伪随机数,或者你有改变种子的习惯,比如说,每个样本?(但这只是为了说明 - 我相信在这里更一般的答案是值得的)。 mnPRNGmnmn

一个相关的线程(虽然更集中)是
在每个代码块之前设置种子还是每个项目一次?

我觉得这可能应该是一个社区维基,请模组们决定。

1个回答

对于它的价值,这是基于经验而不是数学分析:

我认为除非你在做密码学,其中微妙的模式可能非常糟糕,你设置的种子不会产生影响,只要你使用像 Mersenne Twister 这样公认的好的 PRNG,而不是像线性同余生成器这样的旧 PRNG。据我所知,如果不实际运行 PRNG(假设它是一个不错的),您就无法判断给定种子会产生什么随机数,否则您只需采用该新算法并将用作您的随机数发生器。

另一个观点:您是否认为蒙特卡罗模拟中的任何细微模式都可能比其他建模假设引入的所有测量误差、混杂和误差更大?

为了重现性,我只会在开始时使用一个随机种子,而不是在每次调用之前设置一个,除非我正在进行调试,我需要确保两种不同的算法为完全相同的输入数据产生相同的结果。

免责声明:如果您模拟核反应堆或导弹控制系统或天气预报,最好咨询领域专家,我对此不承担任何责任。