ずいぶん間が空いてしまいました。

最近、強化学習の勉強用にお魚本を買いました。斎藤さん本は分かりやすくて良いですね。これで3冊目です。

[cover photo]
ゼロから作るDeep Learningの第4弾
強化学習編
斎藤 康毅氏
名著だと思います。

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をインストールされる方はお気を付けください。