文書の過去の版を表示しています。


状態監視保全

故障時間のデータしかなけば、寿命分布を推定し、時間取り替えやブロック取り替えを考えるしかない。 しかし、多くの製品に多くの時点での劣化状態を測定したデータが得られていれば、それに基づいて劣化状態の変化のモデルを作り、時間取り替えやブロック取り替え以外の保全方式も検討できるようになる。

  • National Bridge Inventoryは、アメリカ合衆国のすべての橋の棚卸しのデータである。毎年の春にすべての橋の状況が登録され、公開されている。橋の所在地、役割、種類、主な建材も記されているが、保全の研究者にとってはEXCELLENT, VERY GOOD, GOOD, SATISFACTORY, FAIR, POOR, SERIOUS, CRITICAL, “IMMINENT” FAILURE, FAILEDの10段階の状態のデータがとても興味深い。
  • Hard Drive Data and Statsは、アメリカにあるBlackblazeというオンラインバックアップサービスやクラウドストレージサービスを展開する会社が公開している、ハードディスクの信頼性試験のデータである。実際い運用しているデータセンターでの統計情報のみでなく、個別のデータまで公開されているところが、画期的と言える。

対象の状態を監視し、状態に応じて適切な保全を施すことを、状態監視保全という。 英語では状態監視がcondition monitoring、監視した状態に基づく保全がcondition based maintenanceとなる。状態監視保全は「状態に基づく保全と状態監視」という意味のcondition based maintenance and monitoring、condition based maintenance and condition monitoring、あるいはcondition monitoring and condition based maintenanceなどが使われるが、単にcondition based maintenanceと呼ばれることも多い。

状態が正常と故障(機能喪失、性能低下を含む)の2状態のみの場合の保全行動には、次の3種類しかない。

  1. 正常な状態の製品を正常な代替品で交換する予防取替
  2. 故障した状態の製品を正常な代替品で交換する事後取替
  3. 故障した状態の製品を正常な状態に戻す修理

取替は交換の言い換えで、修理は状態の回復を意味する。もし状態の種類が正常と故障の間をもっと細かく、例えば劣化しているが使える状態、という新たな状態も含めて3種類の観測ができるなら、状況はもっと複雑になる。上の3つの保全行動に加えて、次の4つが加わる。

  1. 故障した状態の製品を劣化している状態に戻す修理
  2. 劣化している製品を正常な状態に戻す予防修理
  3. 故障した状態の製品を劣化している製品で交換する事後取替
  4. 劣化している製品を正常な状態に戻す予防取替

更に複雑な製品や大規模な製品では、いきなり製品全体の取替と全体を使い続ける2択問題では自由度が低い。むしろ部分ごとに状態監視と修理や取替が可能となるように、コンポーネントと呼ばれる単位を定めて、システムとして製品全体を設計する。このとき状態も1次元ではなく、コンポーネントの数だけのベクトルになり、保全行動もコンポーネントごとに検討する。また一つを修理するついでに別のコンポーネントも修理するなど、保全行動の経済性も考慮するようになっていく。以下では、現実の問題よりは少し単純な状況を想定して、状態監視保全が有効な場合の保全行動の合理的な選択について考えてもらう。

劣化過程のマルコフ連鎖によるモデル化

マルコフ過程(以下では離散時間離散状態マルコフ過程, あるいはマルコフ連鎖を想定)は、未来の状態を予測するには現在の状態を知っていれば十分であり、過去の状態推移の履歴は必要ない、というマルコフ性を満たす。マルコフ性とは、時点tの状態X[t]の確率分布がt以前の過去の状態推移の履歴H[t-]={x[t-1], x[t-2], …}の条件付き確率分布F(X[t]|H[t-])で与えられているとして、その確率分布が直前の時点の状態x[t-1]のみに依存するF(X[t]|H[t-])=F(X[t]|X[t-1]=x[t-1])という性質である。

劣化データがあれば、保全の対象システムの劣化の進行がマルコフ性を満たしているかどうかを確認できる。マルコフ性を満たしていれば、マルコフ連鎖に基づく劣化の推移のモデル化が有効である。以下では定常マルコフ過程と呼ばれる、2時点間の状態推移を表す条件付き確率分布が時点によらず共通な場合のみを扱う。

修理も取替もせずに壊れるまで使用することと、システムの状態が1次元の数直線上の点で表せるとき、システムのマルコフ連鎖は次のような推移行列を持つ。

P[1→1]=現在の状態が1で、次の時点でも状態1に留まる確率P[1→2]=現在の状態が1で、次の時点で状態2に進行する確率P[1→N]=現在の状態が1で、次の時点で故障状態Nに到達する確率
P[2→1]=現在の状態が2で、次の時点で状態2に回復する確率P[2→2]=現在の状態が2で次の時点でも、状態2に留まる確率P[2→N]=現在の状態が2で次の時点で故障状態Nに到達する確率
P[N→1]=現在故障中で、次の時点で状態1に回復する確率P[N→2]=現在故障中で、次の時点で状態2に回復する確率P[N→N]=現在故障中で、次の時点も故障中のままとなる確率

システムの状態が3つに分類され、1が正常、2が劣化、3が故障とする。 次の遷移行列は、毎時点、90%の確率で同じ状態に留まり10%の確率で状態が悪化すること、 そして故障すると何も働きかけない限りその状態(3)に留まること、を表す。

これを行列で表すと、次のようになる。

P[1→1]=9/10P[1→2]=1/10P[1→3]=0
P[2→1]=0P[2→2]=9/10P[2→3]=1/10
P[3→1]=0P[3→2]=0P[3→3]=1

これを、劣化を見守ったときに i→j と状態が変化する確率を、配列の第(i,j)成分とする、という意味で、次のように記していく。

P(劣化)[1,1]=9/10P(劣化)[1,2]=1/10P(劣化)[1,3]=0
P(劣化)[2,1]=0P(劣化)[2,2]=9/10P(劣化)[2,3]=1/10
P(劣化)[3,1]=0P(劣化)[3,2]=0P(劣化)[3,3]=1

i→jという遷移が発生するための条件の一つは、状態がiにあること、もう一つは、保全行動を取らずに劣化の進行を許すこと、である。P(劣化)[i→j]は、この二つの条件の下での条件付き確率であり、長く書けば「P[i→j|現時点で状態がiであること & 保全行動を取らずに劣化の進行を許すこと]」となる。

これをRのコードで表すと

P.Dgr = matrix(c(
  9/10, 1/10, 0,
  0, 9/10, 1/10,
  0, 0, 1), nrow=3, ncol=3, byrow=TRUE)

参考までに、上のグラフは次のコードで描いた。

require(igraph)
g = graph.adjacency(P.Dgr*10,weighted=TRUE)
E(g)$weight = c(2,1,2,1,2)
plot(g,edge.width=E(g2)$weight,vertex.color="green",vertex.label.family="Helvetica")

保全行動の遷移行列による表現

上の推移行列は、劣化が徐々に進行することを表している。 これは、状態回復について何も働きかけない、という行動の下での遷移行列と言える。

取替という保全を行うと、どのような状態からでも正常な状態(1)に推移する。 これも遷移行列で表現できる。

P[1→1]=現在の状態が1で、取替によって次の時点の状態も1となる確率=1P[1→2]=現在の状態が1で、取り替えても次の時点で状態2である確率=0P[1→N]=現在の状態が1で、取り替えても次の時点が故障状態Nとなる確率=0
P[2→1]=現在の状態が2で、次の時点で状態2に回復する確率=1P[2→2]=現在の状態が2で次の時点でも、状態2に留まる確率=0P[2→N]=現在の状態が2で次の時点で故障状態Nに到達する確率=0
P[N→1]=現在故障中で、取替によって次の時点で状態1に回復する確率=1P[N→2]=現在故障中で、取り替えたのに次の時点の状態が2となる確率=0P[N→N]=現在故障中で、取り替えたのに次の時点も故障中のままとなる確率=0

システムの状態が3つに分類され、1が正常、2が劣化、3が故障とする。 次の遷移行列は、どの状態でも取替を実施すると必ず、次の時点では状態1になることを表す。

P[1→1]=1P[1→2]=10P[1→3]=0
P[2→1]=1P[2→2]=0P[2→3]=0
P[3→1]=1P[3→2]=0P[3→3]=0

これを、必ず取替を行なうことと状態がiにあることの条件の下で状態が i→j と変化する確率を、配列の第(i,j)成分とする、という意味で、次のように記していく。

P(取替)[1,1]=1P(取替)[1,2]=0P(取替)[1,3]=0
P(取替)[2,1]=1P(取替)[2,2]=0P(取替)[2,3]=0
P(取替)[3,1]=1P(取替)[3,2]=0P(取替)[3,3]=0

これをRのコードで表すと

P.Rpl = matrix(c(
  1, 0, 0,
  1, 0, 0,
  1, 0, 0), nrow=3, ncol=3, byrow=TRUE)

となる。ただし、この遷移行列はただでは使えない。取替費用を投じて始めて、推移行列を最初のP.Kから、このP.Rplに替えることができる。

同様に、修理による状態の変化もマルコフ連鎖の遷移行列で表現できる。

P[1→1]=現在の状態が1で、修理によって次の時点の状態も1となる確率=1P[1→2]=現在の状態が1で、修理しても次の時点で状態2である確率=0P[1→N]=現在の状態が1で、修理しても次の時点が故障状態Nとなる確率=0
P[2→1]=現在の状態が2で、修理次の時点で状態1に回復する確率=1P[2→2]=現在の状態が2で、修理しても次の時点で状態2に留まる確率P[2→N]=現在の状態が2で修理によって次の時点で故障状態Nに到達する確率=0
P[N→1]=現在故障中で、修理によって次の時点で状態1に回復する確率P[N→2]=現在故障中で、修理によって次の時点の状態が2となる確率P[N→N]=現在故障中で、修理したのに次の時点も故障中のままとなる確率

システムの状態が3つに分類され、1が正常、2が劣化、3が故障とする。 次の遷移行列は、どの状態でも取替を実施すると必ず、次の時点では状態が1だけ回復することを表す。

P[1→1]=1P[1→2]=10P[1→3]=0
P[2→1]=1P[2→2]=0P[2→3]=0
P[3→1]=0P[3→2]=1P[3→3]=0

これを、必ず修理を行なうことと状態がiにあることの2つの条件の下で状態が i→j と変化する確率を、配列の第(i,j)成分とする、という意味で、次のように記していく。

P(修理)[1,1]=1P(修理)[1,2]=0P(修理)[1,3]=0
P(修理)[2,1]=1P(修理)[2,2]=0P(修理)[2,3]=0
P(修理)[3,1]=0P(修理)[3,2]=1P(修理)[3,3]=0

これをRのコードで表すと

P.Rpr = matrix(c(
  1, 0, 0,
  1, 0, 0,
  0, 1, 0), nrow=3, ncol=3, byrow=TRUE)

となる。ただし、この遷移行列はただでは使えない。修理費用を投じて始めて、推移行列を最初のP.Dgrから、このP.Rprに替えることができる。取替と比べて、修理は状態回復の幅が小さく、通常は費用が取替よりも安く済む。

他に、1/2の確率で一つ状態をよくするが、1/2の確率でそのままの状態に留まる、確率修理もある。

P.Rpr.P = matrix(c(
  1, 0, 0,
  1/2, 1/2, 0,
  0, 1/2, 1/2), nrow=3, ncol=3, byrow=TRUE)

同様に、上のグラフは次のコードで描いている。

g <- graph.adjacency(P.Rpl,weighted=TRUE)
E(g)$weight = c(1,1,1)
plot(g,edge.width=E(g)$weight,vertex.color="green",vertex.label.family="Helvetica")
g <- graph.adjacency(P.Rpr,weighted=TRUE)
E(g)$weight = c(2,2,2)
plot(g,edge.width=E(g)$weight,vertex.color="green",vertex.label.family="Helvetica")
g <- graph.adjacency(P.Rpr.P*2,weighted=TRUE)
E(g)$weight = c(2,1,1,1,1)
plot(g,edge.width=E(g)$weight,vertex.color="green",vertex.label.family="Helvetica")

保全の行動の費用もしくは報酬

費用や損失は小さくすることが望ましく、報酬や利得は大きくすることが望ましい。 保全では通常、費用を考えることが多い。 費用の頭文字をとって「C」で表す。

典型的な保全行動の種類は次の通りである。

保全行動説明システムの状態への影響行使
稼働(継続)稼働を見守る状態遷移に影響を行使せず、劣化過程に委ねる
確率修理点検・診断の後、状態に応じて定められた修理を行う劣化過程を止めて、修理内容に応じた状態に戻すが、戻る先は幾つかの状態のいずれかとなる
小修理点検・診断の後、状態に応じて定められた部品交換を行う劣化過程を止めて、修理内容に応じた状態に戻す
大修理点検・診断の後、劣化している部品やコンポーネントをすべて新しい部品やコンポーネントと取り替える劣化過程を止めて、新品同様の状態に戻す
取替新品と交換する新品の状態に戻す
略語(他動詞)KeepRepairOverhaulReplace
状態稼働を見守る費用少し修理する費用新品同様まで修理する費用新品と交換する費用
1C(稼働)[1]C(小修理)[1]C(大修理)[1]C(取替)[1]
2C(稼働)[2]C(小修理)[2]C(大修理)[2]C(取替)[2]
NC(稼働)[N]C(小修理)[N]C(大修理)[N]C(取替)[N]

状態を1戻す修理(小修理)のに、2→1と3→2で同じ部品を交換するとも限らない。そのため、修理による状態推移2→1と別の修理3→2同じ費用がかかるとは限らない。

また状態を1に戻す修理(大修理)では、2→1と3→1で通常は前者の方が費用が安い。

取替の費用は、現在の状態のシステムを下取りに出したり、処分して上がる利益がなければ、一定となる。

例えば、次のようなコスト設定があるとする。

KeepRepairOverhaulReplace
101020150
205070150
3500250180150

これをRでは、例えば次のようなコードで与える。

C.Opr = c(0,0,500)
C.Rpr = c(10,50,250) 
C.Ovh = c(20,70,180)
C.Rpl = c(150,150,150)
Cost = cbind(C.Opr, C.Rpr, C.Ovh, C.Rpl)
colnames(Cost) = c("Oper.","Repair","Overhaul","Replace")
rownames(Cost) = c("1","2","3")
  Oper. Repair Overhaul Replace
1     0     10       20     150
2     0     50       70     150
3   500    250      180     150

グラフは次のコードで描ける。

matplot(Cost,type="b")
legend("topleft",lty=c(1,2,3,4),
       col=c(1,2,3,4),
       legend=c("1:Keep", "2:Repair", "3:Overhaul", "4:Replace"))

グラフからは、状態が1の場合には、状態に介入しない行動Keepの費用が一番安いことが見て取れる。このことから、状態1ではKeepを選択するのが望ましいように思われる。状態が2の場合には状態に介入しない行動Keepの費用が一番安いが、将来のことを考えると状態1に戻す行動Repairも気になる。状態が3の場合には状態1に戻す行動Replaceの費用が一番安いことが見て取れる。もし、状態3から状態2に戻す行動Repairの費用が、Replaceの費用よりも安ければ、どちらにしようか悩む。

この意思決定問題の解を、将来に生じる費用の合計に基づいて合理的に選択するように得るためのモデルが、マルコフ決定過程である。

マルコフ連鎖

壊れるまで使い続ける場合は、マルコフ解析が有効である。

マルコフ決定過程

複数ある行動を、状態に応じて施すことを考える場合は、マルコフ決定過程が有効である。