MDPtoolboxは、RだけでなくMatlab、Python、Cの各言語でも利用可能なマルコフ決定過程のためのパッケージである。
状態監視保全の説明で用いた状態が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)
状態監視保全のコードを実行してあれば、次のように代入してもいい。
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)