ずいぶん間が空いてしまいました。
最近、強化学習の勉強用にお魚本を買いました。斎藤さん本は分かりやすくて良いですね。これで3冊目です。
CartPoleというのはOpenAI Gymという強化学習の題材に使えるゲーム環境のひとつです。具体的にはこんなやつ。
棒が倒れないように台座を右へ左へ移動させるわけですが、この操作を学習させます。
お魚本でこのCartPoleを扱っていて参考ソースも公開されています。便利なことにGoogle Colaboのリンクもあるので、すぐに試すことができます。
Google Colaboで実行すればよいのですが、自分のPCで試したくなったのでダウンロードして実行したところ、エラーが出ました。修正は大変ではないのですが、ネットで検索しても出てこなかったので共有します。
その1 step関数の呼び出し部分でエラーが出る
Exception has occurred: ValueError
too many values to unpack (expected 4)
「戻りの値はもっとあるよ」と言われました。正しくは5つなので、下記のようになります。
APIの説明はこちらをどうぞ。doneがterminatedになり、truncatedはとりあえず放置でよいのかな。
ところで、いつ変更されたのでしょうか。
今年(2022年)の7月のようです。ちなみに手元のお魚本の出版は4月です。
その2 dezeroの呼び出し部分でエラーが出る
Exception has occurred: TypeError tuple indices must be integers or slices, not tuple
型が違うということですが、なんでしょうね。step()の仕様が変わっていたので、きっとこれもCartPoleの仕様変更でしょうということで調べました。
reset()の戻りが変わっています。APIの説明はこちらをどうぞ。とりあえず動かすための修正はこんな感じで。
こちらの仕様変更はいつされたのでしょうか。調べてないので分かりませんが、きっと最近なのでしょう。
そして最後の疑問
Google Colaboでエラーが出ないのはなぜ?
答え。古いのがインストールされたから。
Google Colaboの実行ログだと0.25.2がインストールされています。
リリースノートを見ると、0.26.0で変更されたようです。これからOpenAIGymをインストールされる方はお気を付けください。