強化学習ライブラリのOpenAI Gymを触ってみる
こんにちは、株式会社co-meetingの町田(@mcho71)です。
先日、Deep Learning Carと言うタイトルの動画を見て、意思があるような動きをすることが面白く思えて、自分でも作ってみたいと思い調べていたところ、強化学習のライブラリである Gym を見つけました。Gym は、Pythonで強化学習の標準APIを提供するライブラリです。手元にはPythonの環境はなく、数年前の記憶を元に手探りで環境構築をしました。Gym を動かすまでに行ったPythonの環境構築、Gymのサンプルを動かしたことを書いてみます。
この記事を簡単にまとめると
Pythonの環境構築は、バージョン管理にpyenv、仮想環境作成にvenv を使いました。
Gym と openai/retro: Retro Games in Gym のサンプルを動かしています。
まずは Python の環境を用意する
Python 自体普段は触っていないので手探りでした。
ローカル環境は
MacOS Monterey 12.3.1
Homebrew
です。
Python 本体、複数バージョンを管理するための候補は
Homebrew
pyenv
miniconda
anaconda
でした。
仮想環境の候補としては
venv
pyenv-virtualenv
pipenv
miniconda
anaconda
がありました。
Python 本体、複数バージョンの管理は、他の言語でも使い慣れているpyenvを選びました。
仮想環境は、venvを使うことにしたのは、公式のvenv --- 仮想環境の作成 — Python 3.10.4 ドキュメントで紹介されていたことが決め手でした。
以前 Python を触っていたときに使っていたpipenvは開発が止まっていたこと、conda系は動かすだけだとコマンド追加などで過剰に感じたことも、後押ししました。
pyenv-virutualenvはvenvと同じ動作で使えますが、標準ライブラリとして取り込まれているvenvの方がなんとなく軽くてエラーが発生しないかなと思ってます。
venvとvirtualenvの違いは、Virtualenv — virtualenv documentationより、機能の多さ、動作の軽さのようです。
以下開発環境構築時のコマンドラインです。
brew install pyenv pyenv-virtualenv
# 以下二行を.bash_profile等に書き込む
# eval "$(pyenv init -)"
# eval "$(pyenv virtualenv-init -)"
pyenv install 3.8.8
cd path/to/project
pyenv local 3.8.8
python -m venv <venvname>
source <venvname>/bin/activate
pip install --upgrade pip
Gym を触ってみる
以下のドキュメントを参考に、Gym を動かします。また、レトロゲームが動かせるopenai/retro: Retro Games in Gymも触ってみます。
動作確認
※pythonのバージョンは3.7以上で実行してください。
git clone https://github.com/openai/gym
pip install -e .
pip install pygame
touch cartpole.py
cartpole.pyを以下に書き換えます。
import gym
env = gym.make("CartPole-v1")
observation, info = env.reset(seed=42, return_info=True)
for _ in range(1000):
env.render()
action = env.action_space.sample()
observation, reward, done, info = env.step(action)
if done:
observation, info = env.reset(return_info=True)
env.close()
cartpole.pyを実行します
python cartpole.py
GUIが開き、ステップの様子が表示されたら正常に実行できています。
openai/retro: Retro Games in Gymを動かしてみる
Getting Started — Gym Retro documentation
pip install gym-retro
python -m retro.examples.interactive --game Airstriker-Genesis
上記のコマンドを実行すると、Airstriker-Genesisを自分で操作できるGUIが立ち上がります。
学習アルゴリズムは、なし なので、ステップによる値の変化は有りません。
retro/retro/examples at master · openai/retroに、キャラクターの操作処理の例があり、評価アルゴリズムが組み込まれているものから、ランダムなものなどがあります。Getting Started — Gym Retro documentationに、各操作処理の解説が書いてあります。
以下のコードで使えるゲーム一覧を表示できます。ROM が同梱されているわけではなく、別個用意する必要があるようです。
import retro
print(retro.data.list_games()))
終わりに
Python の環境構築から実際に動かすまでやってみました。Python の実行環境を用意するのは毎回少し調べたり、手間がかかっていましたが、今回は公式のドキュメントにvenvがあったのですんなり決まりました。
GymAPIの使い方、学習のアルゴリズム、それを実装しているコードを追って、自分でシミュレーションして遊べるようにしたいところです。
この記事が気に入ったらサポートをしてみませんか?