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
我刚刚在 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