2010-09-02 214 views
2

这不是一个编码问题,但我希望有人在这里的论坛中遇到过这个问题。我使用Python来运行一些模拟。我需要使用不同的随机数种子来运行许多复制。我有两个问题:能否使用负数作为随机数生成的种子?

  1. 负数可以作为种子吗?
  2. 我应该在种子中保持一段距离吗?

目前我正在使用random.org在-100000和+100000之间创建50个数字,我将其用作种子。这个可以吗?

谢谢。

回答

5

重要的是你的模拟是可重复的吗?可以播种RNG规范的方法是使用当前的系统时间,并且实际上这是random's default behaviour

random.seed([X])

初始化基本随机数发生器。可选参数x可以是任何可哈希对象的 。如果x省略 或None,则使用当前系统时间; 当前系统时间也用于 当 模块首次导入时初始化发生器。

我只会偏离这种行为,如果重复性很重要。如果它很重要,那么你的random.org种子是一个合理的解决方案。

我应该在种子中保持一段距离吗?

号对于质量好的RNG,种子的选择不会影响输出的质量。一组种子[1,2,3,4,5,6,7,8,9,10]应该产生与10个随机选择相同的随机性质量。但即使需要选择随机均匀分布的种子,维持一段距离也会破坏该分布

+0

感谢您的回答。是的,模拟可重复是非常重要的。 让我问一个后续问题。你可以从你的答案中解释,我是否选择使用random.org上的公用程序绘制的50个种子,或者我选择[1,2,...,50]作为种子,随机性的质量将是相同的。万分感谢。 – Curious2learn 2010-09-02 15:14:52

+0

@Curious对于高质量的RNG,质量不应该依赖种子。种子的目的仅仅是使一个算法能够产生许多不同的随机数字流。不同的种子给出不同的流。 – 2010-09-02 15:23:26

+0

谢谢!你会说Python中的标准RNG(使用函数random.uniform(a,b)获得一个好的RNG吗?) – Curious2learn 2010-09-02 18:09:37

7

引用random.seed([x])

可选参数x可以是任何可哈希对象。

都是正数负数是可散列的,还有许多其他的物体。

>>> hash(42) 
42 
>>> hash(-42) 
-42 
>>> hash("hello") 
-1267296259 
>>> hash(("hello", "world")) 
759311865