朝、これ書いたんですよ。それから1日中、環境がうまく動作しなくてあれこれやってました。。。もう何をやっているのやら、でした。
pyenv系がうまく動作しなかったので、VMware fusionいれたり、Vitualboxでやったり、UTMでやったり、Dockerでやったりして、結局、pyenvに戻ってきました。何をやっているのやら、とりあえず動作したのが以下の手順です。まだ最初のコードしか動かしていません。後ろの章では動かない可能性が大いにあります。。。
翌日、ちょい追記します。結局、昨日は1日中これをやっていました。何といいますかこういう本の難しさを痛感しますね。手順として掲載されたときには問題ない手順でも1年2年すると全然動かなくなるってことです。特に手順ではバージョン無指定で書かれていても(つまりその当時の最新版を入れることを意味しているが)、時間が経つとそれらもバージョンアップしていくわけでその手順では動作しなくなります。一応、この本にも主要なライブラリのバージョンは明記されているのですが、本当をいえば使用したライブラリの依存関係やバージョン条件(Pipfile.lock?)のようなものを同時に配布すべきなんじゃないかなと思うんですね。これだけ使用するソフトウェアが多いと本当に奇跡的な条件で動作しているものを本に書いている可能性もあるわけです。現時点でPython3.6を入れることはできますが様々な要因で使えない場合があります。特にtensorflowになりますが。ほんと、辛いですね。本としての価値がないわけではないですが、初心者がこの本を読んで動かすことはまず不可能と考えてよいと思います。あるあるですが1日という時間が溶けていきました。
準備(書籍に書いているもの)
Xcodeいれる。入ってたらパス。
sudo xcodebuild -license accept
Homebrewいれる。入ってたらパス。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/ install/master/install)"
必要なライブラリを入れる。とりあえずやっとけ。swigは入ってないのでいれておく。
brew install cmake boost boost-python sdl2 swig wget
そして、pyenvです。3.8を使用します(昨日の朝は3.7でやってましたが4章でtensorflowを使うと2.0以降になりそうなると3.8以降じゃないと動きません)。3.6だとpipenv shellが実行できず。3.8だとgymがうまく入りませんでした。なんて際どい依存関係にあるのやら。。。借り物競走だからしかたがないですね、最近の開発は。
pyenv install 3.8
あと、サンプルコードもこちらからダウンロードしておきます。
環境構築
openai_bookフォルダの中に上記でダウンロードしたsample.zipをいれておきましょう。ちなみに以下のunzipですがmacのunzipでは解凍できません。ダブクリしましょう。雰囲気を伝える書いています。あと、pyenv local 3.8もなくてもいいです。venvの世界でのpythonバージョンは「pipenv --python 3.8」によって規定されるようですので。
mkdir openai_book cd openai_book #unzip sample.zip pyenv local 3.8 pipenv --python 3.8 pipenv shell
で、pipenv shellの中で以下を実行します。バージョン指定をpipenvでやるとうまく動作しないんですよね。。。簡易ツールだからか?指定の仕方がそもそも違うのか?でもpipenvでいれようがpipenv shell後にpipでいれようが、結局はvenv環境に入るので違いはないように見えます。仕組みがわかってないからなぁ。。。
pip install setuptools==65.5.0 "wheel<0.40.0" pip install "gym==0.22.0" pip install "gym[box2d]==0.22.0" pip install "gym[atari]==0.22.0"
とりあえずここまでで3章のサンプルは動作します。

なんか場合によっては「OverflowError: signed short integer is greater than maximum」というエラーがでますが調べてもよくわかりませんでした。パラメタの順番が変わっているかと思うのですがドキュメントを見る限り正しいようなので。
そして、4章です。Baselineを扱います。なぜかcmakeをまた入れていますが気にしません。誤植でしょう。サポートページがないんですね。。。リポジトリもない。この本、ない理由がわかるような気がします。進歩が早すぎてたぶんまともにフォローできないと思います。新しい本を書くくらいエネルギーが必要じゃないかと。勝手な想像です。
brew install cmake openmpi
つづいて電池をいれます。M1 Macではtensorflowが鬼門ですが。とりあえず3.8で入れられる最低のバージョンにしました。最新と何が違うのかは調べていません。とにかく動けばいいです。本当はtensorflowの1.14.0を入れたかったんですが。。。
pip install "stable-baselines[mpi]==2.8.0" pip install tensorflow==2.13.0 pip install pyqt5 pip install imageio
これで4章のアプリもとりあえず最初のアプリが動作します。全部はまだ試していませんが、たぶん動くと思います。 残念ながら動きませんでした。エラーメッセージは以下です。tensorflowです。こいつのせいです。ぐぐるとtensorflow==1.14.0以下じゃないとこうなるらしいです。ググると新しいライブラリがあるようなのでimport等の指定を修正する必要があるようです。ここで昨夜1時くらいになったので寝ました。この本はもうこの辺でやめようかと思います。修正したらまた修正が必要になるでしょう。ざーっと読んであとは最新の環境GymnasiumやBaselineのドキュメントをみならがチュートリアルを動かす感じがいいのかもしれません。
ModuleNotFoundError: No module named 'tensorflow.contrib'
このバージョンを探すまで1日かかりました。。。仮想環境(Vitrualbox、UTM、VMware fusion)やAWS Cloud9やDockerやWindowでanacondaや。なんか楽にいれられないかやりましたが、Linux系では意外なほどにPythonのバージョン切り替えが難しく。ネットにあるようなやりかたがうまく動作しませんでした。知識不足です。あと、Colaboratoryもやりました。これも3.6にすることはできたんですがその他のライブラリがうまく入らなかったりそもそもPythonコードを貼り付けても結局は元からあるバージョン3.10が動作するとか。。。なんか辛かったです。
もし、うまくいかなかったら試す手順は以下です。
本書に書かれている手順のうち、まず、バージョン無指定のpip installではバージョン指定が必ず必要になる、ということです。じゃ、どのバージョンなのか?ですが、一応、本書の67ページに主なソフトのライブラリが書かれています。本書ではPython3.6.7で試しているそうです。入れられなくはないのですが、結局、周りのライブラリが入れられないものあるので、結局入れられないのと同じです。でも、参考にはなります。ただ、上記のようにPython自体を3.8にするとこれら書かれたバージョンは入れられなくなるのでとりあえず複数選択候補があるうちpipのエラーメッセージにでてきた最低のバージョンから順に入れてみるを繰り返しました。それがいいのかどうかもわかりません。とりあえず動けば良いというだけの価値観です。これをエンジニアリングというのか?程遠い話ですね。
ということでゼミのメモでした。本質的なことは何もわかっていない。。。状況です。それでも結果的には動かせましたので少しずつ試していきたいと思います。というか、最新のものを使わないと無理ですね。。。怠けて本を買って読もうというのが負けているのかもしれません。