我通过 Jupiter 在 p2.xlarge AWS服务器上运行 python 2.7脚本(Ubuntu 14.04)。我希望能够进行我的模拟。
最少的工作范例
import gym
env = gym.make('CartPole-v0')
env.reset()
env.render()
env.render()
(除其他外)犯了以下错误:
...
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>'")
...
NoSuchDisplayException: Cannot connect to "None"
我想一些如何能够看到模拟。如果我能让它内联,那将是理想的,但任何显示方法都不错。
编辑 : 这只是一些环境的问题,比如经典控件。
更新 I
受到 这个的启发,我尝试了以下方法,而不是 xvfb-run -s \"-screen 0 1400x900x24\" python <your_script.py>
(我无法使用它)。
xvfb-run -a jupyter notebook
运行我现在得到的原始脚本
GLXInfoException: pyglet requires an X server with GLX
更新二
问题 # 154似乎相关。我试图禁用弹出式窗口,并直接创建 RGB 颜色
import gym
env = gym.make('CartPole-v0')
env.reset()
img = env.render(mode='rgb_array', close=True)
print(type(img)) # <--- <type 'NoneType'>
img = env.render(mode='rgb_array', close=False) # <--- ERROR
print(type(img))
我得到 ImportError: cannot import name gl_info
。
更新 III
在@梅毒的启发下,我尝试创建一个视频文件,然后渲染它(一个完全令人满意的解决方案)。
使用来自‘ 记录和上传结果’的代码
import gym
env = gym.make('CartPole-v0')
env.monitor.start('/tmp/cartpole-experiment-1', force=True)
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
env.monitor.close()
我尝试按照你的建议,但从运行 env.monitor.start(...
时得到 ImportError: cannot import name gl_info
。
根据我的理解,问题在于 OpenAI 使用 pyglet
,而 pyglet
“需要”一个屏幕来计算要渲染的图像的 RGB 颜色。因此,有必要欺骗 python,让它认为有一个连接的监视器
更新 IV
仅供参考,网上有一些使用大黄蜂的解决方案,似乎很有效。如果您可以控制服务器,这应该可以工作,但是因为 AWS 在 VM 中运行,所以我认为您不能使用它。
更新 V
Just if you have this problem, and don't know what to do (like me) the state of most environments are simple enough that you can create your own rendering mechanism. Not very satisfying, but.. you know.