差分
このページの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, | ||
| + | </ | ||
| + | |||
| + | |||