0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Julia でOpenAI Gym

Posted at

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を生成するように学習する。

image.png

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

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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?