Трудности с графикой AI-Gym Python в ноутбуках Jupyter
Я пытаюсь заставить демонстрации AI-Gym отображаться в записных книжках Jupyter. Я получаю хорошие результаты для демонстрации Atari Breakout-v0
и трудное сообщение об ошибке для демоверсии CartPole-v0
, Оба отлично работают вне ноутбуков. Ниже приведены минимальные детали:
БЕЗ ЮПИТЕРА
На консоли:
$ pip install gym[atari] &> /dev/null
$ /anaconda3/bin/python3
Python 3.6.3 |Anaconda, Inc.| (default, Oct 6 2017, 12:04:38)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import gym
>>> env = gym.make('Breakout-v0')
>>> env.reset()
>>> env.render()
Результат:
Теперь, также с cart-pole, в новой сессии Python:
$ pip install gym &> /dev/null
$ /anaconda3/bin/python3
Python 3.6.3 |Anaconda, Inc.| (default, Oct 6 2017, 12:04:38)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> env = gym.make('CartPole-v0')
>>> env.reset()
>>> env.render()
Единственное отличие от приведенного выше кода Python - это название демо: CartPole-v0
вместо Breakout-v0
,
С ЮПИТЕРОМ
Следуя некоторым подсказкам из этого SO вопроса: Как запустить OpenAI Gym .render() на сервере, у меня есть это для Breakout
демо:
или в тексте:
import gym
from IPython import display
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
env = gym.make('Breakout-v0')
env.reset()
img = plt.imshow(env.render(mode='rgb_array'))
img.set_data(env.render(mode='rgb_array'))
display.display(plt.gcf())
display.clear_output(wait=True)
Теперь для тележки, снова с новым сеансом ядра и ноутбуком, и единственное отличие состоит в названии демо:
import gym
from IPython import display
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
env = gym.make('CartPole-v0')
env.reset()
img = plt.imshow(env.render(mode='rgb_array'))
img.set_data(env.render(mode='rgb_array'))
display.display(plt.gcf())
display.clear_output(wait=True)
Я получаю очень длинное сообщение об ошибке с жалобой на то, что некоторый класс pyglet является абстрактным. Последний элемент трассировки стека следующий:
/anaconda3/lib/python3.6/site-packages/pyglet/canvas/base.py in get_screens(self)
63 :rtype: list of :class:`Screen`
64 '''
---> 65 raise NotImplementedError('abstract')
66
67 def get_default_screen(self):
NotImplementedError: abstract
Весь след стека находится внизу для проверки. Я прочитал его, но не смог определить проблему и как ее исправить. Буду благодарен за совет.
Подвести итоги,
NO JUPYTER:
Breakout: OK
CartPole: OK
JUPYTER:
Breakout: OK
CartPole: ERROR
Трассировка всего стека выглядит следующим образом:
NotImplementedError Traceback (most recent call last)
<ipython-input-1-df4d39818fe3> in <module>()
6 env = gym.make('CartPole-v0')
7 env.reset()
----> 8 img = plt.imshow(env.render(mode='rgb_array'))
9 img.set_data(env.render(mode='rgb_array'))
10 display.display(plt.gcf())
/anaconda3/lib/python3.6/site-packages/gym/core.py in render(self, mode, close)
148 elif mode not in modes:
149 raise error.UnsupportedMode('Unsupported rendering mode: {}. (Supported modes for {}: {})'.format(mode, self, modes))
--> 150 return self._render(mode=mode, close=close)
151
152 def close(self):
/anaconda3/lib/python3.6/site-packages/gym/core.py in _render(self, mode, close)
284
285 def _render(self, mode='human', close=False):
--> 286 return self.env.render(mode, close)
287
288 def _close(self):
/anaconda3/lib/python3.6/site-packages/gym/core.py in render(self, mode, close)
148 elif mode not in modes:
149 raise error.UnsupportedMode('Unsupported rendering mode: {}. (Supported modes for {}: {})'.format(mode, self, modes))
--> 150 return self._render(mode=mode, close=close)
151
152 def close(self):
/anaconda3/lib/python3.6/site-packages/gym/envs/classic_control/cartpole.py in _render(self, mode, close)
114 if self.viewer is None:
115 from gym.envs.classic_control import rendering
--> 116 self.viewer = rendering.Viewer(screen_width, screen_height)
117 l,r,t,b = -cartwidth/2, cartwidth/2, cartheight/2, -cartheight/2
118 axleoffset =cartheight/4.0
/anaconda3/lib/python3.6/site-packages/gym/envs/classic_control/rendering.py in __init__(self, width, height, display)
49 self.width = width
50 self.height = height
---> 51 self.window = pyglet.window.Window(width=width, height=height, display=display)
52 self.window.on_close = self.window_closed_by_user
53 self.geoms = []
/anaconda3/lib/python3.6/site-packages/pyglet/window/__init__.py in __init__(self, width, height, caption, resizable, style, fullscreen, visible, vsync, display, screen, config, context, mode)
502
503 if not screen:
--> 504 screen = display.get_default_screen()
505
506 if not config:
/anaconda3/lib/python3.6/site-packages/pyglet/canvas/base.py in get_default_screen(self)
71 :rtype: :class:`Screen`
72 '''
---> 73 return self.get_screens()[0]
74
75 def get_windows(self):
/anaconda3/lib/python3.6/site-packages/pyglet/canvas/base.py in get_screens(self)
63 :rtype: list of :class:`Screen`
64 '''
---> 65 raise NotImplementedError('abstract')
66
67 def get_default_screen(self):
NotImplementedError: abstract
1 ответ
Просто напишите
.py
script и рендеринг будет выполнен в новом окне. Работал на Mac для меня!