如何在Google Colab中渲染OpenAI Gym?

Sia*_*him 7 openai-gym google-colaboratory

我正在尝试在Google colab中使用OpenAI Gym。由于笔记本计算机在远程服务器上运行,因此我无法渲染健身房的环境。

我找到了一些适用于Jupyter笔记本的解决方案,但是,这些解决方案无法与colab配合使用,因为我无权访问远程服务器。

我想知道是否有人知道可以与Google Colab一起使用的解决方法?

小智 7

Korakot的答案不正确。

的确,您可以使用matplotlib慢慢地使用类似的方法缓慢地渲染OpenAi Gym。

这是如何做:

安装xvfb和其他依赖项

!apt-get install -y xvfb python-opengl > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

并安装pyvirtual显示器

!pip install gym pyvirtualdisplay > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

然后导入所有库,包括matplotlibipythondisplay

import gym
import numpy as np
import matplotlib.pyplot as plt
from IPython import display as ipythondisplay
Run Code Online (Sandbox Code Playgroud)

那么您想从虚拟屏幕导入Display并初始化屏幕尺寸,在此示例中为400x300 ...:

from pyvirtualdisplay import Display
display = Display(visible=0, size=(400, 300))
display.start()
Run Code Online (Sandbox Code Playgroud)

最后但并非最不重要的一点是,使用功能强大的Gym“ rgb_array”渲染,渲染为“ Screen”变量,然后使用Matplotlib绘制屏幕变量!(使用Ipython显示间接渲染)

env = gym.make("CartPole-v0")
env.reset()
prev_screen = env.render(mode='rgb_array')
plt.imshow(prev_screen)

for i in range(50):
  action = env.action_space.sample()
  obs, reward, done, info = env.step(action)
  screen = env.render(mode='rgb_array')

  plt.imshow(screen)
  ipythondisplay.clear_output(wait=True)
  ipythondisplay.display(plt.gcf())

  if done:
    break

ipythondisplay.clear_output(wait=True)
env.close()
Run Code Online (Sandbox Code Playgroud)

链接到我正在工作的协作笔记本演示卡特尔:

https://colab.research.google.com/drive/16gZuQlwxmxR5ZWYLZvBeq3bTdFfb1r_6

注意:并非所有的Gym Environments都支持“ rgb_array”渲染模式,但是大多数基本环境都支持。

  • 这是一个解决方案,但一个可怕的解决方案。帧率很烂 (2认同)

小智 6

尝试这个 :-

!apt-get install python-opengl -y

!apt install xvfb -y

!pip install pyvirtualdisplay

!pip install piglet


from pyvirtualdisplay import Display
Display().start()

import gym
from IPython import display
import matplotlib.pyplot as plt
%matplotlib inline

env = gym.make('CartPole-v0')
env.reset()
img = plt.imshow(env.render('rgb_array')) # only call this once
for _ in range(40):
    img.set_data(env.render('rgb_array')) # just update the data
    display.display(plt.gcf())
    display.clear_output(wait=True)
    action = env.action_space.sample()
    env.step(action)
Run Code Online (Sandbox Code Playgroud)

这对我有用,所以我想它也应该对你有用。

  • 不适合我,给出以下错误“NameError Traceback(最近一次调用最后)... NameError:名称'base'未定义” (2认同)

dav*_*ugh 5

我最近必须解决同样的问题,并用我的解决方案写了一篇博客文章。为了便于参考,我重新发布了 TLDR;版本在这里。

将此代码粘贴到 Colab 中的单元格中并运行它以安装所有依赖项。

%%bash

# install required system dependencies
apt-get install -y xvfb x11-utils

# install required python dependencies (might need to install additional gym extras depending)
pip install gym[box2d]==0.17.* pyvirtualdisplay==0.2.* PyOpenGL==3.1.* PyOpenGL-accelerate==3.1.*
Run Code Online (Sandbox Code Playgroud)

然后在后台启动虚拟显示。

import pyvirtualdisplay


_display = pyvirtualdisplay.Display(visible=False,  # use False with Xvfb
                                    size=(1400, 900))
_ = _display.start()
Run Code Online (Sandbox Code Playgroud)

博客文章中,我还提供了一个示例模拟演示,证明上述内容确实有效。

  • @elexhobby在这里:https://github.com/drzamoramora/4-Symbolic-AI/blob/main/Otros/1-Lunar-Lander-open-ai-gym.ipynb (2认同)