OpenAI Gym 基本的な使い方のメモ
はじめに
すぐに使い方を忘れてネットで調べているので、基本的な使い方をメモしておく。ObservationWrapperの使用例も記載する。
基本的な使い方
CartPole
環境の構築(環境インスタンス生成)
import gym env = gym.make("CartPole-v0")
環境の初期化。観測値が返る
env.reset() >>> array([ 0.01308375, -0.00076966, 0.03593438, -0.04269914])
actionの数の確認
env.action_space >>> Discrete(2) # Discrete型 env.action_space.n >>> 2 # 数値で取り出せる
actionをランダムサンプリング
env.action_space.sample()
>>> 0
observation_spaceの型、上下限値、(次元)、数値型
env.observation_space >>> Box(-3.4028234663852886e+38, 3.4028234663852886e+38, (4,), float32)
observation_spaceの次元の数を数値で得る
env.observation_space.shape[0] >>> 4
observation をランダムサンプリング
env.observation_space.sample() >>> array([ 3.4541728e+00, -2.6457083e+38, -2.0181824e-01, -5.4519964e+37], dtype=float32)
環境に対しactionし、その後の観測値、報酬、終了判定フラグ、追加情報 を得る
action = 0 env.step(action) >>> (array([ 0.01306835, -0.19638798, 0.0350804 , 0.26110135]), 1.0, False, {})
FrozenLake
環境の構築と初期化
env = gym.make("FrozenLake-v0") env.reset() >>> 0 # 観測値は数値1つ
action_space と observation_space
env.action_space >>> Discrete(4) env.observation_space >>> Discrete(16) # 観測値はDiscrete型
ObservationWrapper
FrozenLakeのobservation_spaceはDiscrete型で0 - 15の数値が1つ返るが、これをOne-hotにエンコーディングしたいときにObservationWrapperを利用すると便利である。
observation_spaceをOne-hotなBox型に変えるWrapper
import gym.spaces import numpy as np class OneHotWrapper(gym.ObservationWrapper): def __init__(self, env): super(OneHotWrapper, self).__init__(env) shape = (env.observation_space.n,) self.observation_space = gym.spaces.Box(0.0, 1.0, shape, dtype=np.float32) def observation(self, observation): res = np.copy(self.observation_space.low) # 観測データの最小値を取る、つまり 0 res[observation] = 1.0 return res
環境の構築と初期化、および環境へのaction実施。観測値がOne-hotになっている
env_oh = OneHotWrapper(gym.make("FrozenLake-v0")) env_oh.reset() >>> array([1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32) action = 1 env_oh.step(action) >>> (array([0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32), 0.0, False, {'prob': 0.3333333333333333})