人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

強化学習で迷路の最短経路を見つける

強化学習というアルゴリズムを用いて迷路の最短経路を学習するプログラムを作ってみます。迷路を抜ける方法は右手法とかいろいろありますが、ここではあえて学習を用います。

強化学習は試行錯誤と報酬から学習するアルゴリズムです。ゴール地点には報酬が置いてあるとしましょう。例えば、骨付き肉とか(笑)スライムは骨付き肉が大好物で迷路の中をあっちへ行ったりこっちへ行ったり試行錯誤してゴールを探します。ゴールへつくと今まで通ってきた場所を学習し、次からはより早く迷路をぬけて報酬(骨付き肉)をゲットできます。これを何回も何回も繰り返して訓練するといずれ最短経路(最も早く骨付き肉へいたる道)を学習できるという仕組みです。

maze_learning.jar

操作法

真ん中がメインパネルです。迷路とスライムが描かれています。左上の黄色い地点はスタートで右下の黄色い地点はゴールです。スライムの目的はスタートからゴールまでの最短経路を学習によって発見することです。

一番上のパネルがインフォメーションパネルです。スライムがスタートからゴールへたどり着くまでが1エピソード(Episode)です。エピソードを何回も繰り返すことによって学習が進みます。ステップ(Step)は1エピソード内でスライムが何ステップ(歩)で迷路を抜けられるかを表しています。たとえば、

   Episode: 126  Step: 150

と表示されていたらスタートからゴールへ行くのが126回目で150ステップで迷路をぬけられたという意味です。ここでは最短経路を見つけるのが目的ですのでステップは短いほどよいです。上の迷路では72ステップが最短経路になっています。学習する前は10000ステップ以上かかっていたのに学習が進むにつれてだんだん短くなり最後には72歩でぬけられるようになります。

下の方にボタンが2つあります。Initボタンは迷路を新しく作り直し、学習を最初からやり直します。Skipボタンはアニメーションを中断し、学習のみを高速に行います。Skipボタンを押してもインフォメーションパネルのエピソードとステップはそのまま表示されています。ステップ数が72くらいに行ったら学習が収束しています。No Skipボタンを押せばアニメーションを再開します。

プログラムを動かしてみるとわかりますが、学習前、スライムはあちこちにうろうろしてまるで馬鹿です。Skipなしで見ていると日が暮れてしまいます(笑)。このように強化学習の欠点の1つは学習が遅い点です(というか他の学習アルゴリズムも同様です)。小さな迷路をぬけるのにもエピソードを何回も繰り返さなければなりません。強化学習をゲームに導入する(できたとしたらですが)際には学習が遅いことが大きな問題点になるでしょう。