问题描述
我正在与使用健身房中的CartPole-v0的RL合作实验室一起玩。我通过连接到远程centOS 7.3服务器(而不是Google驱动器)的jupyter打开了iPython笔记本。以下代码可在Google colab下正确呈现直角图,但无法在我的jupyter设置下呈现:
!pip install gym[classic_control]
import gym
env = gym.make('CartPole-v0')
env.reset()
img = env.render('rgb_array')
plt.imshow(img)
这是我启动Jupyter笔记本的方式:
xvfb-run -a -s "-screen 0 1400x900x24" jupyter notebook
显然,渲染的图像具有未初始化的尺寸或0尺寸。无论是否使用Jupyter,都是如此。
这是完整的错误:
我在pyglet/image/__init__.py
中的错误之前打印了该行
def get_image_data(self):
# xxx = glubyte * (len(self.format) * self.width * self.height)
print(glubyte,len(self.format),self.width,self.height) # my code
buffer = (glubyte * (len(self.format) * self.width * self.height))()
结果为(4 0 0)
或(4 1551512832 274094153)
,据我推断宽度和高度未初始化。但是我对内部不够了解,无法进一步调试。在前一种情况下,MemoryError变成某种错误,表明无法渲染大小为零的图像。
任何见识都值得赞赏。以下是一些相关线程:
How to run OpenAI Gym .render() over a server
https://blog.csdn.net/chestnutss/article/details/100734523
解决方法
我通过以下一系列命令设法解决了环境问题:
sudo yum install python-xvfbwrapper.noarch
sudo yum install mesa-dri-drivers
sudo yum install xorg-devel libglu1-mesa libgl1-mesa-devel libxinerama1 libxcursor1
sudo yum install glxinfo
sudo yum -y install freeglut-devel
然后,以下渲染在连接到服务器的Jupyter浏览器笔记本中起作用
import gym
import matplotlib.pyplot as plt
env = gym.make('CartPole-v0')
env.reset()
img = env.render('rgb_array')
plt.imshow(img)