以前はOpenAI GymはWindowsに対応してなかったが、以下のようにpipからインストールするだけで動くようになっている。
atariも問題なく動く。
pip install gym pip install gym[atari]
ただし、env.render()で描画するとウィンドウの位置変更などができないという問題があった。これは後で書く別の方法で描画すれば回避できる。
とりあえず既にある強化学習の実装を試そうとして、ChainerRLを試してみたがマルチプロセス関係がWindowsでは動かなかったため、PyTorchでつくりながら学ぶ!深層強化学習で引用されていた以下のGitHubのコードを試してみた。
https://github.com/ikostrikov/pytorch-a2c-ppo-acktr-gail
インストール
GitHubのREADMEにある通り、baselinesとrequirements.txtから依存ライブラリのインストールが必要になる。
git clone https://github.com/ikostrikov/pytorch-a2c-ppo-acktr-gail.git # Baselines for Atari preprocessing git clone https://github.com/openai/baselines.git cd baselines pip install -e . # Other requirements cd ../pytorch-a2c-ppo-acktr-gail pip install -r requirements.txt
実行
--num-processesを1にすればWindowsでもそのまま実行できる。
例)
python main.py --env-name "BreakoutNoFrameskip-v4" --num-processes 1
マルチプロセスで動かすには、envs.pyの91行目を以下の通り修正する。
修正前:
envs = ShmemVecEnv(envs, context='fork')
修正後:
envs = ShmemVecEnv(envs, context='spawn')
これで、Windowsでもマルチプロセスで動かせる。
ゲーム画面を描画する
学習を実行すると、コンソールにログしか表示されない。
高速に強化学習するには問題ないが、はじめのうちは学習している過程をゲーム画面で眺めたい。
ゲーム画面を表示するには、main.pyに以下のコードを追加する。
ファイルの先頭:
import cv2
120行目(obs, reward, done, infos = envs.step(action)の後)に追記:
imgs = envs.get_images() cv2.imshow('img', imgs[0]) cv2.waitKey(1)
envsは、OpenAI Gymのenvのマルチプロセス用のラッパーになっている。
get_images()で、マルチプロセスで実行しているすべてのエージェントのゲーム画面が取得できる。
0番目のエージェントの画面のみをOpenCVのimshowで描画する。
waiKey(1)がないと、ウィンドウに描画が更新されないため、1ミリ秒だけキー入力待ちをする処理を入れている。
この方法を使用して前述したenv.render()の問題を回避できる。
env.render()の代わりにenv.render(mode='rgb_array')で画像を取得して描画すればよい。
2019/10/22 追記
mtplotlib.pyplotを使用してもリアルタイムに描画できる。
参考:Running Open AI Gym on Windows 10 – Simon on the Web