差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
r:maintenance:condition_monitoring [2019/12/16 16:41] – [劣化データの等間隔の状態への変換] watalu | r:maintenance:condition_monitoring [2019/12/16 16:57] (現在) – [費用関数の設定] watalu | ||
---|---|---|---|
行 549: | 行 549: | ||
これを行と列のラベルを付けてオブジェクトP.Rprに保管する。 | これを行と列のラベルを付けてオブジェクトP.Rprに保管する。 | ||
< | < | ||
- | P.Rpr = rbind(c(1, | + | P.Rpr = rbind(c(1, |
- | cbind(diag(rep(1, | + | cbind(diag(rep(1, |
rownames(P.Rpr) = c(1: | rownames(P.Rpr) = c(1: | ||
colnames(P.Rpr) = c(1: | colnames(P.Rpr) = c(1: | ||
行 558: | 行 558: | ||
< | < | ||
- | cbind(1, | + | cbind(1, |
- | # | + | |
</ | </ | ||
行 565: | 行 564: | ||
< | < | ||
- | #P.Rpl = matrix(rep(c(1, | + | P.Rpl = cbind(1, |
- | P.Rpl = cbind(1, | + | |
rownames(P.Rpl) = c(1: | rownames(P.Rpl) = c(1: | ||
colnames(P.Rpl) = c(1: | colnames(P.Rpl) = c(1: | ||
</ | </ | ||
- | ==== 遷移行列の配列の設定 ==== | ||
- | MDPtoolboxパッケージのために、行動ごとの遷移行列をすべて1つの配列に収める。 | ||
- | 次のようにオブジェクトPを設定する。 | ||
- | |||
- | < | ||
- | P = array(dim=c(n.status, | ||
- | P[,,1] = P.Dgr | ||
- | P[,,2] = P.Rpr | ||
- | P[,,3] = P.Rpl | ||
- | </ | ||
- | |||
- | |||
- | ==== 費用関数の設定 ==== | ||
- | 同じく、MDPtoolboxパッケージのために費用関数を設定する。 | + | ==== MDPtoobox利用の準備 ==== |
- | 行動の順序は、上の遷移行列の配列と同じにする必要がある。 | + | |
マルコフ決定過程の定義に必要なものは次の2つ。 | マルコフ決定過程の定義に必要なものは次の2つ。 | ||
行 594: | 行 578: | ||
* 行動と状態ごとの費用行列R | * 行動と状態ごとの費用行列R | ||
- | Rは手作業での設定になるので、ついでにPもこのページの上の方で用いた状態が3種類、行動が3種類ある場合の例を設定してみる。この遷移行列は3×3×3の3次元配列となる。 | + | Rは手作業での設定になる。 |
- | < | + | ===== 遷移行列の配列の設定 ===== |
- | n.status | + | |
- | n.action | + | |
- | P = array(dim=c(n.status, | + | |
- | </ | + | |
- | 配列Pに行動ごとの遷移行列を代入していく。 | + | MDPtoolboxパッケージのために、行動ごとの遷移行列をすべて1つの配列に収める。 |
- | + | 次のようにオブジェクトPを設定する。 | |
- | < | + | |
- | P[,,1] = matrix(c( | + | |
- | 9/ | + | |
- | 0, | + | |
- | 0, | + | |
- | P[,,2] = matrix(c( | + | |
- | 1,0,0, | + | |
- | 1,0,0, | + | |
- | 0, | + | |
- | P[,,3] = matrix(c( | + | |
- | 1,0,0, | + | |
- | 1,0,0, | + | |
- | 1, | + | |
- | </ | + | |
- | + | ||
- | 上の方に記したコードを実行してあれば、次のように代入してもいい。 | + | |
< | < | ||
+ | n.action = 3 | ||
+ | P = array(dim=c(n.status, | ||
P[,,1] = P.Dgr | P[,,1] = P.Dgr | ||
P[,,2] = P.Rpr | P[,,2] = P.Rpr | ||
行 627: | 行 593: | ||
</ | </ | ||
- | できあがった配列Pの中身を確認してみる。 | + | P.Dgrを正しく推定できていれば、Pはn.status×n.status×n.actionの3次元配列になる。 |
- | < | + | ===== 費用関数の設定 ===== |
- | P | + | |
- | </ | + | |
- | 次に費用関数を定義する。 | + | 同じく、MDPtoolboxパッケージのために費用関数を設定する。ここは、以下のコードをそのまま貼るのではなく、数字の数を状態数に合わせて適宜変更する必要がある。行動の数n.actionは3としている。また行動の順序は、上の遷移行列の配列と同じにする必要がある。 |
- | + | ||
- | < | + | |
- | R = matrix(c( | + | |
- | 0,10,150, | + | |
- | 0,50,150, | + | |
- | 2000, | + | |
- | colnames(R) = c(" | + | |
- | rownames(R) = c(1:3) | + | |
- | R = -R | + | |
- | </ | + | |
- | これも先ほどのコードを実行してあれば、次のようにしてもいい。 | ||
< | < | ||
- | C.Opr = c(0,0,2000) | + | C.Dgr = c(0,0,2000) |
C.Rpr = c(10, | C.Rpr = c(10, | ||
C.Rpl = c(150, | C.Rpl = c(150, | ||
- | Cost = cbind(C.Opr, C.Rpr, C.Rpl) | + | Cost = cbind(C.Dgr, C.Rpr, C.Rpl) |
colnames(Cost) = c(" | colnames(Cost) = c(" | ||
rownames(Cost) = c(" | rownames(Cost) = c(" | ||
行 656: | 行 609: | ||
</ | </ | ||
- | できあがった配列Pの中身を確認してみる。 | + | 6状態であれば次のようにする。 |
< | < | ||
- | R | + | C.Dgr = c(0, |
+ | C.Rpr = c(10, | ||
+ | C.Rpl = c(150, | ||
+ | Cost = cbind(C.Dgr, | ||
+ | colnames(Cost) = c(" | ||
+ | rownames(Cost) = as.character(1: | ||
+ | R = -Cost | ||
+ | </ | ||
+ | |||
+ | 各自の費用関数は、下記の数値の数を入れ替えて設定することになる。 | ||
+ | |||
+ | < | ||
+ | C.Dgr = c() | ||
+ | C.Rpr = c() | ||
+ | C.Rpl = c() | ||
+ | Cost = cbind(C.Dgr, | ||
+ | colnames(Cost) = c(" | ||
+ | rownames(Cost) = as.character(1: | ||
+ | R = -Cost | ||
</ | </ | ||
+ | C.Dgr, C.Rpr, C.Rplそれぞれの定義行のc()の中に数字がn.status個並び、数字と数字の間にはカンマがなければならない。 | ||
==== 最適方策の算出 ==== | ==== 最適方策の算出 ==== | ||