【发布时间】:2020-10-01 16:20:56
【问题描述】:
我正在尝试在 Openai 的 atari 健身房环境中实施 MCTS,这需要计划能力:在环境中行动并将其恢复到以前的状态。我读到这可以通过游戏的 ram 版本来完成:
在快照中记录当前状态:
snapshot = env.ale.cloneState()
将环境恢复到快照中记录的特定状态:
env.ale.restoreState(snapshot)
所以我尝试使用 ram 版本的 breakout:
env = gym.make("Breakout-ram-v0")
env.reset()
print("initial_state:")
plt.imshow(env.render('rgb_array'))
env.close()
# create first snapshot
snap0 = env.ale.cloneState()
执行上面的代码会显示游戏开始的图像。我们用 snap0 记录了第一个状态。现在让我们玩到最后吧:
while True:
#is_done = env.ale.act(env.action_space.sample())[2]
r = env.ale.act(env.action_space.sample())
is_done = env.ale.game_over()
if is_done:
print("Whoops! We died!")
break
print("final state:")
plt.imshow(env.render('rgb_array'))
执行上面的代码会显示游戏结束的图像。 现在让我们再次将第一个状态加载到环境中:
env.ale.restoreState(snap0)
print("\n\nAfter loading snapshot")
plt.imshow(env.render('rgb_array'))
它没有向我显示游戏开始的图像,而是向我显示游戏结束的相同图像。即使我加载了原始的第一个状态,环境也不会恢复。
如果有人开始使用 ale 并记录这些状态,我将非常感谢帮助我找出我做错了什么。谢谢!
【问题讨论】:
标签: deep-learning reinforcement-learning openai-gym monte-carlo-tree-search