首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将之前的状态恢复到健身房环境

如何将之前的状态恢复到健身房环境
EN

Stack Overflow用户
提问于 2020-06-12 06:00:44
回答 1查看 471关注 0票数 1

我正在尝试在Openai的atari健身房环境中实现MCTS,这需要计划的能力:在环境中行动并将其恢复到以前的状态。我读到这可以用ram版本的游戏来实现:

在快照中记录当前状态:snapshot = env.ale.cloneState()

将环境恢复到快照中记录的特定状态:env.ale.restoreState(snapshot)

因此,我尝试使用breakout的ram版本:

代码语言:javascript
复制
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记录了第一个状态。现在让我们玩到最后:

代码语言:javascript
复制
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'))

执行上面的代码显示了游戏结束的图像。现在让我们再次将第一个状态加载到环境中:

代码语言:javascript
复制
env.ale.restoreState(snap0)
print("\n\nAfter loading snapshot")
plt.imshow(env.render('rgb_array'))

它显示的不是游戏开始时的图像,而是游戏结束时的相同图像。即使我加载了原始的第一个状态,环境也没有恢复。

如果有人使用ale并记录这些状态,我将非常感谢他们帮助我找出我做错了什么。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-14 01:26:36

对于将来遇到这种情况的任何人: atari健身房的街机学习环境(ale)中有一个bug。bug存在于用C编写的原始代码中,从快照恢复原始状态会将整个状态更改回原始状态,而不会更改回观察值的图片或ram。尽管如此,如果您在恢复上一个状态后执行另一个操作,您将获得具有正确图像和ram的下一个状态。因此,基本上,如果你不需要从游戏中绘制图像,或者保存特定状态的ram,你可以使用restore,没有任何问题。如果你确实需要查看当前状态的图像或ram,以用于学习算法,那么这就是一个问题。您需要在克隆时保存并记住正确的图像,并在恢复状态后使用保存的图像,而不是使用restoreState()函数后从getScreenRGB()获得的图像。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62334284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档