差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン次のリビジョン両方とも次のリビジョン | ||
r:maintenance:hard_time_maintenance_on_mdp [2019/01/07 04:55] – watalu | r:maintenance:hard_time_maintenance_on_mdp [2019/01/07 10:15] – watalu | ||
---|---|---|---|
行 1: | 行 1: | ||
- | ===== 時間計画保全のマルコフ決定過程による表現 ==== | + | ===== 時間計画保全のマルコフ決定過程による表現 |
==== 年齢取替の行動の状態遷移行列 ==== | ==== 年齢取替の行動の状態遷移行列 ==== | ||
+ | 次の関数は1期間ごとに1ずつ年齢を重ねる、という状態遷移を表す行列を生成する。ここでのSは状態空間だが、年齢の範囲を表す集合でもある。 | ||
< | < | ||
行 20: | 行 21: | ||
</ | </ | ||
- | 故障状態になったら強制的に緊急取替を行う状態遷移行列。 | + | 次のコードは年齢を0から20までに設定する。 |
+ | |||
+ | < | ||
+ | mmdp_create.ageing.matrix(c(0: | ||
+ | </ | ||
+ | |||
+ | === 状態指定取替 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の場合に実行してみておく。 | ||
+ | |||
+ | 次の実行例は、年齢が0から4まで推移する対象に、年齢2で取替を行う行列を生成する。 | ||
+ | |||
+ | < | ||
+ | mmdp_create.age.replacement.matrix(c(0: | ||
+ | </ | ||
+ | |||
+ | 状態指定取替は年齢取替のマルコフ決定過程における表現を与える。 | ||
+ | |||
+ | < | ||
+ | > 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 | ||
+ | </ | ||
+ | |||
+ | この行動は、通常の状態監視保全では現れないことを注意しておく。 | ||
+ | |||
+ | === 劣化の状態遷移行列に故障時の取替を加える === | ||
+ | |||
+ | 時間計画保全では、予防取替と事後取替がある。 | ||
+ | ここでは故障状態になったら強制的に緊急取替を行うように状態遷移行列を変更している。 | ||
+ | 最後の一行に注目して欲しい。 | ||
< | < | ||
行 34: | 行 88: | ||
</ | </ | ||
- | その費用関数 | + | 年齢取替をマルコフ決定過程で評価するためには、劣化の状態遷移行列をP.Dgrを持っている時、最後の一行を次のコードで変更しなければならない。 |
+ | |||
+ | < | ||
+ | P.Dgr[dim(P.Dgr)[1], | ||
+ | </ | ||
+ | |||
+ | この変更を行わないと、故障状態に至っても、事後取替(緊急取替)をせずに故障状態に留まらせてしまう。 | ||
+ | |||
+ | この事後取替込みの、劣化の費用関数を次のように与えてみる。 | ||
< | < | ||
行 40: | 行 102: | ||
</ | </ | ||
- | 残りのコード。 | + | 残りのコード。年齢の範囲はT*を切り上げた値か、その次まで用意する。 |
+ | |||
+ | 状態遷移行列の準備。 | ||
< | < | ||
- | S.Dgr = c(0:4) | + | S.Dgr = c(0:(dim(P.Dgr)[1]-1)) |
S.Age = c(0:10) | S.Age = c(0:10) | ||
- | P.Dgr = matrix(c( | ||
- | 9/10, 1/10, 0, 0, 0, | ||
- | 0, 9/10, 1/10, 0, 0, | ||
- | 0, 0, 9/10, 1/10, 0, | ||
- | 0, 0, 0, 9/10, 1/10, | ||
- | 1, 0, 0, 0, 0), nrow=5, ncol=5, byrow=TRUE) | ||
- | rownames(P.Dgr) = c(0:4) | ||
- | colnames(P.Dgr) = c(0:4) | ||
P.Age = mmdp_create.ageing.matrix(S.Age) | P.Age = mmdp_create.ageing.matrix(S.Age) | ||
P.Hrd = mmdp_create.age.replacement.matrix(S.Age, | P.Hrd = mmdp_create.age.replacement.matrix(S.Age, | ||
行 60: | 行 116: | ||
P[,,1] = P.Dgr.2 | P[,,1] = P.Dgr.2 | ||
P[,,2] = P.Hrd.2 | P[,,2] = P.Hrd.2 | ||
+ | </ | ||
+ | |||
+ | 費用の準備。 | ||
+ | |||
+ | < | ||
C.Opr.Dgr = c(0, | C.Opr.Dgr = c(0, | ||
- | C.Opr.Age = rep(0,11) | + | C.Opr.Age = rep(0,length(S.Age)) |
- | C.Rpl.Dgr = c(150,150, | + | C.Rpl.Dgr = rep(150,length(S.Dgr)) |
- | C.Rpl.Age = rep(0,11) | + | C.Rpl.Age = rep(0,length(S.Age)) |
C.Opr.Opr = mmdp_expand.R.2(list(C.Opr.Dgr, | C.Opr.Opr = mmdp_expand.R.2(list(C.Opr.Dgr, | ||
C.Rpl.Rpl = mmdp_expand.R.2(list(C.Rpl.Dgr, | C.Rpl.Rpl = mmdp_expand.R.2(list(C.Rpl.Dgr, | ||
行 70: | 行 131: | ||
</ | </ | ||
- | 年齢が6になったら、交換を行うという保全基準の方策 | + | 上の各数値は各自で設定し直す必要がある。 |
+ | |||
+ | 年齢が6になったら、交換を行うという保全基準の方策は、次のように与える。 | ||
< | < | ||
行 76: | 行 139: | ||
</ | </ | ||
- | 反復によって総機体割引き費用を求める。 | + | 反復によって総期待割引き費用を求める。 |
< | < | ||
行 82: | 行 145: | ||
</ | </ | ||
- | 一方で、価値反復法によって、故障したら事後取替、そして予防取替、の2つの最適な方策を求めてみると。 | + | 一方で、価値反復法によって、故障したら事後取替、そして年齢による予防取替、の2つの最適な方策を求めてみると。 |
< | < | ||
行 88: | 行 151: | ||
</ | </ | ||
+ | 年齢による予防取替は、年齢に達しない限り、そのまま放置をするのだが、それが1年間放置する、という結果になってしまう。 | ||
+ | |||
+ | 同じ設定での状態監視保全は、前回の内容そのままなので省略する。 |