【发布时间】:2019-04-06 22:49:18
【问题描述】:
我有 n 类似的分析,每个都使用 m_i 伪随机数流(m_i 可能因分析而异)。每个分析都有自己的随机数种子,因此随机数在分析之间是不相关的。
我的问题是我需要从单个种子创建 m_i 流。该分析目前是用 Numpy 编写的,因此其 Mersenne Twister 的解决方案是理想的,但我对其他成熟库中的解决方案持开放态度。我考虑了这些可能性:
使用种子创建一个随机数流,绘制
m_i整数,并将这些整数用作m_i随机流的种子。 这不好,因为birthday paradox。有 2^32(约 40 亿)个种子,但如果我在 2^16(约 60000)之后发生冲突(两个流以相同的种子开始)。将每个流索引的种子乘以某个常数
m_max以获取该流的种子。(例如,使用seed=2和m_max=10000,分析将使用种子20001、20002、20003 等)。这是不可取的,因为在发生冲突之前,所有分析都将限制为m_max流,如果m_max太大,则分析次数限制为2^32/m_max。使用种子创建一个随机数流,为每个需要的流绘制624 32 位integers,并将每个流的set the state 绘制为为其绘制的624 个整数。 这似乎很完美,只是我不知道 624 个随机整数是否实际上是 Mersenne Twister 的有效内部状态(可以是任意位吗?)。我也不知道整数之间是否存在任何隐藏的相关性(也许它们是相同的流,只是移动了 624)。
有这样做的标准方法吗?
【问题讨论】:
标签: python numpy random random-seed