ドキュメント一覧
このページの内容

シミュレーションエンジンの仕組みとアーキテクチャ

シミュレーションエンジンの理解

ProcessMindは**discrete event simulation (DES)**エンジンでプロセスをモデル化します。この仕組みを理解することで、シミュレーション設定や結果の解釈がより正確に行えます。


Discrete Event Simulation(DES)とは?

Discrete Event Simulationでは、システム状態は特定のeventのみで変化します。クロックはevent間でジャンプし、eventの間は変化しません。これが業務プロセスに最適な理由:

  • 各アクティビティに明確な開始・終了時刻がある
  • リソース割当・解放が明確なタイミングで行われる
  • ケースの到着・完了が明示的となる

Discrete Eventを使う理由

連続シミュレーション(物理など)と異なり、業務プロセスでは細かい瞬間を再現せず、event単位で変化します。例えばローン申請は”submitted”から”approved”へevent発生時に切り替わります。


イベントループの概要

シミュレーションエンジンは、シンプルながら強力なループで処理します:

1. 初期化: 開始条件をセット
2. 次のイベント取得: プライオリティキューから最も早いイベントを取得
3. 時刻前進: シミュレーションクロックをそのイベント時刻まで進める
4. イベント処理: イベント(アクティビティ開始・完了など)を処理
5. 新イベント登録: 処理結果に応じて新しいイベントを追加
6. 繰り返し: 終了時刻または最大イベント数(2,000,000)まで繰り返す
7. 出力: 完成したevent logを出力

イベントの種類

シミュレーションでは、以下の種類のイベントを生成・処理します:

イベント種別内容
Case Arrival新しいcaseがStart Eventでプロセス開始
Activity Startcaseがアクティビティを開始(リソース割当)
Activity Completecaseがアクティビティを完了(リソース解放)
Gateway Evaluation分岐点で進行パス決定
Case CompletecaseがEnd Eventに到達

ケースの生成と到着

ケースはBPMNモデルのStart Eventからシミュレーションに入ります。到着パターンはcase generation distributionでコントロールされます。

デフォルト到着パターン

標準では、ケースはPoisson distributionで1時間に1件到着します。ビジネスプロセスでよく見られる不規則な間隔を再現します。

到着パターンのカスタマイズ

Distributions で解説している分布を使って、さまざまな到着パターンを設定できます。


プロセス内のケースフロー

Sequence Flow

caseがエレメントを完了すると、すぐにアウトゴーイングのSequence Flowを進みます。1本のみなら自動で進みます。

ゲートウェイ動作

Gatewayはcaseの分岐や結合を制御します:

Gateway Type動作説明
XOR (Exclusive)確率重みづけで1つだけランダム分岐。設定は自動で重み付け・正規化されます。
AND (Parallel)すべて同時分岐。caseはパラレルなトークンに分割します。
OR (Inclusive)1つ以上選択されるランダム分岐。
Event-Based利用可能なeventの中からランダム選択。

分岐確率の設定

XOR gatewayではアウトゴーイングごとに確率(相対重み)を設定します:

  • 70・20・10なら自動で70%、20%、10%に正規化
  • 7・2・1も同じ割合
  • すべてのフローに確率指定が必要。未指定は残りのパーセントが割当てられます。

アクティビティ実行

caseがタスク(アクティビティ)に到達すると、エンジンは次の手順で処理します:

1. リソース空き確認

必要なリソースにキャパシティがあるかチェックします。

2. 必要に応じて待機キューへ

リソースがなければ、caseは待機キューへ。ProcessMindは**FIFO (First In, First Out)**で到着順に対応します。

3. リソース割当

リソースが空き次第、必要分をこのcaseに割り当てます。

4. 処理時間サンプリング

エンジンは設定された処理時間分布から値を取得し、アクティビティの所要時間を決定します。

5. 完了イベント登録

current_time + processing_timeで完了イベントがイベントキューに追加されます。

6. リソース解放

完了イベント時に、リソースは他のcase用にプールへ戻ります。

最小処理時間

すべてのアクティビティに1秒の最小durationがあります。処理時間分布が0でも必ず1秒かかります。


スキップ確率

アクティビティにはskip chance(0~100%)を設定できます。スキップされると:

  • caseは直ちに次のエレメントへ進みます
  • リソース消費なし
  • 時間経過なし(最小1秒のみ)
  • ログ上は最小durationで記録

現実の業務で一部工程が省略される場面をシミュレートできます。


時間管理

シミュレーションクロック

シミュレーションは仮想クロックでevent間を区切り、時間をジャンプさせます。次のeventが10:35で現在10:30ならクロックは10:35にジャンプします。

時間単位

すべての時間は内部で統一単位に変換されます。指定可能な単位:

  • 時間

周期性とタイムスロット

シミュレーション時間に応じて値を変更可能です。例:

  • 平日と週末で到着レートを変える
  • 午前・午後で処理時間を切り替える
  • ピーク時はリソース数を調整

設定方法はPeriodicity をご確認ください。


リソース管理

リソースプール

各リソースにはcapacity(同時に扱えるcase数)が設定されています。

キュー管理

リソース需要がキャパシティを超えた場合、caseは待機キューに入ります。ProcessMindは**FIFO (First In, First Out)**方式で到着順に処理します。


イベントログの生成

シミュレーション実行中、各アクティビティの実行が出力event logに記録されます:

項目説明
Case IDケースごとのユニークID(連番で生成)
ActivityBPMNエレメントの名称
Start Timestampアクティビティ開始時刻
Complete Timestampアクティビティ終了時刻
Resource実行したリソース名
Attributesその時点でのcase属性

このログは標準的なevent logフォーマットに準拠し、ProcessMindのどのツールでも分析可能です。


シミュレーション制限

制限目的
Max Events2,000,000シミュレーションの暴走防止
Min Duration1 secondタイムスタンプの一意性を保証

まず小さく始めましょう

新規シミュレーションを設定する場合は、数日や数週間など短期間から設定を確認してください。挙動が正しいことが確認できたら、期間を拡大しましょう。


次のステップ

Resources
リソースやキャパシティ制約のモデリング方法を理解しましょう。