Data Blue

データの海で遊んでます。

多腕バンディット問題の解(Dynamic Programming)

多腕(k)バンディット問題をDirect programmingで解きます。
現在の状態sについて、将来の最大期待値であるV(s)は下記のように書け、
下記を満たすようなアームjを選択するのが、次の一手になります。

f:id:mako_shark:20170902025017p:plain

ここで、

V(s)は、全てのアームについてこれまで得られた情報sから考えられる最大期待値

Rj(sj)は今、アームjを選んだ時に直ちに得られる報酬

si (i = 1, 2,..k)は、k個のスロットそれぞれについてのこれまでの情報(成功、失敗)

s'はそれから一つアクションをおこした時の情報(jが選ばれたらs'j)

γは将来に対しての割引率です。

 

この式の大切なところは、V(s)が、これまで得られた情報sと、
一アクション進んだ時の最大期待値であるV(s')で直接計算できることです。

つまりT回引くと最初に決まっていれば、最後の時点での
V(last) =0と置いておけば、その一個手前のV(last-1)は、
どれか一つが選ばれる前の可能性として求められ、、、
と逆算逆算によって、V(s)が直接求められます。

問題は、Tと、kの数によって計算量が指数的に増えていくところです。

これに解決策を与えるために色々な方法があります。

Gittins Indexについて次は書いてみたいと思います。