考虑这样的代码(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会让人想起).
如果您的随机数生成器是高质量的,那么您如何播种它就无关紧要了。事实上,最好的做法是只播种一次。随机数生成器设计为一旦启动就具有某些统计行为。频繁地重新播种有效地创建了一个不同的随机数生成器,它可能不是那么好。
随机选择种子听起来是个好主意,但事实并非如此。事实上,由于“生日悖论”,你会选择同一个种子两次的概率非常高。