見出し画像

強化学習ライブラリの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が開き、ステップの様子が表示されたら正常に実行できています。


cartpole.py

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.examples.interactive

学習アルゴリズムは、なし なので、ステップによる値の変化は有りません。

retro/retro/examples at master · openai/retroに、キャラクターの操作処理の例があり、評価アルゴリズムが組み込まれているものから、ランダムなものなどがあります。Getting Started — Gym Retro documentationに、各操作処理の解説が書いてあります。

以下のコードで使えるゲーム一覧を表示できます。ROM が同梱されているわけではなく、別個用意する必要があるようです。

import retro
print(retro.data.list_games()))

終わりに

Python の環境構築から実際に動かすまでやってみました。Python の実行環境を用意するのは毎回少し調べたり、手間がかかっていましたが、今回は公式のドキュメントにvenvがあったのですんなり決まりました。
GymAPIの使い方、学習のアルゴリズム、それを実装しているコードを追って、自分でシミュレーションして遊べるようにしたいところです。

この記事が気に入ったらサポートをしてみませんか?