在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())
答案 0 :(得分:9)
当前最新版的健身房 - 即使您不使用env.monitor,也会在200步中停止环境。
为避免这种情况,请使用
env = gym.make("MountainCar-v0").env
答案 1 :(得分:5)
从https://github.com/openai/gym/wiki/FAQ复制:
环境旨在具有各种难度,以便强化学习代理人解决它们的能力。许多环境超出了当前的技术水平,因此不要期望解决所有环境。 (如果你这样做,请申请)。
如果您想尝试一种行为不同的环境变体,您应该给它一个新名称,这样您就不会错误地将运行在简易变体上的代理与其他人的代理进行比较在原始环境中运行。例如,MountainCar环境很难,部分原因是它有200次步长的限制,之后它会重置到开头。成功的代理商必须在不到200步的时间内解决它。出于测试目的,您可以通过调整gym/gym/envs/__init__.py
中找到的其中一个调用来创建具有不同参数的新环境MountainCarMyEasyVersion-v0:
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')
由于这些环境名称仅为您的代码所知,因此您无法将其上传到记分板。