MDPtoolbox

MDPtoolboxは、RだけでなくMatlab、Python、Cの各言語でも利用可能なマルコフ決定過程のためのパッケージである。

マルコフ決定過程の定義に必要なもの

  • 行動ごとの遷移行列(推移確率行列)P
  • 行動と状態ごとの費用行列R

状態監視保全の説明で用いた状態が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)