YutaroOgawa / Deep-Reinforcement-Learning-Book

書籍「つくりながら学ぶ!深層強化学習」のサポートリポジトリです
MIT License
336 stars 157 forks source link

3_2_try_CartPole.ipynb にて TypeError #9

Open yujikaneko opened 4 years ago

yujikaneko commented 4 years ago

お世話になっております. 当方の環境で 3_2_try_CartPole.ipynb を実行すると,下記のような TypeError が出て困っています.

環境

エラー

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-649a9cc1e6eb> in <module>
      6 
      7 for step in range(0, 200):
----> 8     frames.append(env.render(mode='rgb_array'))  # framesに各時刻の画像を追加していく
      9     action = np.random.choice(2)  # 0(カートを左に押す), 1(カートを右に押す)をランダムに返す
     10     observation, reward, done, info = env.step(action)  # actionを実行する

/opt/anaconda3/lib/python3.7/site-packages/gym/core.py in render(self, mode, **kwargs)
    231 
    232     def render(self, mode='human', **kwargs):
--> 233         return self.env.render(mode, **kwargs)
    234 
    235     def close(self):

/opt/anaconda3/lib/python3.7/site-packages/gym/envs/classic_control/cartpole.py in render(self, mode)
    211         self.poletrans.set_rotation(-x[2])
    212 
--> 213         return self.viewer.render(return_rgb_array=mode == 'rgb_array')
    214 
    215     def close(self):

/opt/anaconda3/lib/python3.7/site-packages/gym/envs/classic_control/rendering.py in render(self, return_rgb_array)
    113             buffer = pyglet.image.get_buffer_manager().get_color_buffer()
    114             image_data = buffer.get_image_data()
--> 115             arr = np.frombuffer(image_data.get_data(), dtype=np.uint8)
    116             # In https://github.com/openai/gym-http-api/issues/2, we
    117             # discovered that someone using Xmonad on Arch was having

TypeError: get_data() missing 2 required positional arguments: 'format' and 'pitch'
YutaroOgawa commented 3 years ago

本書も古くなり、当初動いていたものが動かず、 大変ご迷惑とお時間の損失を与えてしまい、申し訳ございません。 (はじめから、コードにバージョンの固定をガチガチにしておくべきでした)

本件については、 https://github.com/YutaroOgawa/Deep-Reinforcement-Learning-Book/issues/8

の pip uninstall matplotlib pip install matplotlib==2.2.5

https://github.com/YutaroOgawa/Deep-Reinforcement-Learning-Book/issues/8#issuecomment-614959081

でgymをバージョン0.97

そして、pyglet 1.2.4

と、

gym 0.9.7 matplotlib 2.2.5 pyglet 1.2.4

にそろえて実行すると、実行画面は1回、別ウィンドウで表示され、 コードのフォルダにmp4ができることは確認されています。

お手数ですが、こちらで試していただけますでしょうか? お時間をとり、大変申し訳ございませんが、どうぞよろしくお願い致します。

yokoshou commented 3 years ago

お世話になっております。

わたくしの環境でも、同様の個所でエラーが発生しました。 (Errorメッセージは”xxx object has no attribute ..."といった内容でした) 上記のバージョンで試してみたのですが、上手くいかなかったため、 バージョンをいろいろ変更して試してみたところ、下記の組み合わせで上手く動作しました。

os: windows10 python: 3.8.5 gym:0.17.1 pyglet:1.5.0

 私の場合は、pip install gym==0.17.1とすると対応バージョンのpygletが自動でインストールされました。 こちらの組み合わせでmp4が出力されるところまで確認できました。 もしお困りの方がいらっしゃれば試してみてください。

YutaroOgawa commented 3 years ago

@yokoshou さま

貴重な情報をまことにありがとうございます。 多くの読者の皆さまの参考になり、とても助かります。

みなさまぜひ上記情報、ご活用くださいませ。

yujikaneko commented 3 years ago

@YutaroOgawa さん,ご返信遅くなりました.ご対応ありがとうございました.また@yokoshou さん,情報ありがとうございます.

私の方は,OpenAI Gym の Monitor を使って,Google Colab で動作・結果描画するようにしてみました. https://gist.github.com/yujikaneko/c7a0a074cdebdb77c26146cf91a9d9e2

from gym.wrappers import Monitor
def wrap_env(env):
  env = Monitor(env, './video', force=True)
  return env

env = wrap_env(gym.make("CartPole-v0"))

という感じです.

YutaroOgawa commented 3 years ago

@yujikaneko さま

貴重な情報をありがとうございます。 本章はAnacondaでローカルを想定して執筆していますが、 やはりGoogleCoalboratoryでやりたい方は多いので、大変貴重な情報です。

ご共有いただき、ありがとうございます。

読者のみなさまも、ぜひGoogle Cloaboratoryでやりたい場合には上記の投稿をご参考くださいませ。