差分
このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン | ||
r:mdptoolbox [2018/12/11 23:25] – created watalu | r:mdptoolbox [2018/12/16 16:34] (現在) – [方策反復法] watalu | ||
---|---|---|---|
行 2: | 行 2: | ||
MDPtoolboxは、RだけでなくMatlab、Python、Cの各言語でも利用可能なマルコフ決定過程のためのパッケージである。 | MDPtoolboxは、RだけでなくMatlab、Python、Cの各言語でも利用可能なマルコフ決定過程のためのパッケージである。 | ||
+ | |||
+ | === マルコフ決定過程の定義に必要なもの === | ||
+ | |||
+ | * 行動ごとの遷移行列(推移確率行列)P | ||
+ | * 行動と状態ごとの費用行列R | ||
+ | |||
+ | [[:: | ||
+ | |||
+ | 遷移行列は3×3×3の3次元配列となる。 | ||
+ | |||
+ | < | ||
+ | n.status = 3 | ||
+ | n.action = 3 | ||
+ | P = array(dim=c(n.status, | ||
+ | </ | ||
+ | |||
+ | 配列Pに行動ごとの遷移行列を代入していく。 | ||
+ | |||
+ | < | ||
+ | P[,,1] = matrix(c( | ||
+ | 9/ | ||
+ | 0, | ||
+ | 0, | ||
+ | P[,,2] = matrix(c( | ||
+ | 1,0,0, | ||
+ | 1,0,0, | ||
+ | 0, | ||
+ | P[,,3] = matrix(c( | ||
+ | 1,0,0, | ||
+ | 1,0,0, | ||
+ | 1, | ||
+ | </ | ||
+ | |||
+ | [[:: | ||
+ | |||
+ | < | ||
+ | P[,,1] = P.Dgr | ||
+ | P[,,2] = P.Rpr | ||
+ | P[,,3] = P.Rpl | ||
+ | </ | ||
+ | |||
+ | できあがった配列Pの中身を確認してみる。 | ||
+ | |||
+ | < | ||
+ | P | ||
+ | </ | ||
+ | |||
+ | 次に費用関数を定義する。 | ||
+ | |||
+ | < | ||
+ | R = matrix(c( | ||
+ | 0,10,150, | ||
+ | 0,50,150, | ||
+ | 2000, | ||
+ | colnames(R) = c(" | ||
+ | rownames(R) = c(1:3) | ||
+ | R = -R | ||
+ | </ | ||
+ | |||
+ | これも先ほどのコードを実行してあれば、次のようにしてもいい。 | ||
+ | < | ||
+ | C.Opr = c(0,0,2000) | ||
+ | C.Rpr = c(10, | ||
+ | C.Rpl = c(150, | ||
+ | Cost = cbind(C.Opr, | ||
+ | colnames(Cost) = c(" | ||
+ | rownames(Cost) = c(" | ||
+ | R = -Cost | ||
+ | </ | ||
+ | |||
+ | できあがった配列Pの中身を確認してみる。 | ||
+ | |||
+ | < | ||
+ | R | ||
+ | </ | ||
+ | |||
+ | === 価値反復法 === | ||
+ | |||
+ | マルコフ決定過程の最適方策を価値反復によって求めるには、次の一行を実行すればよい。 | ||
+ | |||
+ | < | ||
+ | mdp_value_iteration(P, | ||
+ | </ | ||
+ | |||
+ | === 方策反復法 === | ||
+ | |||
+ | マルコフ決定過程の最適方策を方策反復によって求めるには、次の一行を実行すればよい。 | ||
+ | |||
+ | < | ||
+ | mdp_policy_iteration(P, | ||
+ | </ | ||
+ | |||
+ | |||