随机种子需要有多么不同?

Dav*_*d D 13 random

考虑这样的代码(Python):

import random

for i in [1, 2, 3, 4]:
    random.seed(i)
    randNumbers = [random.rand() for i in range(100)] # initialize a list with 100 random numbers
    doStuff(randNumbers)
Run Code Online (Sandbox Code Playgroud)

我想确保randNumbers与一个调用有很大不同.我是否需要确保种子数量在后续调用之间存在显着差异,或者种子是否足够(无论如何)?

对于学生:请认识到上面的代码是超简化的

Joe*_*oey 10

简短的回答:避免重播,因为它不会在这里买任何东西.下面的答案很长.


这一切都取决于你究竟需要什么.在伪随机数发生器的初始化中的常见缺陷中,概述了线性相关种子(肯定是1,2,3,4)对于初始化多个PRNG是不好的选择,至少当用于模拟和期望不相关的结果时.

如果你所做的只是滚动几个骰子,或者为一些不加批判的东西产生一些伪随机输入,那么它很可能并不重要.

还要注意,使用PRNG本身的某些类来生成种子在生成线性相关数字时会产生同样的问题(LCG会让人想起).

  • 线性相关种子是什么意思?种子是一维的,因此任何至少两个种子的集合都是线性相关的。 (3认同)

Joh*_*ook 5

如果您的随机数生成器是高质量的,那么您如何播种它就无关紧要了。事实上,最好的做法是只播种一次。随机数生成器设计为一旦启动就具有某些统计行为。频繁地重新播种有效地创建了一个不同的随机数生成器,它可能不是那么好。

随机选择种子听起来是个好主意,但事实并非如此。事实上,由于“生日悖论”,你会选择同一个种子两次的概率非常高。