業務プロセスのための離散事象シミュレーション
Ereignisdiskrete Simulation (DES) bildet einen Prozess als Folge von Ereignissen ab:「Ankunft」、「Bearbeitungsbeginn」、「Bearbeitungsende」、「Schichtwechsel」。時計は固定の時間刻みで動くのではなく、常に次の予定されたイベントまで進みます。そのため、モデルの1日分の計算時間はミリ秒単位で済みます。エンティティは処理対象の件、リソースは処理能力を表し、両者が合わないと待ち行列が発生します。業務プロセスでは三つの判断が重要です:標準仮定としての指数分布に従う到着間隔、処理時間に対する右に歪んだ分布、そして結果のばらつきが安定するだけの十分な繰り返し回数です。
Inhaltsverzeichnis
なぜ「離散」でなぜ「事象指向」か
シミュレーションで時間を扱う方法は二つあります。
時間ステップ指向: 時計が一定の刻みで進みます(毎分、毎秒など)、各ステップで何が起きたかを確認します。実装は簡単ですが計算資源を浪費します。承認プロセスの二つの事象の間に何時間も何も起きない時間があるのに、その間ずっと計算されるからです。
事象指向: 時計は次に予定された事象の時刻へ飛びます。事象と事象の間では状態が変わらないので、計算を行う必要もありません。
事象リスト(時刻順):
09:14 到着 処理#418
09:22 処理終了#402 ステップ「検査」
09:40 シフト交代 承認
...
時計は09:14に飛び、処理し、続く事象を予定し、さらに飛ぶ。
「離散」とは:状態が連続的に変化するのではなく、個々の時点で飛躍的に変わることを意味します。これは業務プロセスにぴったり合います。申請は処理済みか未処理かであり、中途半端に処理中という状態はありません。
四つの構成要素
| 構成要素 | あなたのプロセスにおける例 | 役割 |
|---|---|---|
| エンティティ | 請求書、申請、チケット、応募 | モデルを流れ、属性を持つ |
| リソース | 担当者、承認権者、検査部署 | 容量を持ち、空きか占有か |
| 待ち行列 | 受信箱、チケット一覧、リマインダー | リソースが占有されると自動的に発生する |
| 事象 | 到着、開始、終了、シフト交代 | 状態を変え、続く事象を予定する |
最も重要な性質: 待ち行列はモデリングされるのではなく、発生することです。滞留時間を三日で固定するように設定する人は、結果を計算する代わりにすでに決めてしまっています。そうすると、容量やばらつきを変えたときにその時間がどう変わるかを示せません。
モデルが失敗する三つの判断
1. どの分布を使うか?
到着間隔には:指数分布。 これは、処理が独立に到着する場合(例えば複数の仕入先からの請求書や複数の利用者からのチケット)に標準的に仮定されます。受信箱で見られる振る舞い、つまり静かな時間が続いた後に三件同時に来るような挙動を生みます。
到着が一定のリズムで来る場合(例:月末の一括処理、毎朝8時の引き継ぎ)は指数分布ではなくカレンダーが必要です。
処理時間には:右裾が長い分布。 対数正規分布かガンマ分布。見積もりしかない場合は、最小値・最頻値・最大値から三角分布を使います。理由は、処理時間には厳密な下限があり右側に長い裾があるためです。正規分布は負の時間を生む可能性があり、異常値を過小評価して待ち行列を生む原因を見逃します。
実務上の経験則: 「5〜15分」しかわからない場合、モードを8にした三角分布を使ってください。対数正規とガンマの選択は、そもそもばらつきをどれだけ許すかという問題ほど結果に影響しません。
2. ウォームアップ期間
シミュレーションは空の待ち行列で開始します。これは実際のプロセスではほとんどない状態です。したがって最初の数日間は系統的に良すぎる結果になります。
対処法: 最初の数日を解析から除外する(ウォームアップ)、または現実的な初期在庫で開始します。稼働率が85%をかなり下回るプロセスなら数日で十分ですが、境界に近い場合は収束に数週間かかることがあります。
見分け方: 最初の週の平均が二週目の平均より明らかに低ければ、ウォームアップが短すぎます。
3. 何回実行するか?
単一のランはサンプル数1に相当します。単一の勤務日の情報しか持ちません。乱数を変えて繰り返し実行し、結果の幅が安定するまで行います。
実務的な基準: ランの数を二倍にしてみてください。そのときP50とP90が数パーセント以内でしか変わらなければ十分です。業務プロセスでは通常数百回になります。
件数そのものより重要なのは: 繰り返し実行することと、出力が区間として示されることです。単一の数値しか出力しないシミュレーションは、この手法の目的を果たしていません。
観点の比較
| プロセス指向 | 事象指向 | |
|---|---|---|
| あなたが記述するのは | エンティティのライフサイクル | 各事象タイプで何が起きるか |
| 例 | 「請求書が到着し、待ち、検査され、待ち、承認される」 | 「到着時:並べる。リソースが空けば:次を引く」 |
| よく使われる場所 | SimPy、Simul8、ほとんどの商用ツール | 古いライブラリ、自前実装 |
業務プロセスにはプロセス指向の見方が自然です:一つの案件に何が起きるかを書き出すことが、現場の業務フローの記述と正確に一致します。
検証:三つのチェック
1. Little's Law。 在庫 ÷ スループットはおおむねスループット時間になるはずです。モデルでも現実でも成り立ちます。この検査は分布に関する仮定を必要としないため、最も強力な検証です。
2. 稼働率と手計算の照合。 ρ = 需要 ÷ 容量は各ステップで電卓で再計算できます。モデルが大きく異なる場合は、分岐かカレンダーに誤りがあります。
3. 極値テスト。 あるステップの容量を二倍にしてください。何も変わらなければ、そのステップはボトルネックではありません。もしそうでないことを期待していたなら、モデルがあなたの理解と一致していないことになります。そこから議論が始まります。
DESが適さない場合
- 関係者が自身の判断で振る舞いを変える場合(顧客が中止する、担当が案件を選ぶ)→ エージェントベースシミュレーション。
- 在庫とフィードバックが何年もかかる規模の問題(人員増加、マーケット動態)→ システムダイナミクス。
- 待ち行列が存在しないほど容量が十分な場合 → 単純な加算で十分です。
- 実際に何が起きたかを知りたい場合 → Process Mining。DESは仮定を計算するものであり、ログの代わりにはなりません。
よくある質問
離散事象シミュレーションとエージェントベースシミュレーションの違いは何ですか?
DESは固定したステーションを通り、占有されたリソースの前で待つような案件を表現します。ロジックはプロセス側にあります。エージェントベースは各参加者を自身の規則で動くエージェントとして表現し、相互作用します。ロジックはエージェント側にあります。承認プロセスにはDESが適切です;参加者自身が進めるかどうか、どう進めるかを判断するようになるとABSが有益になります。
処理時間にはどの分布を使えばよいですか?
右に裾の長い分布:データがあるなら対数正規分布またはガンマ分布、見積もりなら最小値・最もらしい値・最大値の三角分布です。正規分布は避けてください。負の所要時間を生み、待ち行列を駆動する長い事例を過小評価します。右裾の候補の間で選ぶことよりも、そもそもばらつきを入れることの方が重要です。
ウォームアップ期間はどれくらい必要ですか?
在庫と待ち時間がもはや系統的に増加しなくなるまでです。稼働率が85%をかなり下回るなら数モデル日で足ります;容量限界に近いときは待ち行列が非常にゆっくりと収束するため数週間かかる場合があります。簡単なテスト:最初の週の平均が二週目の平均より明らかに低ければ、期間が短すぎました。
なぜ時計は等間隔で進まず、飛び飛びに進むのですか?
二つのイベントの間に状態変化がなく、計算することが何もないからです。承認プロセスでは到着と処理開始の間に数時間の状態変化がないことがよくあります。イベントジャンプのおかげでモデルの一年分を数秒で計算できます。これが何百回もの反復が実用的である理由です。
DESにプログラミング言語は必要ですか?
いいえ。SimPyのようなライブラリはコードを要しますが、商用ツールや簡易な意思決定ツールは要りません。違いは責任の所在です:ライブラリでは分布選択、ウォームアップ期間、レプリケーション数を自分で決めます;GUIを持つツールはこれらの判断を部分的に肩代わりしますが、計算は粗くなりがちです。
ご自身のプロセスで計算してみてください。
FlowVisualはこの記事の数値を、お客様の処理量、お客様の処理能力、お客様の利益幅を用いて実行されるモデルにします。
Guide: seven steps to the number- 手法
プロセスシミュレーションとは何ですか。定義、手法、限界
プロセスシミュレーションは、プロセスを記述する代わりに人工的に実行させます。この違いは学問的なものではありません。変更について意見を持つだけなのか、数値を得られるのかを左右します。
読書 - 手法
プロセスのMonte Carloシミュレーション:できることと、いつ誤るか
Monte Carloは魔法の言葉ではなく、体系的なサイコロ振りです:同じプロセスを何百回も、それぞれ異なる乱数で実行します。そこで得られるのは単一の数値ではなく分布です。それがまさにポイントです。
読書 - 手法
ボトルネックの計算:なぜ85%の稼働率でも高すぎるのか
ボトルネックは最も時間がかかる工程ではなく、最も利用率の高い工程です。待ち時間は利用率に対して線形に増えるのではなく、限界直前で爆発的に増加します。背後の計算は一ページに収まります。
読書