強化学習を使って迷路を学習

概要

・迷路の状態価値を学習させるよくあるパターン
・Q学習を使って学習、政策の選択(どっちの方向に移動するか)はとりあえずランダム
・学習してるっぽいのでRのanimationパッケージを使って学習の様子を可視化
・エージェントかわいい

やってること

久しぶりの強化学習シリーズ。書いている本人もすっかり内容を忘れているので、思い出しがてら迷路を探索してみる。
基本的には迷路内をランダムに移動しながらゴールを目指す。ゴールに到達すると大きな報酬(rewardGoal)がもらえる。それ以外のマスでは1マス歩くごとに-1の報酬(懲罰)がもらえる。これにより、より早くゴールに達することができるマスの状態価値は高いと学習されるはず。

移動方法はとりあえずランダム。壁にぶつかる方向に進まないように無理矢理調整しているがそれ以外はランダム。
本来ならば、学習した状態価値を元に、最適と思われる方向に進むGreedy法(もしくはEpsilon-Greedy法)の方が良いのだろうけど、とりあえず年末休暇で蜘蛛の巣が張っている自分の脳みそにリハビリが必要なのでここは次回以降手を加える予定

最後に、学習している過程を可視化するためにanimationパッケージを使って状態価値の推移をanimation gifで出力する。

使った迷路

下記コードにあるisWallを適当にプロットしたもの。コの字型になっている迷路。
右下の角をスタート地点、左下の地点をゴール地点に設定しています。
R内のマトリックスの行列の方向と、プロットの縦横の方向が異なるので見づらい(つらい)
141227_meiro

Rコード

animationパッケージはImageMagickが必要なので、適宜インストール。
このコードはMacで作成したので、パスの設定もそれ用になっています。
状態価値が更新されなくなったら学習終了と判断し、ループをbreakしています。
一応、迷路の形とスタート・ゴールを正しく指定すれば任意の形で動くはず。。。

結果

ということで、学習終了後の状態価値をプロットしたのが以下。
左下のマスがゴールだったので、その周辺のマスの価値が高いことを表しています。
(ゴールのマスに終了したら終了なので、ゴールマスの状態価値はゼロのまま)

学習回数は10回もせずに終了するイメージ。ランダムウォークなので場合によりますが。
141227_result

アニメーション

ゴール手前からバックワードに学習されているのが分かります。
エージェントかわいい
141227_animation

参考

強化学習をベイズで理解する
https://www.sat.t.u-tokyo.ac.jp/~mak/20140319-makino.pdf

二次元ヒートカーネル(熱核)の時間発展の可視化 – My Life as a Mock Quant
http://d.hatena.ne.jp/teramonagi/20141226/1419590864
-> animationパッケージの参考

Amazon.co.jp: 強化学習: Richard S.Sutton, Andrew G.Barto, 三上 貞芳, 皆川 雅章: 本
http://www.amazon.co.jp/dp/4627826613