Я запускаю скрипт python 2.7 на сервере p2.xlarge AWS через Jupyter (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
Обновление II
Проблема № 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
Вдохновленный @ Torxed, я попытался создать видеофайл, а затем отрендерить его (полностью удовлетворительное решение).
Использование кода из Запись и загрузка результатов
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()
Я попытался последовать вашим предложениям, но получил ImportError: cannot import name gl_info
при запуске env.monitor.start(...
.
Насколько я понимаю, проблема в том, что OpenAI использует pyglet
, а pyglet
«нужен» экран для вычисления цветов RGB изображения, которое должно быть визуализировано. Следовательно, необходимо обмануть python, чтобы он подумал, что к нему подключен монитор
Обновление IV
К вашему сведению, в Интернете есть решения с использованием шмеля, которые, похоже, работают. Это должно работать, если у вас есть контроль над сервером, но, поскольку AWS работает на виртуальной машине, я не думаю, что вы можете это использовать.
Обновить V
Просто если у вас есть эта проблема и вы не знаете, что делать (как я), состояние большинства сред достаточно простое, чтобы вы могли создать свой собственный механизм рендеринга. Не очень приятно, но .. знаете ли.
VideoRecorder
как частьenv.wrapper.Monitor
теперь вызываетenv.render
напрямую. - person mpacer   schedule 12.06.2017