==== 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)