質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.37%

  • Python 3.x

    2391questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Jupyter

    55questions

OpenAI Gymのサンプルコードを実行するとNotImplementedErrorが出る

解決済

回答 1

投稿 2017/12/08 11:35

  • 評価
  • クリップ 0
  • VIEW 50

Thurston

score 1

OpenAI Gymを使って強化学習の勉強を始めたのですがサンプルコードの部分でつまずいてしましました。
良ければ助言をいただきたいです。よろしくお願いします。

発生している問題・エラーメッセージ

NotImplementedError                       Traceback (most recent call last)
<ipython-input-32-3093026983cb> in <module>()
4     observation = env.reset()
5     for t in range(100):
----> 6         env.render()
7         print(observation)
8         action = env.action_space.sample()

~\Anaconda3\lib\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\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\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\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\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\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\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\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

該当のソースコード

import gym
env = gym.make('CartPole-v0')
for i_episode in range(20):
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.render()をenv.render(close = True)にするとエラーは出ないのですが、これをすると結果が描写されないので解決にはなっていないと思われます。

補足情報(言語/FW/ツール等のバージョンなど)

python3でjupyterを使っています。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

full installしていなければpip install -e '.[classic_control]' が必要と記載されています。

Classic control

If you didn't do the full install, you will need to run pip install -e '.[classic_control]' to enable rendering.

jupyter上でエラー再現しました。OpenGL描画のスクリーン取得できず失敗しているようです。
ターミナル上から実行すると、倒立振り子のウインドウが開き、正常に?動作しました。

import gym
env = gym.make('CartPole-v0')
for i_episode in range(20):
    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
> python temp.py
略
[ 0.09110893  0.42872795 -0.14344982 -0.85604103]
[ 0.09968349  0.62548264 -0.16057064 -1.19017143]
[ 0.11219315  0.822279   -0.18437407 -1.52857381]
Episode finished after 17 timesteps

>


イメージ説明

検索してみたら面白いものが見つかりました。jupyter上でgymを動作させることができるようです。
描画部分はVNCに渡すような感じのようです。
導入のハードルは高そうですが、参考まで。
paulsuda/jupyter-gym-vnc

投稿 2017/12/08 11:53

編集 2017/12/08 14:34

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/08 12:26

    ありがとうございますm(_ _)m
    早速
    !pip install -e '.[classic_control]'を実行したのですが

    '.[classic_control]' should either be a path to a local project or a VCS url beginning with svn+, git+, hg+, or bzr+
    という警告がでてしまいました
    これも検索したのですがわかりませんでした…

    キャンセル

  • 2017/12/08 12:59

    http://python-packaging-user-guide-ja.readthedocs.io/ja/latest/installing.html#vcs
    [classic_control]は具体的なパスを指定する必要があるようです。
    公式のインストール手順のどこかに記載があると思いますのでひととおり確認ください。

    キャンセル

  • 2017/12/08 13:30

    !pip install gym[classic_control]
    でインストールできたようなのでサンプルを試しましたが同じエラーが出てきてしまいました…

    キャンセル

  • 2017/12/08 13:44

    jupyter上でエラー再現しました。
    jupyter上だとスクリーン取得できずレンダリングできない感じですね。

    キャンセル

  • 2017/12/08 14:16 編集

    わざわざありがとうございますm(_ _)m
    https://qiita.com/bpzAkiyama/items/94ebd897c37ba4176492
    https://qiita.com/mittyantest/items/2ea07b0f8d5976f29da9
    ここも参考にしていたのですがよくわからなくて…
    ですがターミナルでしてみたら同じように結果が描写されました!ありがとうございます
    jupyter便利だったのですがこれを進めるときは使わないようにしてみます

    キャンセル

  • 2017/12/08 14:37

    jupyter上でレンダリングは別スクリーンにまかせる手法はあるようですが、難易度は高いと思います。
    動作させるだけなら素直に端末から行った方がよいでしょう。

    キャンセル

  • 2017/12/08 15:08

    そうしたいと思います
    VNC?の利用は知識が追いついてからにしたいと思います
    ありがとうございましたm(_ _)m

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.37%

関連した質問

同じタグがついた質問を見る

  • Python 3.x

    2391questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Jupyter

    55questions