差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン次のリビジョン両方とも次のリビジョン | ||
r:maintenance:hard_time_maintenance_on_mdp [2019/01/07 06:04] – [年齢取替の行動の状態遷移行列] watalu | r:maintenance:hard_time_maintenance_on_mdp [2019/01/07 10:17] – watalu | ||
---|---|---|---|
行 1: | 行 1: | ||
- | ===== 時間計画保全のマルコフ決定過程による表現 ==== | + | ===== 時間計画保全のマルコフ決定過程による表現 |
==== 年齢取替の行動の状態遷移行列 ==== | ==== 年齢取替の行動の状態遷移行列 ==== | ||
行 27: | 行 27: | ||
</ | </ | ||
+ | === 状態指定取替 P.Age === | ||
+ | |||
+ | ある状態でのみ取替を実行し、他の状態では何もしない行動を状態指定取替として定義しておく。 | ||
次の関数は状態を年齢に取り、指定した年齢で取替を行い、他の年齢では何もしないという行動を表す状態遷移行列を生成する。 | 次の関数は状態を年齢に取り、指定した年齢で取替を行い、他の年齢では何もしないという行動を表す状態遷移行列を生成する。 | ||
行 44: | 行 47: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | これも状態空間が0から4の場合に実行してみておく。 | ||
次の実行例は、年齢が0から4まで推移する対象に、年齢2で取替を行う行列を生成する。 | 次の実行例は、年齢が0から4まで推移する対象に、年齢2で取替を行う行列を生成する。 | ||
< | < | ||
- | mmdp_create.age.replacement.matrix(c(0: | + | 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 | ||
+ | </ | ||
+ | |||
+ | この行動は、通常の状態監視保全では現れないことを注意しておく。 | ||
+ | |||
+ | === 劣化の状態遷移行列に故障時の取替を加える === | ||
時間計画保全では、予防取替と事後取替がある。 | 時間計画保全では、予防取替と事後取替がある。 | ||
行 67: | 行 88: | ||
</ | </ | ||
- | その費用関数 | + | 年齢取替をマルコフ決定過程で評価するためには、劣化の状態遷移行列をP.Dgrを持っている時、最後の一行を次のコードで変更しなければならない。 |
+ | |||
+ | < | ||
+ | P.Dgr[dim(P.Dgr)[1], | ||
+ | </ | ||
+ | |||
+ | この変更を行わないと、故障状態に至っても、事後取替(緊急取替)をせずに故障状態に留まらせてしまう。 | ||
+ | |||
+ | この事後取替込みの、劣化の費用関数を次のように与えてみる。 | ||
< | < | ||
行 73: | 行 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, | ||
行 93: | 行 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, | ||
行 103: | 行 131: | ||
</ | </ | ||
- | 年齢が6になったら、交換を行うという保全基準の方策 | + | 上の各数値は各自で設定し直す必要がある。 |
+ | |||
+ | 年齢が6になったら、交換を行うという保全基準の方策は、次のように与える。 | ||
< | < | ||
行 109: | 行 139: | ||
</ | </ | ||
- | 反復によって総期待割引き費用を求める。 | + | 反復によって総期待割引き費用を求めるには、MDPtoolboxパッケージの中の関数mdp_eval_policy_iterativeを用いる。この関数の引数は、状態遷移行列のリスト、効用関数のリスト、割引き係数、方策、である。 |
< | < | ||
行 115: | 行 145: | ||
</ | </ | ||
- | 一方で、価値反復法によって、故障したら事後取替、そして年齢による予防取替、の2つの最適な方策を求めてみると。 | + | 価値反復法によって、故障したら事後取替、そして年齢による予防取替、の2つの最適な方策を求めてみる。これも同じくMDPtoolboxパッケージの関数mdp_value_iterationを用いる。 |
< | < | ||
行 121: | 行 151: | ||
</ | </ | ||
- | 年齢による予防取替は、年齢に達しない限り、そのまま放置をするのだが、それが1年間放置する、という結果になってしまう。 | + | 年齢による予防取替は、年齢に達しない限り、そのまま放置をするのだが、それが1年間放置する、という結果になってしまう。なぜだろうか? |
同じ設定での状態監視保全は、前回の内容そのままなので省略する。 | 同じ設定での状態監視保全は、前回の内容そのままなので省略する。 | ||
- |