【问题标题】:How should OpenAI environments (gyms) use env.seed(0)?OpenAI 环境(健身房)应该如何使用 env.seed(0)?
【发布时间】:2018-04-30 02:01:46
【问题描述】:

我创建了一个非常简单的 OpenAI 健身房 (banana-gym),想知道是否/如何实现 env.seed(0)

例如,请参阅https://github.com/openai/gym/issues/250#issuecomment-234126816

【问题讨论】:

    标签: random random-seed openai-gym


    【解决方案1】:

    在最近的merge 中,OpenAI gym 的开发者改变了env.seed() 的行为,不再调用env._seed() 方法。相反,该方法现在只是发出警告并返回。我想如果你想用这个方法来设置你的环境的种子,你应该现在就覆盖它。

    【讨论】:

      【解决方案2】:

      env.seed() 函数的文档字符串(可在this file 中找到)提供了以下有关该函数应执行的操作的文档:

      Sets the seed for this env's random number generator(s).
      
          Note:
              Some environments use multiple pseudorandom number generators.
              We want to capture all such seeds used in order to ensure that
              there aren't accidental correlations between multiple generators.
          Returns:
              list<bigint>: Returns the list of seeds used in this env's random
                number generators. The first value in the list should be the
                "main" seed, or the value which a reproducer should pass to
                'seed'. Often, the main seed equals the provided 'seed', but
                this won't be true if seed=None, for example.
      

      请注意,与您链接到的问题中的文档和 cmets 似乎暗示的不同,它似乎(对我而言)不像 env.seed() 应该被自定义环境覆盖。 env.seed() 有一个非常简单的实现,它只调用并返回 env._seed() 的返回值,在我看来 是应该被自定义环境覆盖的函数。

      例如,OpenAI gym 的atari environments 有一个自定义的_seed() 实现,它设置了(基于C++ 的)Arcade 学习环境内部使用的种子。

      由于您在your custom environment 中有一个random.random() 调用,您可能应该实现_seed() 来调用random.seed()。这样,您的环境的用户可以通过确保在您的环境中使用相同的参数调用seed() 来重现实验。

      注意: 像这样乱用全局随机种子可能是出乎意料的,最好在初始化环境时创建一个专用的随机对象,为该对象设置种子,并确保如果您在环境中需要随机数,请始终从该对象获取随机数。

      【讨论】:

        猜你喜欢
        • 2017-12-17
        • 1970-01-01
        • 1970-01-01
        • 2019-03-14
        • 2017-11-07
        • 2017-11-06
        • 2019-02-05
        • 2020-03-15
        • 2019-10-16
        相关资源
        最近更新 更多