差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

次のリビジョン
前のリビジョン
r:mdptoolbox [2018/12/11 23:25] – created watalur:mdptoolbox [2018/12/16 16:34] (現在) – [方策反復法] watalu
行 2: 行 2:
  
 MDPtoolboxは、RだけでなくMatlab、Python、Cの各言語でも利用可能なマルコフ決定過程のためのパッケージである。 MDPtoolboxは、RだけでなくMatlab、Python、Cの各言語でも利用可能なマルコフ決定過程のためのパッケージである。
 +
 +=== マルコフ決定過程の定義に必要なもの ===
 +
 +  * 行動ごとの遷移行列(推移確率行列)P
 +  * 行動と状態ごとの費用行列R
 +
 +[[::r:maintenance:condition_monitoring|状態監視保全]]の説明で用いた状態が3種類、行動が3種類ある場合を例に取る。
 +
 +遷移行列は3×3×3の3次元配列となる。
 +
 +<code>
 +n.status = 3
 +n.action = 3
 +P = array(dim=c(n.status,n.status,n.action))
 +</code>
 +
 +配列Pに行動ごとの遷移行列を代入していく。
 +
 +<code>
 +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)
 +</code>
 +
 +[[::r:maintenance:condition_monitoring|状態監視保全]]のコードを実行してあれば、次のように代入してもいい。
 +
 +<code>
 +P[,,1] = P.Dgr
 +P[,,2] = P.Rpr
 +P[,,3] = P.Rpl
 +</code>
 +
 +できあがった配列Pの中身を確認してみる。
 +
 +<code>
 +P
 +</code>
 +
 +次に費用関数を定義する。
 +
 +<code>
 +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
 +</code>
 +
 +これも先ほどのコードを実行してあれば、次のようにしてもいい。
 +<code>
 +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
 +</code>
 +
 +できあがった配列Pの中身を確認してみる。
 +
 +<code>
 +R
 +</code>
 +
 +=== 価値反復法 ===
 +
 +マルコフ決定過程の最適方策を価値反復によって求めるには、次の一行を実行すればよい。
 +
 +<code>
 +mdp_value_iteration(P, R, 0.9)
 +</code>
 +
 +=== 方策反復法 ===
 +
 +マルコフ決定過程の最適方策を方策反復によって求めるには、次の一行を実行すればよい。
 +
 +<code>
 +mdp_policy_iteration(P, R, 0.9)
 +</code>
 +
 +