Julia でOpenAI Gym


OpenAI Gym

OpenAI Gymは、強化学習の環境を提供するフレームワークで、Pythonに対して提供されている。

サンプルプログラムは以下の用な感じ。CartPole-v1で環境を指定している。この場合はいわゆる倒立振子だ。

import gym
env = gym.make("CartPole-v1")
observation = env.reset()
for _ in range(1000):
  env.render()
  action = env.action_space.sample() # your agent here (this takes random actions)
  observation, reward, done, info = env.step(action)

  if done:
    observation = env.reset()
env.close()

これを実行すると下のような図が表示されてアニメーションされる。この例ではenv.action_space.sample()actionを決めている。本来はこの部分で状態に応じたactionを生成するように学習する。

OpenAI GymのインストールにはOpenGLをインストールする必要があったりしてそれなりに面倒。

PyCall

Gymに限らず、PythonのライブラリをJuliaから利用することができる。それにはPyCallを用いる。

パッケージのインストールはいつもどおりパッケージマネージャでaddすればいいのだが、このパッケージの場合は事前に環境変数で利用するPythonインタプリタを指定しておくことが重要。デフォルトだと、Juliaが自前でかかえるConda内のPython担ってしまうらしく面倒。

julia> ENV["PYTHON"]="/Users/nakada/.pyenv/shims/python"

とかしておいてから、

(@v1.6) pkg> add PyCall

とすればいい。結構時間がかかる。また、インストールしたら一度インタプリタを再起動するようにドキュメントには書かれている。

Julia で OpenAI Gym

インストールできてしまうと、あとは意外に簡単で、下のコードで動かす事ができた。

gym = pyimport("gym")

env = gym.make("CartPole-v1")
observation = env.reset()
for _ in 1:1000
    env.render()
    action = env.action_space.sample()
    observation, reward, done, info = env.step(action)

    if done 
        observation = env.reset()
    end
end
env.close()

かなりPythonっぽい文法に見えるが、Juliaのコードである。上のコードと見比べるとほぼそのままであることがわかる。よくできてるなー。

問題点

  • なんか遅い。Pythonで実行するとランダムな制御なのであっという間に失敗するのだが、どういうわけか、失敗していないように見える。表示がおそすぎて、初期状態がずっと見えているだけなのかもしれない。
  • 窓がクローズされない。うまく停止できていないっぽい。

とにかく動くには動いたので色々試してみよう。