差分
このページの2つのバージョン間の差分を表示します。
| 次のリビジョン | 前のリビジョン | ||
| r:maintenance:condition_monitoring_with_two_dimension_state [2019/01/06 18:56] – created watalu | r:maintenance:condition_monitoring_with_two_dimension_state [2019/01/07 10:45] (現在) – watalu | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | はじめに:この箇所のみ、状態を0から始める、として番号付けを行なっている。状態数がN+1の時、状態の番号は0からNまでとなる。 | ||
| + | |||
| + | ===== 多次元の状態ベクトルを持つマルコフ決定過程 ===== | ||
| + | |||
| + | [[:: | ||
| + | |||
| ==== 直積状態空間の1次元への変換 ==== | ==== 直積状態空間の1次元への変換 ==== | ||
| 行 75: | 行 81: | ||
| < | < | ||
| mmdp_X.to.Y = function(X, | mmdp_X.to.Y = function(X, | ||
| + | mdp_check.state = function(S) { | ||
| + | if( min(S)!=0 ) { | ||
| + | stop(" | ||
| + | } else if( max(S)!=(length(S)-1) ) { | ||
| + | stop(" | ||
| + | } else { | ||
| + | return(TRUE) | ||
| + | } | ||
| + | } | ||
| m = length(X) | m = length(X) | ||
| n = NULL | n = NULL | ||
| 行 104: | 行 119: | ||
| < | < | ||
| mmdp_X.to.Y.n = function(S) { | mmdp_X.to.Y.n = function(S) { | ||
| + | mdp_check.state = function(S) { | ||
| + | if( min(S)!=0 ) { | ||
| + | stop(" | ||
| + | } else if( max(S)!=(length(S)-1) ) { | ||
| + | stop(" | ||
| + | } else { | ||
| + | return(TRUE) | ||
| + | } | ||
| + | } | ||
| m = length(S) | m = length(S) | ||
| x.max = NULL | x.max = NULL | ||
| 行 116: | 行 140: | ||
| この関数には状態空間のみを与える。 | この関数には状態空間のみを与える。 | ||
| < | < | ||
| - | > mmdp_X.to.Y.n(list(c(0: | + | > mmdp_X.to.Y.n(list(c(0: |
| [1] 25 | [1] 25 | ||
| </ | </ | ||
| 行 158: | 行 182: | ||
| </ | </ | ||
| この表示された行列の意味を少し確認すること。 | この表示された行列の意味を少し確認すること。 | ||
| - | |||
| - | === 状態指定取替 P.Age === | ||
| - | |||
| - | ある状態でのみ取替を実行し、他の状態では何もしない行動を定義しておく。 | ||
| - | < | ||
| - | mmdp_create.age.replacement.matrix = function(S, | ||
| - | R.S = max(S)-min(S) | ||
| - | n.S = length(S) | ||
| - | if( R.S != n.S-1 ) { | ||
| - | stop(" | ||
| - | } | ||
| - | P = diag(rep(1, | ||
| - | P[T.ast+1, | ||
| - | P[T.ast+1, | ||
| - | rownames(P) = S | ||
| - | colnames(P) = S | ||
| - | return(P) | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | これも状態空間が0から4の場合に実行してみておく。 | ||
| - | |||
| - | < | ||
| - | > mmdp_create.age.replacement.matrix(c(0: | ||
| - | 0 1 2 3 4 | ||
| - | 0 1 0 0 0 0 | ||
| - | 1 0 1 0 0 0 | ||
| - | 2 0 0 1 0 0 | ||
| - | 3 1 0 0 0 0 | ||
| - | 4 0 0 0 0 1 | ||
| - | </ | ||
| - | |||
| - | この行動は、通常の状態監視保全では現れないことを注意しておく。 | ||
| ==== 状態遷移行列の組み合わせ ==== | ==== 状態遷移行列の組み合わせ ==== | ||
| 行 295: | 行 286: | ||
| あるいは2つ目の方を取り替えるのであれば | あるいは2つ目の方を取り替えるのであれば | ||
| < | < | ||
| - | mmdp_expand.P.2(list(mmdp_create.replacement.matrix(c(0: | + | mmdp_expand.P.2(list(mmdp_create.replacement.matrix(c(0: |
| </ | </ | ||
| とする。 | とする。 | ||
| 行 387: | 行 378: | ||
| あとは実行するだけ。 | あとは実行するだけ。 | ||
| - | 上の例を実行すると、次のような結果を得る。 | + | 例によって準備をする。 |
| + | |||
| + | < | ||
| + | install.packages(" | ||
| + | library(MDPtoolbox) | ||
| + | </ | ||
| + | |||
| + | そして、上の例の最適方策を価値反復アルゴリズムによって求めると、次のような結果を得る。 | ||
| < | < | ||
| > mdp_value_iteration(P, | > mdp_value_iteration(P, | ||
| 行 416: | 行 414: | ||
| < | < | ||
| > optimal.policy = mdp_value_iteration(P, | > optimal.policy = mdp_value_iteration(P, | ||
| - | > cbind(expand.grid(c(0: | + | > cbind(expand.grid(c(0: |
| - | Var1 Var2 optimal.policy$policy | + | Var1 Var2 optimal.policy$policy |
| - | 1 | + | 1 |
| - | 2 | + | 2 |
| - | 3 | + | 3 |
| - | 4 | + | 4 |
| - | 5 | + | 5 |
| - | 6 | + | 6 |
| - | 7 | + | 7 |
| - | 8 | + | 8 |
| - | 9 | + | 9 |
| - | 10 4 1 2 | + | 10 4 1 |
| - | 11 0 2 1 | + | 11 0 2 |
| - | 12 1 2 1 | + | 12 1 2 |
| - | 13 2 2 1 | + | 13 2 2 |
| - | 14 3 2 1 | + | 14 3 2 |
| - | 15 4 2 2 | + | 15 4 2 |
| - | 16 0 3 1 | + | 16 0 3 |
| - | 17 1 3 1 | + | 17 1 3 |
| - | 18 2 3 1 | + | 18 2 3 |
| - | 19 3 3 1 | + | 19 3 3 |
| - | 20 4 3 2 | + | 20 4 3 |
| - | 21 0 4 3 | + | 21 0 4 |
| - | 22 1 4 3 | + | 22 1 4 |
| - | 23 2 4 3 | + | 23 2 4 |
| - | 24 3 4 3 | + | 24 3 4 |
| - | 25 4 4 4 | + | 25 4 4 |
| </ | </ | ||
| - | この方策は「状態が4になったのみ方を取替し、両方とも4になったら両方とも取替する」という方策である。 | + | この方策は「状態が4になったのみ方を取替し、両方とも4になったら両方とも取替する」という方策であると、読み取れるだろうか。 |