Python 強化学習ライブラリ「OpenAI Gym」

 本記事ではAI学習を簡単に体験することが可能なライブラリ「OpenAI Gym」のインストール方法と実行例について載せる。

▼本コードの実施例…インベーダーゲームで敵にやられないように自動で学習している様子

www.youtube.com

▼インストール手順(Windows)
(1) $ pip install gym
(2) $ pip install --no-index -f https://github.com/Kojoley/atari-py/releases atari_py
(3) 他に、下記3つをインストールする(まだインストールしてない場合)
  $ conda install tensorflow
  $ conda install tqdm
  $ pip install opencv-python
(4) gitをインストール → https://gitforwindows.org/
(5) $ git clone https://github.com/openai/gym.git
  →カレントフォルダへgymというフォルダがダウンロード(DL)される。
(6) 上記(3)でDLしたgymフォルダへ移動し、$ pip install -e .
(7) $ pip install keras-rl 

▼本プログラム
コード中にある「ENV_NAME=」 で例えば以下からゲームを指定できる。末尾の-v0はverのことで指定が必要です。
スペースインベーダー:SpaceInvaders-v0
倒立振子:CartPole-v0
車の山登り:MountainCar-v0

import numpy as np

import gym
from gym import wrappers

from keras.models import Sequential
from keras.layers import Dense, Activation, Flatten
from keras.optimizers import Adam

from rl.agents.dqn import DQNAgent
from rl.policy import BoltzmannQPolicy
from rl.memory import SequentialMemory
#ENV_NAME = gym.make('SpaceInvaders-v0')
ENV_NAME = 'SpaceInvaders-v0' # CartPole-v0 MountainCar-v0 SpaceInvaders-v0

env = gym.make(ENV_NAME)
env = wrappers.Monitor(env, './movie', video_callable=(lambda ep: ep % 200 == 0), force=True)
np.random.seed(123)
env.seed(123)
nb_actions = env.action_space.n

model = Sequential()
model.add(Flatten(input_shape=(1,) + env.observation_space.shape))
model.add(Dense(16))
model.add(Activation('relu'))
model.add(Dense(16))
model.add(Activation('relu'))
model.add(Dense(16))
model.add(Activation('relu'))
model.add(Dense(nb_actions))
model.add(Activation('linear'))

print(model.summary())

policy = BoltzmannQPolicy()
memory = SequentialMemory(limit=50000, window_length=1)

dqn = DQNAgent(model=model, nb_actions=nb_actions, policy=policy,
                     memory=memory,
                     nb_steps_warmup=1000, gamma=.99,
                     target_model_update=10000,
                     train_interval=4, delta_clip=1.)
dqn.compile(Adam(lr=1e-3), metrics=['mae'])

try:
    dqn.fit(env, nb_steps=10000, visualize=True, verbose=2)
except:
    dqn.fit(env, nb_steps=10000, visualize=False, verbose=2)

dqn.save_weights('dqn_{}_weights.h5f'.format(ENV_NAME), overwrite=True)

try:
    dqn.test(env, nb_episodes=5, visualize=True, verbose=2)
except:
    dqn.test(env, nb_episodes=5, visualize=False, verbose=2)
    
env.close()

●本家のリンク

https://gym.openai.com/docs/

●備考
・エラー例1:AttributeError: module 'gym' has no attribute 'make'
 ⇒対処方法:自作ファイルでファイル名「gym.py」があれば、他の名に変える
・エラー例2:TypeError: len is not well defined for symbolic Tensors. (activation_3/Identity:0) Please call `x.shape` rather than `len(x)` for shape information.
 ⇒対処方法:下記のようにテンソルフローのバージョンを指定してインストする
  $ pip install tensorflow==2.0.0-beta
  現在はダウングレードすることにもなり得るので、下記も参考下さい

Python Anaconda環境をコピーする。その環境下でTensorFlowをダウングレードする手順 - PythonとVBAで世の中を便利にする

以上

<広告>