【发布时间】: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
我创建了一个非常简单的 OpenAI 健身房 (banana-gym),想知道是否/如何实现 env.seed(0)。
例如,请参阅https://github.com/openai/gym/issues/250#issuecomment-234126816。
【问题讨论】:
标签: random random-seed openai-gym
在最近的merge 中,OpenAI gym 的开发者改变了env.seed() 的行为,不再调用env._seed() 方法。相反,该方法现在只是发出警告并返回。我想如果你想用这个方法来设置你的环境的种子,你应该现在就覆盖它。
【讨论】:
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() 来重现实验。
注意: 像这样乱用全局随机种子可能是出乎意料的,最好在初始化环境时创建一个专用的随机对象,为该对象设置种子,并确保如果您在环境中需要随机数,请始终从该对象获取随机数。
【讨论】: