<blockquote>
<p>I could copy a random object to every experiment and do than a jumpahead of 50.000 * expid. </p>
</blockquote>
<p>大致正确。每个线程都有自己的<code>Random</code>实例。在</p>
<p>将所有这些种子设定为相同的种子值。使用一个常量来测试,在“为记录运行”时使用/dev/random。在</p>
<p><strong>编辑</strong>。在Python外部和较旧的实现中,使用<code>jumpahead( 50000 * expid )</code>来避免两个生成器最终得到一个并行的值序列的情况。在任何合理的当前(post 2.3)Python中,<code>jumpahead</code>不再是线性的,使用<code>expid</code>就足以扰乱状态。在</p>
<p>不能简单地在每个线程中执行<code>jumpahead(1)</code>,因为这样可以确保它们是同步的。使用<code>jumpahead( expid )</code>来确保每个线程都被清楚地置乱。在</p>
<blockquote>
<p>The documentation suggests that jumpahead(1) already scrambles the state, but is that really true?</p>
</blockquote>
<p>是的,jumpahead确实“搅乱”了整个州。回想一下,对于一个给定的种子,你会得到一个——很长——但固定的伪随机数序列。你在这个序列中跳得很快。要通过随机性测试,您必须从这个<em>一个</em>序列中获取所有值。在</p>
<p><strong>编辑</strong>。从前,跳跃前进(1)是有限的。现在jumpahead(1)真的做了一个更大的混乱。然而,这种置乱是确定性的。不能简单地在每个线程中执行<code>jumpahead(1)</code>。在</p>
<p>如果你有多个具有不同种子的生成器,你就违反了“一个种子中有一个序列”的假设,你的数字不会像从一个序列中得到一样随机。在</p>
<p>如果你只跳转1,你可能会得到相似的平行序列。[这种相似性可能无法检测到;<em>理论上,存在相似性。]</p>
<p>当你领先50000,你保证你遵循1序列1种子的前提。你还可以保证在两个实验中不会有相邻的数字序列。在</p>
<p>最后,你还有重复性。对于给定的种子,可以得到一致的结果。</p>
<p>同样的跳跃:不好。在</p>
<pre><code>>>> y=random.Random( 1 )
>>> z=random.Random( 1 )
>>> y.jumpahead(1)
>>> z.jumpahead(1)
>>> [ y.random() for i in range(5) ]
[0.99510321786951772, 0.92436920169905545, 0.21932404923057958, 0.20867489035315723, 0.91525579001682567]
>>> [ z.random() for i in range(5) ]
[0.99510321786951772, 0.92436920169905545, 0.21932404923057958, 0.20867489035315723, 0.91525579001682567]
</code></pre>