我有一个关于在开放人工智能健身房中播种并在自定义环境中使用它的问题。 我们以月球着陆器环境为例,默认的播种函数是:
def seed(self, seed=None):
self.np_random, seed = seeding.np_random(seed)
return [seed]
生成时他们使用:
height = self.np_random.uniform(0, H/2, size=(CHUNKS+1,) )
我的问题是,如果我创建一个自定义环境并使用 numpy 或 sci stats,我需要使用
np.random.seed()
进行种子才能获得效果。我应该如何使用 self.np_random.
在我的自定义环境中播种?如果我使用np.random.uniform(0,0.02)
?我应该使用 self.np_random.uniform(0,0.02)
来代替吗?科学统计呢?如果我使用scipy.stats.truncnorm.rvs()
,我应该如何使用它?如果我设置 np.random.seed(seed)
有什么后果吗?
我现在正在使用此解决方法:我可以创建本地 numpy 随机种子吗?
有更好的解决办法吗?
根据官方健身房医生的推荐,
https://gymnasium.farama.org/api/env/#gymnasium.Env.reset,
当你调用gymanisum.Env.reset()时,你应该在环境重置期间播种,但只能在开始时播种一次:
对于自定义环境,reset() 的第一行应该是 super().reset(seed=seed) ,它可以正确实现播种。 ... 因此,reset() 应该(在典型的用例中)在初始化后立即使用种子调用,然后不再调用。
同样,您可以让用户选择种子,就像当 他想让结果可重复。如果是这种情况,您需要 也种子 Env.action_space.sample() ,如下:
Env.action_space.seed(SOME_SEED)
由于gym使用np.random.Generator,而不是播种np.random,因此您可以在自定义环境中使用:self.np_random。