シミュレーションエンジンの仕組みとアーキテクチャ
シミュレーションエンジンの理解
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 Start | caseがアクティビティを開始(リソース割当) |
| Activity Complete | caseがアクティビティを完了(リソース解放) |
| Gateway Evaluation | 分岐点で進行パス決定 |
| Case Complete | caseが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(連番で生成) |
| Activity | BPMNエレメントの名称 |
| Start Timestamp | アクティビティ開始時刻 |
| Complete Timestamp | アクティビティ終了時刻 |
| Resource | 実行したリソース名 |
| Attributes | その時点でのcase属性 |
このログは標準的なevent logフォーマットに準拠し、ProcessMindのどのツールでも分析可能です。
シミュレーション制限
| 制限 | 値 | 目的 |
|---|---|---|
| Max Events | 2,000,000 | シミュレーションの暴走防止 |
| Min Duration | 1 second | タイムスタンプの一意性を保証 |
まず小さく始めましょう
新規シミュレーションを設定する場合は、数日や数週間など短期間から設定を確認してください。挙動が正しいことが確認できたら、期間を拡大しましょう。