差分

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

この比較画面へのリンク

次のリビジョン
前のリビジョン
r:maintenance:condition_monitoring_with_two_dimension_state [2019/01/06 18:56] – created watalur:maintenance:condition_monitoring_with_two_dimension_state [2019/01/07 10:45] (現在) watalu
行 1: 行 1:
 +はじめに:この箇所のみ、状態を0から始める、として番号付けを行なっている。状態数がN+1の時、状態の番号は0からNまでとなる。
 +
 +===== 多次元の状態ベクトルを持つマルコフ決定過程 =====
 +
 +[[::markov_chain|マルコフ連鎖]]と[[::markov_decision_process|マルコフ決定過程]]は、状態が多次元の場合にも応用できる。以下では、状態が2次元の場合を例に、1次元に変換して、[[::r:markovchain|マルコフ連鎖のパッケージmarkovchain]]と[[::r:mdptoolbox|マルコフ決定過程のパッケージMDPtoolbox]]を用いる手順を説明する。〔現時点でこの原稿は、データの変換と状態遷移行列の推定については省略し、マルコフ決定過程の適用の準備を中心に述べている。〕
 +
 ==== 直積状態空間の1次元への変換 ==== ==== 直積状態空間の1次元への変換 ====
  
行 75: 行 81:
 <code> <code>
 mmdp_X.to.Y = function(X,S) { mmdp_X.to.Y = function(X,S) {
 +  mdp_check.state = function(S) {
 +    if( min(S)!=0 ) {
 +      stop("state space should begin with 0.")
 +    } else if( max(S)!=(length(S)-1) ) {
 +      stop("state space should end with N.")
 +    } else {
 +      return(TRUE)
 +    }
 +  }
   m = length(X)   m = length(X)
   n = NULL   n = NULL
行 104: 行 119:
 <code> <code>
 mmdp_X.to.Y.n = function(S) { mmdp_X.to.Y.n = function(S) {
 +  mdp_check.state = function(S) {
 +    if( min(S)!=0 ) {
 +      stop("state space should begin with 0.")
 +    } else if( max(S)!=(length(S)-1) ) {
 +      stop("state space should end with N.")
 +    } else {
 +      return(TRUE)
 +    }
 +  }
   m = length(S)   m = length(S)
   x.max = NULL   x.max = NULL
行 116: 行 140:
 この関数には状態空間のみを与える。 この関数には状態空間のみを与える。
 <code> <code>
-> mmdp_X.to.Y.n(list(c(0:4),c(0:4)) # 実行例+> mmdp_X.to.Y.n(list(c(0:4),c(0:4))) # 実行例
 [1] 25 [1] 25
 </code> </code>
行 158: 行 182:
 </code> </code>
 この表示された行列の意味を少し確認すること。 この表示された行列の意味を少し確認すること。
- 
-=== 状態指定取替 P.Age === 
- 
-ある状態でのみ取替を実行し、他の状態では何もしない行動を定義しておく。 
-<code> 
-mmdp_create.age.replacement.matrix = function(S,T.ast) { 
-  R.S = max(S)-min(S) 
-  n.S = length(S) 
-  if( R.S != n.S-1 ) { 
-    stop("state space is not regular and/or does not begin with 0.") 
-  } 
-  P = diag(rep(1,n.S)) 
-  P[T.ast+1,1] = 1 
-  P[T.ast+1,T.ast+1] = 0 
-  rownames(P) = S 
-  colnames(P) = S 
-  return(P) 
-} 
-</code> 
- 
-これも状態空間が0から4の場合に実行してみておく。 
- 
-<code> 
-> mmdp_create.age.replacement.matrix(c(0:4),3) 
-  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 
-</code> 
- 
-この行動は、通常の状態監視保全では現れないことを注意しておく。 
  
 ==== 状態遷移行列の組み合わせ ==== ==== 状態遷移行列の組み合わせ ====
行 295: 行 286:
 あるいは2つ目の方を取り替えるのであれば あるいは2つ目の方を取り替えるのであれば
 <code> <code>
-mmdp_expand.P.2(list(mmdp_create.replacement.matrix(c(0:4),P.Dgr)))+mmdp_expand.P.2(list(mmdp_create.replacement.matrix(c(0:4)),P.Dgr))
 </code> </code>
 とする。 とする。
行 387: 行 378:
  
 あとは実行するだけ。 あとは実行するだけ。
-上の例を実行すると、次のような結果を得る。+例によって準備をする。 
 + 
 +<code> 
 +install.packages("MDPtoolbox"
 +library(MDPtoolbox) 
 +</code> 
 + 
 +そして、上の例の最適方策価値反復アルゴリズムによって求めると、次のような結果を得る。
 <code> <code>
 > mdp_value_iteration(P,R,0.95) > mdp_value_iteration(P,R,0.95)
行 416: 行 414:
 <code> <code>
 > optimal.policy = mdp_value_iteration(P,R,0.95) # 実行例 > optimal.policy = mdp_value_iteration(P,R,0.95) # 実行例
-> cbind(expand.grid(c(0:4),c(0:4)),optimal.policy$policy) # 実行例 +> cbind(expand.grid(c(0:4),c(0:4)),optimal.policy$policy,optimal.policy$V) # 実行例 
-   Var1 Var2 optimal.policy$policy +   Var1 Var2 optimal.policy$policy optimal.policy$V 
-1        0                     1 +1        0                            -64.03890 
-2        0                     1 +2        0                            -81.67123 
-3        0                     1 +3        0                           -108.58531 
-4        0                     1 +4        0                           -149.66496 
-5        0                     2 +5        0                           -212.36385 
-6        1                     1 +6        1                            -81.67123 
-7        1                     1 +7        1                            -99.30356 
-8        1                     1 +8        1                           -126.21764 
-9        1                     1 +9        1                           -167.29729 
-10    4    1                     2 +10    4    1                           -229.99618 
-11    0    2                     1 +11    0    2                           -108.58531 
-12    1    2                     1 +12    1    2                           -126.21764 
-13    2    2                     1 +13    2    2                           -153.13171 
-14    3    2                     1 +14    3    2                           -194.21137 
-15    4    2                     2 +15    4    2                           -256.91025 
-16    0    3                     1 +16    0    3                           -149.66496 
-17    1    3                     1 +17    1    3                           -167.29729 
-18    2    3                     1 +18    2    3                           -194.21137 
-19    3    3                     1 +19    3    3                           -235.29102 
-20    4    3                     2 +20    4    3                           -297.98991 
-21    0    4                     3 +21    0    4                           -212.36385 
-22    1    4                     3 +22    1    4                           -229.99618 
-23    2    4                     3 +23    2    4                           -256.91025 
-24    3    4                     3 +24    3    4                           -297.98991 
-25    4    4                     4+25    4    4                           -360.68879
 </code> </code>
  
-この方策は「状態が4になったのみ方を取替し、両方とも4になったら両方とも取替する」という方策である。 +この方策は「状態が4になったのみ方を取替し、両方とも4になったら両方とも取替する」という方策であると、読み取れるだろうか