前回の投稿ではシミュレーションを使った実験計画法(Design of Experiments: DOE)が今や主流になっていることを述べました。今回は、まだ主流とは言えませんが、DMAICのプロセス改善プロジェクトでもシミュレーションを使っている、ということについて少し説明したいと思います。
なぜプロセス改善にシミュレーションを使うのか?
リーンを使ったプロセス改善や小さなDMAICプロジェクトの場合は、改善の範囲(またはスコープ)が小さいため、現在のプロセスと改善後のプロセスにそれほど大きな違いがありません。そのため経験のあるブラックベルトやマスターブラックベルトは、改善後のプロセスが成功するかどうかをおおよそ予測することができます。
リーン改善や小さなDMAICプロジェクトの良い所は、小さな改善を何度も継続的に行うこと(Continuous Improvement: CI)で最終的に大きな目標に到達することです。
継続的な改善(CI)を行う文化が根付いた企業であれば、何度もプロセスを変更することに抵抗を感じることはないでしょう。しかしCI文化がない企業の従業員にとっては、たとえ小さな変更であっても、それが何度も繰り返せば苦痛になります、「また変更するの?勘弁してよ!」という具合に。
そこで大きなプロセス改善を大きなDMAICプロジェクトで一気に片付けてしまうことがあります。この場合、改善後のプロセスが現在のプロセスとは大きく違うため、成功と失敗の幅が大きく、ハイリスク・ハイリターンであるというのが問題です。
上の図は小さな(そして継続的な)改善と大きな改善の違いをイメージしたものです。
小さな改善は、改善後の形も色もそれほど変わらず、「知っている範囲の境界線」からも近いので、改善の成功が十分予測できます。
一方大きな改善は、改善後の形も色も変わってしまい、また「知っている範囲の境界線」からの距離も遠く、成功するのかどうか予測することが難しく、改善に大きなリスクが伴います。
この改善リスクを減らすために、改善を実施する前に改善後のシミュレーションを行います。
改善を実施する前に改善後のシミュレーションを行えば、完全ではないとしても、その改善策が有効であるかどうかを検証することができます。つまりシミュレーションによって改善リスクを大幅に減らすことができます。
上の図で言えば、「知っている範囲の境界線」を右側にずらし、改善後のプロセスとの距離を縮めることができます。 「知っている範囲の境界線」 との距離が短ければ、それだけ予測の精度が高まります。
簡単なプロセスのシミュレーション(静的モデル)
業務プロセスや製造プロセスを表現するとき、フローチャートが良く使われます。そのフローチャートを使えば、作業時間などのシミュレーションを簡単に行うことができます。
フローチャート上では、プロセスの”流れ方”は直列、並列、分岐、合流、繰り返し(ループ)に分割することができます。そのプロセスの処理時間は、それぞれの”流れ方”に応じて、簡単な計算式で表すことができます(下図を参照)。
もしプロセスの各ステップ(AからJ)の処理時間と分岐や繰り返しの割合(X)が分かれば、フローチャートから起こした計算式(数値モデル)を使って、プロセス全体の処理時間が計算できます。また各ステップの処理時間のバラツキ、分岐や繰り返しの割合のバラツキが分かれば、そのバラツキを使ってモンテカルロ・シミュレーションを行い、プロセス全体の処理時間のバラツキをシミュレーションすることもできます。
静的モデルの問題点
上記のようなフローチャートから起こした数値モデルは静的モデルと言われます。何故ならプロセスを構成する要素(因子)が予め定義されていて、固定化されているからです。
静的モデルには次のような問題があります。
- 大きくて複雑なフローチャートから数値モデルを作るのは非常に困難である
- 仮に数値モデルを作れたとしても、もしフローチャートに変更があればその数値モデルも修正しなくてはならず、バグ(不具合)の原因になる
- 在庫や待ち時間など、待ち行列が扱えない
- 人やツール、機械など、リソースの割り当てを扱えない
- プロセスが開始される頻度など、イベントが扱えない
- メッセージや信号、生成物など、出力の受け渡しが扱えない
つまり静的モデルを使ったシミュレーションは簡単なようですが、実際の業務プロセスとは大きく異なるため、現実と照らし合わせるとシミュレーション結果の信憑性に疑問が残ります。
離散型シミュレーション・モデル(Discrete-event Simulation Model)
静的モデルの問題点は、離散型シミュレーション・モデル(Discrete-event Simulation Model)を使うことで解決できます。
例えば試着室の例で説明すれば、離散型シミュレーション・モデルを使うことで、
- 幾つかある試着室(リソース)の使用状況を動的にシミュレーションすることができる
- お客さんによって試着室の使用時間を変更できる
- お客さんの待ち行列を扱うことができる
- 待つことに諦めて帰ってしまうお客さんを扱うことができる
- お客さんの到着時間や到着頻度を変更できる
このような動的なシミュレーションは、静的モデルでは扱えません。一方、離散型シミュレーションを使うことで、より実際の業務プロセスや製造プロセスに近いシミュレーションを行うことが可能になります。
離散型シミュレーションモデル・ソフトウェア
静的モデルは紙と鉛筆があれば作ることができますが、離散型シミュレーション・モデルは専用のソフトウェアが必要です。
ウィキペディア(List of discrete event simulation software)を見ると様々な離散型シミュレーション・モデル専用ソフトウェアが利用可能なことが分かります。
僕が個人的に使っているものは、
の2つです(extendsimは離散型シミュレーションを勉強するときに触れた程度です)。下図の通り、どれもフローチャート編集ソフトウェアのように各ブロックを線で繋ぐだけで、シミュレーション・モデルを作ることができます。
これから離散型シミュレーションを始める方にお勧めなのが Rockwell Automation のArenaです。期限なしのお試しバージョンがダウンロードできるからです。但しお試しバージョンには「300ブロックまで」という制限がありますが、300ブロックもあれば多くの場合十分だと思います。Arenaは米国のアミューズメントパーク(ディズニーランドなど)や様々なフードサービス・チェーン店などに用いられている実績の高いソフトウェアです。
すでにMATLAB/Simulinkをお使いのエンジニアならSimEventsライブラリがお勧めです。そもそもSimEventsはCPUやメモリ、ネットワークなどの離散型シミュレーションが扱えるSimulinkのライブラリですが、業務プロセスや製造プロセスにも使えます。SimEventsの最大の利点は、MATLABとSimulinkの機能(プログラミングを含めて)がそのまま使えることです。複雑な条件の設定やデータの収集と分析に威力を発揮します。
リーンシックスシグマ・プロジェクトの中の離散型シミュレーション
リーンシックスシグマ(DMAIC)のプロジェクトでは、まず測定(Measure)フェーズで現在のプロセスのデータ(各ステップのサイクルタイムなど)を測定します。そして分析(Analyze)フェーズで、現在のプロセスの離散型シミュレーションモデルを作成し、測定したデータを使って現在のプロセスをシミュレーションしてみます。
もし現在プロセスのシミュレーションが、実際のプロセスと統計的に十分近い結果を示すことができれば、その離散型シミュレーションモデルは十分使えることが分かります。
次ぎにその離散型シミュレーションモデルを使って、プロセスの改善を行います。つまり結果が良くなるようにモデルを修正していきます。
シミュレーション結果が改善目標値に達するまで、モデル上(プロセス上)の問題点を見つけて改善を繰り返します。改善結果はシミュレーションによって検証します。
シミュレーション結果が改善目標を達成すれば、次の改善(Improve)フェーズで、その改善策(つまり修正された離散型シミュレーションモデル)を実際のプロセスに導入します。
以下は、あるドキュメント処理プロセスを離散型シミュレーションを使って、改善した例です(ソフトウェアはSimEvents)。
各ブロックのパラメータの値を変更しながら何度もシミュレーションを行い、そのからデータを収集し、統計処理プログラムを使って改善の効果を測定しました。