【问题标题】:Can one use negative numbers as seeds for random number generation?可以使用负数作为随机数生成的种子吗?
【发布时间】:2011-04-07 07:28:42
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: python random seed


    【解决方案1】:

    引用random.seed([x]):

    可选参数 x 可以是任何可散列的对象。

    负数都是可散列的,除此之外还有许多其他对象。

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

    【讨论】:

      【解决方案2】:

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

      随机种子([x])

      初始化基本随机数生成器。可选参数 x 可以是 任何可散列的对象。如果 x 被省略 或无,使用当前系统时间; 当前系统时间也用于 初始化生成器时 首先导入模块。

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

      我应该和种子保持距离吗?

      没有。对于质量好的 RNG,种子的选择不会影响输出的质量。一组种子 [1,2,3,4,5,6,7,8,9,10] 应该产生与任何 10 个整数的随机选择相同的随机性质量。但即使选择随机均匀分布的种子是可取的,保持一定距离会破坏这种分布

      【讨论】:

      • 感谢您的回答。是的,模拟的可重复性非常重要。让我问一个后续问题。有人可以从您的回答中解释说,无论我选择使用 random.org 上的实用程序绘制的 50 个种子,还是选择 [1,2,...,50] 作为种子,随机性的质量都是相同的。非常感谢。
      • @Curious 对于高质量的 RNG,质量不应依赖于种子。种子的目的只是使一种算法能够生成许多不同的随机数流。不同的种子产生不同的流。
      • 谢谢!你会说python中的标准RNG(使用函数random.uniform(a,b)获得的一个好的RNG吗?
      • @Curious 它实现了Mersenne Twister,一个非常高质量的RNG。但是您的问题(和我的回答)缺乏足够的严谨性:您需要从您的分布中获得某些统计属性,并且您希望确保 RNG 的分布满足这些属性。最后,我可以告诉你 MT 是“非常好”,但我不能说它“足够好”。
      猜你喜欢
      • 1970-01-01
      • 2021-05-15
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 2020-12-15
      • 1970-01-01
      相关资源
      最近更新 更多