Google Colaboratory 中的 openAI Gym NameError

openAI Gym NameError in Google Colaboratory

我刚刚在 Google Colab 上安装了 openAI gym,但是当我尝试 运行 'CartPole-v0' 环境时 explained here

代码:

import gym
env = gym.make('CartPole-v0')
for i_episode in range(20):
    observation = env.reset()
    for t in range(100):
        env.render()
        print(observation)
        action = env.action_space.sample()
        observation, reward, done, info = env.step(action)
        if done:
            print("Episode finished after {} timesteps".format(t+1))
            break

我明白了:

WARN: gym.spaces.Box autodetected dtype as <class 'numpy.float32'>. Please provide explicit dtype.
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-19-a81cbed23ce4> in <module>()
      4     observation = env.reset()
      5     for t in range(100):
----> 6         env.render()
      7         print(observation)
      8         action = env.action_space.sample()

/content/gym/gym/core.py in render(self, mode)
    282 
    283     def render(self, mode='human'):
--> 284         return self.env.render(mode)
    285 
    286     def close(self):

/content/gym/gym/envs/classic_control/cartpole.py in render(self, mode)
    104 
    105         if self.viewer is None:
--> 106             from gym.envs.classic_control import rendering
    107             self.viewer = rendering.Viewer(screen_width, screen_height)
    108             l,r,t,b = -cartwidth/2, cartwidth/2, cartheight/2, -cartheight/2

/content/gym/gym/envs/classic_control/rendering.py in <module>()
     21 
     22 try:
---> 23     from pyglet.gl import *
     24 except ImportError as e:
     25     reraise(prefix="Error occured while running `from pyglet.gl import *`",suffix="HINT: make sure you have OpenGL install. On Ubuntu, you can run 'apt-get install python-opengl'. If you're running on a server, you may need a virtual frame buffer; something like this should work: 'xvfb-run -s \"-screen 0 1400x900x24\" python <your_script.py>'")

/usr/local/lib/python3.6/dist-packages/pyglet/gl/__init__.py in <module>()
    225     else:
    226         from .carbon import CarbonConfig as Config
--> 227 del base
    228 
    229 # XXX remove

NameError: name 'base' is not defined

问题和this question about NameError in openAI gym

一样

未呈现任何内容。我不知道如何在 google colab 中使用它:'xvfb-run -s \"-screen 0 1400x900x24\" python <your_script.py>'"

健身房通常会使用 GL 在您的屏幕上呈现显示。

但 Colab 在网络上 运行 作为笔记本,无法直接显示在屏幕上。只能通过HTML.

显示结果

如果有人修改 Gym 来操纵 WebGL,也许有一天。但不是现在。

哈维尔,你能找到解决这个问题的办法吗?我正在尝试使用 OenAIs 新环境 "gym retro" 并在调用 make 时遇到相同类型的错误。但正如你所说,我认为使用 xvfb 应该可以解决问题并让程序 运行,但我们当然无法以图形方式查看环境。但问题是不允许xvfb在后台运行! xvfb :99 & 引发 OSError: 不支持后台进程。

在 google colab 中渲染健身房环境的一种方法是在 运行 环境中使用 pyvirtualdisplay 和存储 rgb 帧数组。可以使用 matplotlib 的动画功能和用于 Ipython 显示模块的 HTML 函数对环境帧进行动画处理。 您可以找到实现 here。 确保安装所需的库,您可以在 colab 的第一个单元格中找到这些库。如果 google colab 的第一个 link 不起作用,您可以查看 this one

我看到了一个合适的答案

pip install pyglet==1.5.11

只需复制粘贴即可

%%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.*

#import
import pyvirtualdisplay
_display = pyvirtualdisplay.Display(visible=0,  # remember to use visible=0 and not False
                                    size=(1400, 900))
_ = _display.start()

#check
!echo $DISPLAY