PFRLでAtariの学習を走らせようと思ったときに,バージョン周りの問題で動かなかったので,その事例と解決方法をメモしておく.もしかしたら,最新のcommitで解決済みかもしれないが.
AttributeError: 'numpy.random._generator.Generator' object has no attribute 'randint'
atari_wrapperのnoopの付近で発生するエラー.gymの方のenvの初期化ではちゃんとRandomNumberGenerator()が入るはずなのに(初期化時はNoneが入り,呼び出したときに初めてRandomNumberGeneratorが入る),なぜかnumpyの方のGeneratorで初期化されてしまう.numpyの方のGeneratorにはrandintが無いので,エラーが出る.
原因はおそらくALE (Arcade Learning Environment)を作るale-py.最新バージョンの0.7.5だとうまく行かず,0.7.4にダウングレードすると動くようになる.randintは今後消える可能性があるので,理想的にはこれを使わないのが一番ではある.
pip install ale-py==0.7.4
ImportError: cannot import name 'Monitor' from 'gym.wrappers'
wrapper.monitor周りのエラー.これについては調べればすぐに解決方法が見つかるが,gymのバージョンが0.23.0以上の場合に発生するエラー.0.22.0以下にダウングレードすれば解決する.
pip install gym[atari]==0.22.0
まとめ
上記をまとめると,以下のようにインストールすれば動く (はず (python==3.8.4))
pip install gym[atari, accept-rom-license]==0.22.0
pip install ale-py==0.7.4