差分

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

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
r:maintenance:condition_monitoring [2019/12/16 16:44]
watalu [遷移行列の配列の設定]
r:maintenance:condition_monitoring [2019/12/16 16:57] (現在)
watalu [費用関数の設定]
行 569: 行 569:
 </code> </code>
  
-==== 遷移行列の配列の設定 ==== 
  
-MDPtoolboxパッケージのために、行動ごとの遷移行列をすべて1つの配列に収める。 
-次のようにオブジェクトPを設定する。 
- 
-<code> 
-n.action = 3 
-P = array(dim=c(n.status, n.status, n.action)) 
-P[,,1] = P.Dgr 
-P[,,2] = P.Rpr 
-P[,,3] = P.Rpl 
-</code> 
- 
- 
-==== 費用関数の設定 ==== 
  
-同じく、MDPtoolboxパッケージのために費関数を設定する。 +==== MDPtoobox利用の準備 ====
-行動の順序は、上の遷移行列配列と同じにする必要がある。+
  
 マルコフ決定過程の定義に必要なものは次の2つ。 マルコフ決定過程の定義に必要なものは次の2つ。
行 593: 行 578:
   * 行動と状態ごとの費用行列R   * 行動と状態ごとの費用行列R
  
-Rは手作業での設定になるので、ついでにPもこのページの上の方で用いた状態が3種類、行動が3種類ある場合の例を設定してみる。この遷移行列は3×3×3の3次元配列となる。+Rは手作業での設定になる。
  
-<code> +===== 遷移行列の配列の設定 =====
-n.status +
-n.action +
-array(dim=c(n.status,n.status,n.action)) +
-</code>+
  
-配列Pに行動ごとの遷移行列を代入しいく。 +MDPtoolboxパッケージのため行動ごとの遷移行列をすべ1つの配列に収める。 
- +次のようにオブジェクト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> +
- +
-上の方に記したコードを実行してあれば、次のように代入してもいい+
  
 <code> <code>
 +n.action = 3
 +P = array(dim=c(n.status, n.status, n.action))
 P[,,1] = P.Dgr P[,,1] = P.Dgr
 P[,,2] = P.Rpr P[,,2] = P.Rpr
行 626: 行 593:
 </code> </code>
  
-できあがった配列Pの中身確認してる。+P.Dgrく推定できいれば、Pはn.status×n.status×n.actionの3次元配列になる。
  
-<code> +===== 費用関数の設定 =====
-+
-</code>+
  
-に費用関数を定する。 +同じく、MDPtoolboxパッケージのために費用関数を定する。ここは、以下のコードをそのまま貼るのではなく、数字の数を状態数に合わせて適宜変更する必要がある。行動の数n.action3としている。また行動の順序は、上の遷移行列の配列と同じにする必要がある。
- +
-<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> <code>
-C.Opr = c(0,0,2000)+C.Dgr = c(0,0,2000)
 C.Rpr = c(10,50,250)  C.Rpr = c(10,50,250) 
 C.Rpl = c(150,150,150) C.Rpl = c(150,150,150)
-Cost = cbind(C.Opr, C.Rpr, C.Rpl)+Cost = cbind(C.Dgr, C.Rpr, C.Rpl)
 colnames(Cost) = c("Keep","Repair","Replace") colnames(Cost) = c("Keep","Repair","Replace")
 rownames(Cost) = c("1","2","3") rownames(Cost) = c("1","2","3")
行 655: 行 609:
 </code> </code>
  
-がった配列P中身を確認してみる。+6状態であれば次ようにする。
  
 <code> <code>
-R+C.Dgr = c(0,0,0,0,0,2000) 
 +C.Rpr = c(10,50,100,160,230,310)  
 +C.Rpl = c(150,150,150,150,150,150) 
 +Cost = cbind(C.Dgr, C.Rpr, C.Rpl) 
 +colnames(Cost) = c("Keep","Repair","Replace"
 +rownames(Cost) = as.character(1:6) 
 += -Cost 
 +</code> 
 + 
 +各自の費用関数は、下記の数値の数を入れ替えて設定することになる。 
 + 
 +<code> 
 +C.Dgr = c() 
 +C.Rpr = c()  
 +C.Rpl = c() 
 +Cost = cbind(C.Dgr, C.Rpr, C.Rpl) 
 +colnames(Cost) = c("Keep","Repair","Replace"
 +rownames(Cost) = as.character(1:n.status) 
 +R = -Cost
 </code> </code>
  
 +C.Dgr, C.Rpr, C.Rplそれぞれの定義行のc()の中に数字がn.status個並び、数字と数字の間にはカンマがなければならない。
 ==== 最適方策の算出 ==== ==== 最適方策の算出 ====