<
強化学習によって学習させたニューラルネットワークを使ったハムレット(4目並べ)ゲームを作った。
だいぶ前からニューラルネットワークとか人工知能とかに興味があったんだけど、なかなかプログラミングする暇がなくてほったらかしにしてた。
そのうち、内容を解説していくつもり。  
今回は、そのさわりの部分。
アーキテクチャ
アーキテクチャは、ざっくりこんな感じ。
                   +-----------------+
         +-------->lRL Agent         |
         |         |                 |
         |   +---->|[Value Function] |
         |   |     +-------------+---+
         |   |                   |
   State |   | Reward            | Action
         |   |                   |
         |   |   +-----------+   |
         |   +---|Environment|<--+
         |       |           |
         +-------|           |
                 +-----------+
- RL Agent: 強化学習エージェント(今回の場合プレイヤー)
- Value Function: 各State(ボードの状態)の価値を算出する関数
- Environment: 環境(今回の場合ゲームボード)
実際の動き
動きとしては、
- RL Agent(プレイヤー)が、現在のState(盤面)を取得する: Environment --> RL Agent
- RL Agentが、最も価値の高い次のStateを自分の価値関数(Value Function)から調べる: RL Agent --> Value Function
- 上記のStateに移行するためのActionをEnvironment(環境)になげる。: RL Agent --> Environment
- 環境からのReward(報酬)をえる。: Environment --> RL Agent
- 報酬を元に価値関数をアップデートする。: RL Agent --> Value Function
 V(s)<-V(s) + α[reward + γV(s')-V(s)] :TD(0)方式
言葉にすると、現在のStateの価値は、次のステートの価値+rewardに近づくように学習されるということ  
で、RL Agentが持つ価値関数[Value Function]の部分はどのような関数になるのかは未知であるので、ニューラルネットワークでState -> Valueの対応付けを学習させることにした。
今回のサイトに関して
- 10万回以上のRL Agent同士のゲームにより学習させたニューラルネットワークを用いています。
- 学習部分は割愛しています。(もともと学習部分はjavaでデスクトップように作っていたので。。そのうちperlに移植して学習機能付きにします)
- ニューラルネットワークの重みデータ + 百行程度のperl + javascript(GUIとか用)で出来ています。
- 同ディレクトリのhamlett.cgiに以下のデータをつけることによりjsonpデータが返ります。
- board=0_0_1_2_.... #ボードの盤面。1(先攻player)、2(後攻)、盤面(左下から左上、左から右に順次"_"で区切って並べたもの)
- player=1 or 2 # 自分(1=先攻、2=後攻)
- callback=xxxx #jsonpのcallback関数
参考書籍:  
<iframe id=”4627826613”src=”http://motivation.drivendevelopment.jp/amazon_query_proxy/queryproxy_ruby.cgi?ItemId=4627826613” onload=”fitFrame(this.id)” frameborder=”0” width=”100%”></iframe>
2003年にこんなサイト作ってた。時代がやっと追いついた?  
複雑系・人工知能ゲーム
ツイート
