python 
 2021-07-14

Open AI Gymのquick startです。とりあえず動かしてみます。

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

Install

pip install gym

Run

import gym
env = gym.make('CartPole-v0')
env.reset()
for _ in range(1000):
    env.render()
    env.step(env.action_space.sample()) # take a random action
env.close()
  • gym.make()で環境を選択
  • env.reset()で環境を初期化
  • env.render()で描画
  • env.action_space.sample()が行動。今回はランダム
  • env.step()で行動を引数にして状態遷移

今回は環境にCartPoleを選択。Cartの上でPoleを倒さないように動くやつ。
環境はClassic controlだと特に描画の設定などせずに使えたはず。

用意されてる環境はここ
https://gym.openai.com/envs/#classic_control

CartPoleで環境に対して取れる行動は、左に動く、動かない、右に動くの三種類。
CartPoleでの環境から得られる情報は、potisionとvelocity

それぞれgithubを参照
https://github.com/openai/gym/wiki/MountainCar-v0#actions

custome env

環境を作成できる
https://github.com/openai/gym/blob/master/docs/creating-environments.md

環境用にディレクトリを作成

gym-foo/
  README.md
  setup.py
  gym_foo/
    __init__.py
    envs/
      __init__.py
      foo_env.py
      foo_extrahard_env.py

setup.py__init__.pyを環境に合わせて書いておく。
githubのドキュメント通り。

Envを継承して、いろいろと実装する。

import gym
from gym import error, spaces, utils
from gym.utils import seeding

class FooEnv(gym.Env):
  metadata = {'render.modes': ['human']}

  def __init__(self):
    ...
  def step(self, action):
    ...
  def reset(self):
    ...
  def render(self, mode='human'):
    ...
  def close(self):
    ...

インストールすると、

pip install -e gym-foo

Cartpoleみたいに呼び出せる

gym.make('gym_foo:foo-v0')

gym.envs.classic_control.rendering以下にclassic_controlで使ってる便利なのが入ってるので参考になりそう。

from gym.envs.classic_control import rendering

self.viewer = rendering.Viewer(screen_width, screen_height)

circle = rendering.make_circle()

See Also