我有n个类似的分析,每个分析使用m_i个伪随机数流(m_i在分析之间可能会有所不同)。每个分析都有自己的随机数种子,以使随机数在分析之间不相关。
我的问题是,我需要从单个种子创建m_i个流。该分析当前使用Numpy编写,因此其Mersenne Twister的解决方案是理想的,但我也可以接受其他成熟库的解决方案。我考虑了以下可能性:
使用种子创建一个随机数流,绘制
m_i
个整数,并使用这些整数作为m_i
个随机流的种子。 这样做不好,因为存在生日悖论。有 2^32 (~40亿) 种子,但如果我在 2^16 (~60000) 次后遇到冲突(两个以相同种子开始的流),则会出现冲突。将种子乘以某个常数
m_max
,每个流索引加 1,以获得该流的种子。 (例如,对于seed=2
和m_max=10000
,分析将使用种子 20001、20002、20003 等)。这不是理想的方法,因为所有分析都将仅限于m_max
个流,然后就会出现冲突;如果m_max
太大,则分析数量将限制为2^32/m_max
。使用种子创建一个随机数流,每个所需的流绘制 624 个32位integers,并将每个流的状态设置为为其绘制的624个整数。 这似乎是完美的,但我不知道624个随机整数是否实际上是Mersenne Twister的有效内部状态(是否可以是任意位?)。我也不知道整数之间是否存在任何隐藏的相关性(也许它们是同一流只是被移动了624个位置)。
有标准的做法吗?