==== MDPtoolbox ====
MDPtoolboxは、RだけでなくMatlab、Python、Cの各言語でも利用可能なマルコフ決定過程のためのパッケージである。
=== マルコフ決定過程の定義に必要なもの ===
* 行動ごとの遷移行列(推移確率行列)P
* 行動と状態ごとの費用行列R
[[::r:maintenance:condition_monitoring|状態監視保全]]の説明で用いた状態が3種類、行動が3種類ある場合を例に取る。
遷移行列は3×3×3の3次元配列となる。
n.status = 3
n.action = 3
P = array(dim=c(n.status,n.status,n.action))
配列Pに行動ごとの遷移行列を代入していく。
P[,,1] = matrix(c(
9/10,1/10,0,
0,9/10,1/10,
0,0,1),nrow=3,ncol=3,byrow=TRUE)
P[,,2] = matrix(c(
1,0,0,
1,0,0,
0,1,0),nrow=3,ncol=3,byrow=TRUE)
P[,,3] = matrix(c(
1,0,0,
1,0,0,
1,0,0),nrow=3,ncol=3,byrow=TRUE)
[[::r:maintenance:condition_monitoring|状態監視保全]]のコードを実行してあれば、次のように代入してもいい。
P[,,1] = P.Dgr
P[,,2] = P.Rpr
P[,,3] = P.Rpl
できあがった配列Pの中身を確認してみる。
P
次に費用関数を定義する。
R = matrix(c(
0,10,150,
0,50,150,
2000,250,150),nrow=n.status, ncol=n.action, byrow=TRUE)
colnames(R) = c("keep","repair","replace")
rownames(R) = c(1:3)
R = -R
これも先ほどのコードを実行してあれば、次のようにしてもいい。
C.Opr = c(0,0,2000)
C.Rpr = c(10,50,250)
C.Rpl = c(150,150,150)
Cost = cbind(C.Opr, C.Rpr, C.Rpl)
colnames(Cost) = c("Keep","Repair","Replace")
rownames(Cost) = c("1","2","3")
R = -Cost
できあがった配列Pの中身を確認してみる。
R
=== 価値反復法 ===
マルコフ決定過程の最適方策を価値反復によって求めるには、次の一行を実行すればよい。
mdp_value_iteration(P, R, 0.9)
=== 方策反復法 ===
マルコフ決定過程の最適方策を方策反復によって求めるには、次の一行を実行すればよい。
mdp_policy_iteration(P, R, 0.9)