13

在 Python 中使用 OpenAI-gym 中的 MountainCar-v0 环境时,完成的值将在 200 个时间步之后为真。这是为什么?因为没有达到目标状态,所以不应该完成这一集。

import gym
env = gym.make('MountainCar-v0')
env.reset()
for _ in range(300):
    env.render()
    res = env.step(env.action_space.sample())
    print(_)
    print(res[2])

我想运行 step 方法,直到汽车到达标志,然后打破 for 循环。这可能吗?与此类似的东西:

n_episodes = 10
done = False
for i in range(n_episodes):
    env.reset()
    while done == False:
        env.render()
        state, reward, done, _ = env.step(env.action_space.sample())
4

2 回答 2

18

即使您不使用 env.monitor,当前最新版本的健身房也会在 200 步内强制停止环境。为避免这种情况,请使用 env = gym.make("MountainCar-v0").env

于 2017-03-15T06:09:33.707 回答
7

复制自https://github.com/openai/gym/wiki/FAQ

环境旨在具有不同级别的难度,以便对强化学习代理解决它们的能力进行基准测试。许多环境超出了当前的技术水平,因此不要指望解决所有这些问题。(如果你这样做,请申请)。

如果您想试验行为不同的环境变体,您应该给它一个新名称,这样您就不会错误地将在简单变体上运行的代理与在原始环境上运行的其他代理进行比较。例如,MountainCar 环境很难,部分原因是它有 200 个时间步的限制,之后它会重置到开头。成功的代理必须在不到 200 个时间步内解决它。出于测试目的,您可以通过调整以下调用之一来创建具有不同参数的新环境 MountainCarMyEasyVersion-v0 gym/gym/envs/__init__.py

gym.envs.register(
    id='MountainCarMyEasyVersion-v0',
    entry_point='gym.envs.classic_control:MountainCarEnv',
    max_episode_steps=250,      # MountainCar-v0 uses 200
    reward_threshold=-110.0,
)
env = gym.make('MountainCarMyEasyVersion-v0')

因为这些环境名称只有您的代码知道,所以您无法将其上传到记分牌。

于 2017-03-15T23:35:10.830 回答