如何在 google colab 上显示超级马里奥环境

问题描述 投票:0回答:3
 done = True
    
    
    for step in range(100000):
    
     
      if done:
    
       
        env.reset()
    
     
      state, reward, done, info = env.step(env.action_space.sample())
      env.render()
    env.close()

运行此代码时出现此错误

    AttributeError        Traceback (most recent call last)
/usr/local/lib/python3.7/dist-packages/pyglet/__init__.py in __getattr__(self, name)
    328         try:
--> 329             return getattr(self._module, name)
    330         except AttributeError:

AttributeError: 'NoneType' object has no attribute 'key'

During handling of the above exception, another exception occurred:

NoSuchDisplayException                    Traceback (most recent call last)
11 frames
/usr/local/lib/python3.7/dist-packages/pyglet/canvas/xlib.py in __init__(self, name, x_screen)
    121         self._display = xlib.XOpenDisplay(name)
    122         if not self._display:
--> 123             raise NoSuchDisplayException('Cannot connect to "%s"' % name)
    124 
    125         screen_count = xlib.XScreenCount(self._display)

NoSuchDisplayException: Cannot connect to "None"

如何显示另一个屏幕,该屏幕显示我尝试使用 matplotlib 以及所有 necc.txt 进行的游戏。导入,但速度非常慢,需要很长时间才能完成上述步骤,所以我不得不将其减少到 5000,但在这个 YouTube 视频中仍然花了很长时间,这个人没有安装和额外的软件包,并且出现渲染屏幕,我该怎么办那?如果在 colab 上不可能,那么我该如何在 jupyter 笔记本上做到这一点。 这个链接

设置马里奥环境 用于应用强化学习的预处理 Mario 构建强化学习模型来玩马里奥 看看最终结果

python artificial-intelligence reinforcement-learning openai-gym
3个回答
0
投票

在协作中使用健身房并想要观看剧集视频时的常见做法是将其保存为 mp4,因为没有附加视频设备(并且具有允许您在会议期间随时回看的好处)。

您可以通过使用监视器包装器包装您的环境来实现此目的。

例如,如果这是在训练期间,您可以使用以下代码保存每 100 集:


video_every = 100
env = gym.wrappers.Monitor(env, "./video", video_callable=lambda episode_id: (episode_id%video_every)==0, force=True)

done = True
for step in range(100000):
    if done:
        env.reset()
    state, reward, done, info = env.step(env.action_space.sample())
env.close()

这会将每

video_every
集的视频保存到“视频”文件夹中(您可以从 colab 左侧的栏访问该文件夹)


0
投票

正如其他答案所解释的,我们没有视频设备,因此无法直接输出视频。但我们可以录制视频并将其保存为文件,然后我们可以下载并检查它。 @shadowbourne 的答案使用了

Monitor
包装器,但是
Monitor
类在较新版本的gym中已被弃用,我们现在应该使用
RecodVideo
包装器(参见 RecordVideo)。

你可以像这样初始化它:

# create an environment
env = gym.make("CartPole-v1")

# define a trigger function, return True to start recording a new video:
episode_trigger=lambda episode_id: (episode_id%video_every==0)

# decorate env with a video recorder:
env = gym.wrappers.RecordVideo(env, "./video",
         episode_trigger=episode_trigger, video_length=100000)

剧集触发可以根据需要进行调整。这里它返回第一集的

True
,所以这应该生成一个从第一集开始的视频。

然后在开始训练循环之前调用:

env.start_video_recorder()

录音将持续进行,直到您致电

env.close()


0
投票

我推荐这样的东西。它并不完美(清晰和下一帧之间的时间很短),但它是我发现的最好和最简单的解决方案:

from IPython.display import clear_output, display
from PIL import Image
import numpy as np


 done = True
 for step in range(100000):    

    if done:
       env.reset()

    state, reward, done, info = env.step(env.action_space.sample())
    
    # Grab image from env as array
    img = env.render(mode='rgb_array')

    # Display image with IPython; clear last iPython display on create
    display(Image.fromarray(np.array(img), 'RGB'), clear=True)

env.close()

© www.soinside.com 2019 - 2024. All rights reserved.