この記事は、オンデマンド印刷機における定期交換部品の最適な交換時期をコンピュータ・シミュレーションによって推定するスタディである。
デジタル印刷機の保守サービスをコンピュータ・シミュレーションで最適化する一連のプロセスのうち、この記事では3分割した2番目のステップを説明する。最初のステップでは顧客による印刷機の使われ方を推定した。これをもとに、定期交換部品を計画的に交換する交換時期が、交換された部品数 (コスト) と印刷機の停止時間 (ダウンタイム) に及ぼす影響を推定する。最適な交換時期は両者が折り合うところになる。シミュレーションは、プログラミング言語Pythonと無償の離散事象シミューレションフレームワークsimpyを用いて実装する。
保守サービスにおける課題の一つに、サービス提供に要するコストと、顧客が受け取るサービス品質との両立がある。顧客による印刷機の使われ方が部品ライフに影響を及ぼすと仮定し、架空の印刷ジョブを生成する。それらを印刷機へ投入し、部品の摩耗と故障、それに保守サービスによる部品の刷新をシミュレートすることで、部品の交換数 (コスト) と印刷機の停止時間 (ダウンタイム) を予測する。交換時期をさまざま変化させて予測結果を確認する。
本スタディでは、確率的に故障が発生する応力-強度モデルを採用して、印刷機の「使われ方」から部品ライフを推定する故障モデルを作成した。応力-強度モデルは、既知の応力 S と強度 R から、故障の確率 F を予測する。強度 R (resistance) は設計や製造で決まり、応力 S (stress) は使い方で決まる。どちらも発生確率を与える確率分布である。応力 S > 強度 R の場合に故障が起こり、故障確率 F (failure probability) が決まる。
印刷機の定期交換部品のうち、本スタディでは用紙の搬送系の部品 (例: ローラー、ベルト) を取り上げる。部品の経年をシミュレートするため、未知パラメータから生成した印刷ジョブによる部品負荷 ΔT を累積する。各時点での生存-故障の判定は、部品強度 R に基づく生存関数 (survival function, SF) を使用する。生存関数は、部品の母集団のうち時刻Tの時点で生存している割合を表し、使用開始時は1、時間経過とともに0に近づく。時刻T1まで生き残った部品がさらに時刻T2まで生き残る確率は、条件付き生存率 CS(ΔT|T1) = SF(T2)/SF(T1) で求められる。各時点で故障するかどうか、[0-1) の一様乱数によって確率的に判定する。
デジタル印刷機の部品の故障と交換に関するイベントを表し、コンピューター・シミュレーションするためにシミュレーションモデルを作成した。前述した故障モデルを表現するためのリソース、プロセス、データといったオブジェクトも含む。主な構成要素を次に示す。
予防保守による交換時期による信頼性とコストへの影響を評価するためのソフトウェアである。次に構成を説明する。
このシミュレーション環境内には複数のオブジェクトが共存し、互いに同期を取りながら各種イベントが生成、処理されることで全体が進行する。シミュレーションは内部の時計が指定時間に達するまで継続する。これらを簡潔に記述するため、Python言語向けの離散事象シミュレーションフレームワーク Simpy を使用する。
保守サービスにおける定期交換部品の最適な交換時期を推定した。
定期交換部品を計画的に交換する「管理目標」が、印刷機の停止時間 (ダウンタイム) や交換される部品数 (コスト) に対し、どのような影響を及ぼすかをシミュレーションで推定する。管理目標を一定間隔で変えて停止時間と交換部品数の変化をもとに最適値を検討する。
シミュレーション条件を表に示す。部品の強度のワイブル分布は架空のものである。顧客の未知パラメータも同様に架空のものとした。管理目標は部品強度の尺度パラメータ (1000k) の 0.6~1.6倍の範囲に6箇所設定した。
表. シミュレーション条件
意味 | 値 | 補足 |
---|---|---|
部品の強度 R を表すワイブル分布の尺度パラメータ | –designed_life 1000000 | 1000k [A4短辺ページ] と仮定 |
(同) 形状パラメータ | –beta 1.8 | 摩耗故障型と仮定 |
予防保守の管理目標(係数) | –wearout_rate 0.6 0.8 1.0 1.2 1.4 1.6 | 600k - 1600k まで 200k 刻みで比較する |
シミュレーション期間 | –maxt 60*24*30*12 | シミュレーション期間を内部時計で 360 日とする |
シミュレーション回数 | –iter 20 | 20 [回/条件] のシミュレーション結果を平均化する |
顧客未知パラメータのトータルエリアカバレッジ | –ac L | トータルエリアカバレッジ(インク被覆率)を低(Low)とする (現状未使用であり、シミュレーションに影響を及ぼさない) |
(同) 印刷ジョブ長 | –pl M | 印刷ジョブ長(1ジョブ中のページ数)を中(Mid)とする |
交換時期を遅らせることによりトータルの部品交換数は低下傾向を示した。交換理由の別では、「予防保守」(水色) は減り続け、一方「障害修理」(桃色) は増え続けた。部品が故障するまで使い切ることは、交換部品数を削減する利点がある反面、障害修理が増える欠点も持ち合わせていることがわかった。本シミュレーションでは経年が少ない場合でも確率的に故障が起こるため (故障の確率密度はワイブル分布する)、交換時期を早めても故障を抑えきれないことがわかった。
![]()
図. 定期交換部品の計画的な交換時期が交換部品数 (コスト) に及ぼす影響
交換時期を遅らせることによるトータルの停止時間はほぼ一定 (標準誤差の範囲内) であった。交換理由の別では、「予防保守」(水色) は減少傾向、「障害修理」(桃色) は増加傾向が見られた。本シミュレーションでの停止時間は、計画的な予防保守が30分なのに対し、突発的な障害修理では60-90分とペナルティを含んでいることから、交換部品数の減少は停止時間の増加で相殺されたものと考える。
![]()
図. 定期交換部品の計画的な交換時期が印刷機の停止時間 (ダウンタイム) に及ぼす影響
エラーバーは標準誤差
管理目標を増加させると (交換時期を遅らせると) 保守サービスで消費される部品交換数は低下した。これは部品コストを削減する意味では好ましい。一方、本スタディでは考慮しなかったが、保守サービスを担当するエンジニアの人的コスト (固定費) の観点では計画的な予防保守が望ましく、突発的な保守作業が生じる「障害修理」は、それが高優先であることも含めて不利といえる。両側面を考慮した最適値の決定は本スタディの課題である。
管理目標を増加させると (交換時期を遅らせると) 「障害修理」による印刷機の停止時間が増加し、交換される部品数 (交換作業の回数) は減っても、障害修理のために業務が止まる時間は反対に増えることがわかった。印刷機は信頼性を重視することを考え合わせると、部品が故障するまで運転を続ける保守運用 (run-to-failure) 導入は難しいと考えられる。
応力-強度干渉モデル図 (AC=L,PL=M)(管理目標係数0.80)
(上段) ワイブル分布で近似した部品の強度 R の確率密度(青線)。広がった裾野は低いライフで故障が起こる可能性を示している。(中段) 印刷機の「使われ方」を表すチャートで、ヒストグラムは、障害修理で交換された部品(桃色)と、予防保守で交換された部品(水色)のライフ分布である。緑色の点線は部品ライフの算術平均を示す。緑色の実線は交換時期の管理目標で、これを超えた部品は予防保守で交換される対象となる。応力 S (赤線) は対数正規分布で近似したライフ分布である。(下段) 応力 S が強度 R を上回る領域が強調され、その面積は故障確率 F に対応する。
管理目標を増加させる (緑色の実線を右側に移動させる) につれて部品ライフの平均値 (緑色の点線) も増加するが、やがて 850k (8.5E5) 付近を上限にして伸びが止まることが分かった。部品ライフを前提にした議論において (例: コスト計算)、こうした上限を考慮する必要性を示唆する。
応力の推移グラフ(AC=L,PL=M)
故障確率 (部品が故障する頻度) は、管理目標を増加させるにつれて減少する傾向が示された。これは、低い管理目標が過剰な交換部品を行ったことに対応する。
故障確率推移グラフ(AC=L,PL=M).png
最後に、サービス中に交換時期を延長した場合、部品交換数がどのように変わるかを推定した。管理目標 (係数)を 0.8 → 0.9 に変更して2年後を予測すると、過去2年間のトレンドを外挿した場合は総数37個、交換時期を延長した場合は総数27個であった。差分の10個は部品コストの削減効果を示すものである。
保守サービス管理目標の変更による改善効果(0.8, 0.9)(AC=L,PL=L)
シミュレーションによって、予防保守による介入 (打ち切り) が部品ライフに影響を及ぼし、印刷機によって異なる「使われ方」に応じて最適な交換時期があることが確かめられた。しかし市場には多数の印刷機が稼働し、限られた資源 (人、時間、資金) のもとで保守サービスの収益性を高めるのに多くの検討課題が残っている。
オンデマンド印刷機の定期交換部品の最適な交換時期を推定するため、応力-強度干渉モデルに基づく故障モデルと、離散事象シミュレーションモデルからなるコンピュータ・シミュレーションを構築した。顧客による印刷機の使われ方を推定した未知パラメータに基づき、用紙の搬送距離を部品にかかる負荷と見なした。この負荷が累積して部品強度に基づく生存関数から突発的な故障が生じるとともに、交換時期に基づく計画的な予防保守による打ち切りが起こると考え、交換されたこれらの部品ライフの分布から応力を推定した。シミュレーションの結果、交換時期を延長すると交換部品数は減少してコストへ寄与するが、計画外の機械停止時間が増加することで顧客業務への影響は増す。また部品ライフの平均値には上限があることも分かった。課題としてこうした相反する要件を人的コストなどの因子を含め、より包括的に検討することがある。
usage: sim_component_failure.py [-h] [--step] [--debug] [--wearout_rates WEAROUT_RATES [WEAROUT_RATES ...]] [--designed_life DESIGNED_LIFE] [--beta BETA] [--eta ETA] [--check_interval CHECK_INTERVAL]
[--maxt MAXT] [--maxx MAXX] [--iter ITER] [--seed SEED] [--area_coverage AREA_COVERAGE] [--page_length PAGE_LENGTH]
options:
-h, --help show this help message and exit
--step
--debug
--wearout_rates WEAROUT_RATES [WEAROUT_RATES ...]
予防保守の管理目標(係数)。部品ライフ設計値を1.0とした場合の管理目標(係数)を指定する。(デフォルト: 1.0)。(例: --wearout_rates 1.0, --wearout_rates 0.9 1.0 1.1)
--designed_life DESIGNED_LIFE
部品ライフ設計値。算術平均やB(10)ライフなどで指定される (デフォルト: 1000000)。(例: --designed_life 1000000)
--beta BETA βは、部品ライフをワイブル分布で表した際の形状パラメータ。β<1で初期故障型、β=1で偶発故障型、1<βで摩耗型故障を示す (デフォルト: 1.0)。(例: --beta 1.0)
--eta ETA ηは、部品ライフをワイブル分布で表した際の尺度パラメータ。 (デフォルト: 部品ライフ設計値)。(例: --eta 1000000)
--check_interval CHECK_INTERVAL
保守計画における保守間隔 [単位:[分]] (デフォルト: 60*24*10 (10日間の意味))。(例: --check_interval 60*24*10)
--maxt MAXT シミュレーション期間 [単位:[分]] (デフォルト: 60*24*30*12 (1年間の意味))。(例: --maxt 60*24*30*12)
--maxx MAXX 交換部品数の最大値。この指定に達した時点でシミュレーションを終了する (デフォルト: 200)。(例: --maxx 200)
--iter ITER シミュレーション回数 (デフォルト: 1)。(例: --iter 10)
--seed SEED random.seed() 初期値。(デフォルト: None)。(例: --seed 42)
--area_coverage AREA_COVERAGE, --ac AREA_COVERAGE
area_coverage [L, M, H] (デフォルト: M)。(例: --area_coverage M)
--page_length PAGE_LENGTH, --pl PAGE_LENGTH
page_length [L, M, H] (デフォルト: M)。(例: --page_length M)
シミュレータの概ねの設計を次に示す。ソースコードは付録に添付した。
シミュレーション (main)
├ シミュレーション環境作成
├ 印刷シミュレーションプロセス
└ 結果表示
印刷シミュレーションプロセス (printingmachine_simulator_process)
├ 印刷機ユニットを確保し、部品をインストール
├ 印刷機の保守計画を策定し、印刷機の予防保守のスケジュールと実施プロセスを実行
└ シミュレーション期間中のジョブ受注 ← ループ
└ 定期的(30分間隔)に印刷ジョブ作成し、印刷ジョブの出力プロセスを実行
印刷機ユニット (class PrintingMachine)
├ 予防保守実行プロセス (preventive_maintenance_process)
│ ├ 交換部品の生成
│ └ 交換作業 (待機時間: 30分)
├ 障害修理実行プロセス (corrective_maintenance_process)
│ ├ 交換部品の生成
│ └ 修理作業 (待機時間: 60-90分)
└ 印刷実行プロセス(含む部品ライフ進行(摩耗)) (printout_process)
├ 印刷実行 (待機時間: 印刷ジョブ長/印刷速度)
└ 部品ライフ進行(摩耗)
保守作業 (class MaintenanceWork)
└ 印刷機の予防保守のスケジュールと実施プロセス (preventive_maintenance_setup_process)
├ 次回の予防保守まで待機 (時間: 10日間)
├ 現在部品ライフが計画部品ライフを超過したら部品を交換
│ ├ エンジニアおよび印刷機ユニットを確保
│ └ 予防保守実行プロセス
└ 印刷機の予防保守のスケジュールと実施プロセス (次回分。再帰している)
印刷ジョブ (class PrintJob)
└ 印刷ジョブ作成 (init)
└ 顧客の未知パラメータに基づく印刷ジョブを作成 (generate_customer_print_job)
印刷ジョブの出力プロセス (printing_printjob_process)
├ 印刷機ユニットを確保
├ 故障確率の算出と生存-故障判断
│ ├ 故障時、修理するエンジニアを確保
│ └ 障害修理実行プロセス
├ 印刷実行プロセス(含む部品ライフ進行(摩耗))
└ print_job 毎の結果を記録 (印刷所要時間, 終了時刻と成否)
交換部品 (class ReplacementPart)
├ 交換部品の生成 (init)
│ ├ 計画部品ライフを取得 (所定の値)
│ └ 部品ライフ分布を生成(ワイブル分布) (get_internal_part_life)
├ 部品ライフ進行(摩耗) (wear)
│ └ 累積印刷ページに「ページ長」を加算し、部品ライフを進行させる
└ 故障確率の算出と生存-故障判断 (failure)
└ 部品固有ライフ ≦ 累積印刷ページ となったら故障
#### 印刷シミュレーションプロセス
シミュレーション環境を構築し、さまざまな初期化をした後、シミュレーション中の印刷ジョブを生成する。シミュレーションは内部時計が上限を超過するか、交換部品数が所定数に達したら終了する。
#### 予防保守実行プロセス
エンジニアによる部品の交換を記述した。計画内の作業であるため印刷機を止める作業時間を短くした (30分)。
#### 障害修理実行プロセス
予防保守と同様に、エンジニアによる部品の交換であるが、計画外の作業であるため印刷機を止める作業時間を長くした (60-90分)。
#### 印刷実行プロセス(含む部品ライフ進行(摩耗))
印刷ジョブを出力を記述する。印刷の所要時間は、印刷ジョブ長/印刷速度 とした。その後、部品ライフを進行させた。
#### 印刷機の予防保守のスケジュールと実施プロセス
予防保守の作業を記述する。予防保守の実施間隔 (check_interval) は、保守サービスの管理目標値として規定される (デフォルト: 10日間)。予防保守の作業内容は、部品ライフが計画部品ライフを超えていたら部品を交換し、次回の予防保守をスケジュールする。なお、交換の際はリソース (エンジニアと印刷機ユニット) の確保を要するとした。
#### 顧客の未知パラメータに基づく印刷ジョブを作成
最初の記事で推定したシミュレーション結果を未知パラメータとして採用した。
- 印刷用紙サイズ(重み付きランダム)
- 用紙サイズ重み[A4:5%, B4:3%, A3:46%, 長尺:46%]
- トータルエリアカバレッジ(用紙サイズにより分布は異なる)
- 印刷ジョブ長(用紙サイズにより分布は異なる)
- 両面/片面(μ=0.5, σ=0.3)
#### 交換部品の生成
シミュレーションで使われる部品を生成する。部品強度 F として、印刷機全体の母集団における部品ライフを規定した。本来は保守サービスを介して収集した部品ライフに基づいて設定するところだが、架空の印刷機のものとしてワイブル分布を仮定した。部品ライフは無次元してA4短辺を1とした。
#### 故障確率の算出と生存-故障判断
部品強度 R に対応する生存関数(SF)を元に、印刷ジョブ出力前まで生き残った部品がさらに印刷ジョブの出力後まで生き残る確率 (条件付き生存率CS) を算出した。故障か故障でないか確率的に決定するために一様乱数を使用した。
このページに掲載した作品 (テキスト、プログラムコードなど) はパブリック・ドメインに提供しています。詳細は CC0 1.0 全世界 コモンズ証 をご覧ください。