差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
r:maintenance:condition_monitoring [2019/12/16 16:53] – [費用関数の設定] watalur:maintenance:condition_monitoring [2019/12/16 16:57] (現在) – [費用関数の設定] watalu
行 578: 行 578:
   * 行動と状態ごとの費用行列R   * 行動と状態ごとの費用行列R
  
-Rは手作業での設定になるので、ついでにPもこのページの上の方で用いた状態が3種類、行動が3種類ある場合の例を設定してみる。この遷移行列は3×3×3の3次元配列となる。 +Rは手作業での設定になる。
- +
-<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> +
- +
-上の方に記したコードを実行してあれば、次のように代入してもいい。 +
- +
-<code> +
-P[,,1] = P.Dgr +
-P[,,2] = P.Rpr +
-P[,,3] = P.Rpl +
-</code> +
- +
-できあがった配列Pの中身を確認してみる。 +
- +
-<code> +
-+
-</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.Dgr = c(0,0,2000) +
-C.Rpr = c(10,50,250)  +
-C.Rpl = c(150,150,150) +
-Cost = cbind(C.Dgr, C.Rpr, C.Rpl) +
-colnames(Cost) = c("Keep","Repair","Replace"+
-rownames(Cost) = c("1","2","3"+
-R = -Cost +
-</code> +
- +
-できあがった配列Rの中身を確認してみる。 +
- +
-<code> +
-+
-</code>+
  
 ===== 遷移行列の配列の設定 ===== ===== 遷移行列の配列の設定 =====
行 658: 行 592:
 P[,,3] = P.Rpl P[,,3] = P.Rpl
 </code> </code>
 +
 +P.Dgrを正しく推定できていれば、Pはn.status×n.status×n.actionの3次元配列になる。
  
 ===== 費用関数の設定 ===== ===== 費用関数の設定 =====
  
-同じく、MDPtoolboxパッケージのために費用関数を設定する。 +同じく、MDPtoolboxパッケージのために費用関数を設定する。ここは、以下のコードをそのまま貼るのではなく、数字の数を状態数に合わせて適宜変更する必要がある。行動の数n.actionは3としている。また行動の順序は、上の遷移行列の配列と同じにする必要がある。
-行動の順序は、上の遷移行列の配列と同じにする必要がある。+
  
 <code> <code>