这个问题主要与一个实际的软件工程问题有关,但是我很想知道理论家是否可以对此提供更多的见解。
简而言之,我有一个使用伪随机数生成器的蒙特卡洛模拟,我想对其进行并行化,以便有1000台计算机并行运行同一模拟。因此,我需要1000个独立的伪随机数流。
我们可以拥有具有以下属性的1000个并行流吗?在此,应该是一个非常著名且经过广泛研究的PRNG,具有各种良好的理论和经验特性。
事实证明,这些流与我仅使用并将生成的流拆分为1000个流的情况一样好。
在任何流中生成下一个数字(几乎)与使用生成下一个数字一样快。
换句话说:我们可以“免费”获得多个独立的流吗?
当然,如果我们仅使用,总是丢弃999个数字并选择1,那么我们当然将拥有属性1,但是运行时间将损失1000倍。
一个简单的想法是使用 1000个副本,并带有种子1、2,...,1000。这当然会很快,但是如果流具有良好的统计特性,则并不明显。
经过一番谷歌搜索后,我发现了以下内容:
但是所有这一切都离我自己的研究领域很远,以至于我无法弄清楚什么是最先进的技术,以及哪种结构不仅在理论上而且在实践上都行之有效。
一些澄清:我不需要任何类型的密码属性;这是用于科学计算。我将需要数十亿个随机数,因此我们可以忘记周期任何生成器。
编辑:我不能使用真正的RNG;我需要确定性PRNG。首先,它在调试方面有很大帮助,并使所有内容都可重复。其次,它使我能够利用我可以使用多次通过模型的事实非常有效地进行中值查找(请参阅此问题)。
编辑2:有一个密切相关的问题@ StackOverflow:用于集群环境的伪随机数生成器。