我正在尝试在谷歌Colab中使用OpenAI gym。由于笔记本正在远程服务器上运行,因此无法呈现gym的环境。
我找到了一些Jupyter notebook的解决方案,但是由于我没有访问远程服务器,因此这些解决方案在colab上不起作用。
我想知道是否有人知道适用于谷歌Colab的解决方法?
我正在尝试在谷歌Colab中使用OpenAI gym。由于笔记本正在远程服务器上运行,因此无法呈现gym的环境。
我找到了一些Jupyter notebook的解决方案,但是由于我没有访问远程服务器,因此这些解决方案在colab上不起作用。
我想知道是否有人知道适用于谷歌Colab的解决方法?
卡拉科特的答案不正确。
您确实可以使用matplotlib在colaboratory中渲染OpenAI Gym,尽管速度有点慢。
以下是方法:
安装xvfb和其他依赖项(感谢彼得的评论)
!apt-get install x11-utils > /dev/null 2>&1
!pip install pyglet > /dev/null 2>&1
!apt-get install -y xvfb python-opengl > /dev/null 2>&1
除了pyvirtual display外:
!pip install gym pyvirtualdisplay > /dev/null 2>&1
然后导入所有需要的库,包括 matplotlib 和 ipythondisplay:
import gym
import numpy as np
import matplotlib.pyplot as plt
from IPython import display as ipythondisplay
如果你想从pyvirtual display导入Display并初始化屏幕大小,例如400x300... :
from pyvirtualdisplay import Display
display = Display(visible=0, size=(400, 300))
display.start()
最后但并非最不重要的,使用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()
以下是展示杆平衡问题的Colaboratory工作笔记链接:
https://colab.research.google.com/drive/16gZuQlwxmxR5ZWYLZvBeq3bTdFfb1r_6
注意:并非所有Gym环境都支持“rgb_array”渲染模式,但大多数基本环境都支持。
apt --fix-broken install
,问题也无法解决。 - lixiang!apt-get install x11-utils > /dev/null 2>&1
和!pip install pyglet==v1.3.2
。 - Peternvidia-xconfig
来创建 GL 上下文。 - Dylan试试这个:-
!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)
这对我有效,所以我猜它也会对你有效。
我最近也遇到了同样的问题,并已经写了一篇博客文章介绍我的解决方案,你可以点击这里查看。为了方便参考,以下是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.*
然后在后台启动一个虚拟显示器。
import pyvirtualdisplay
_display = pyvirtualdisplay.Display(visible=False, # use False with Xvfb
size=(1400, 900))
_ = _display.start()
matplotlib
,就像其他答案一样(请注意,在初始化 gym 环境时设置渲染模式,而不是在调用渲染时)。从 @JuanZamora 的评论中链接的代码通过在模拟期间汇总帧,然后使用 matplotlib.animation
在之后播放它们来实现更平滑的渲染 - 我鼓励 Juan 将其作为单独的答案提交,因为它比这里的其他答案更好! - RobinGower
现在在吃豆人阶段出现了错误:
异常 Traceback (most recent call last) <ipython-input-7-b5464006c7a8> in <module>() ----> 1 env = wrap_env(gym.make("MsPacman-v0"))异常: 缺少ms_pacman的ROM,请参见https://github.com/openai/atari-py#roms以获取说明。 - vwvan