MIDAS Cascade Propagation

The cascade propagation engine is the simulation core of MIDAS. It models how disruptions injected into one infrastructure system (IS) ripple through internal graph topology and cross-IS dependencies, turn by turn.

Cascade Propagation Example

Cascade Propagation — Turn-by-Turn Example Healthy Degraded Critical Destroyed IS_energie_elec IS_comm_materiel IS_transport TURN 0 Disruption Injected IS_energie_elec NPP Sub1 Sub2 state: 200 → 50 IS_comm_materiel DC1 DC2 IS_transport APT T0 TURN 1 Internal Propagation IS_energie_elec NPP Sub1 Sub2 IEG_IS: 100% → 65% IS_comm_materiel DC1 DC2 IS_transport APT T1 TURN 2 Cross-IS Propagation IS_energie_elec NPP Sub1 Sub2 IEP drop IS_comm_materiel DC1 DC2 IEG_IS: 100% → 82% IS_transport T2 TURN 3 Second-Order Cascade IS_energie_elec NPP Sub 65% IS_comm_materiel DC1 DC2 82% IEP drop IS_transport APT RLY IEG_IS: 100% → 91% T3 Disruption origin time

Three Injection Modes

Three Disruption Injection Modes 1. Functional Mode Select IS → reduce all nodes/edges IS_energie_elec Reduction factor -40% All nodes reduced uniformly N1 N2 N3 N4 N5 2. Geographic Mode Click hex cell → set radius → affect area 3-ring radius 3. Manual Mode Click node/edge → set specific value N1 N2 N3 N4 N5 Node N5 operational_state = 0
Effects propagate SEQUENTIALLY (turn-by-turn), NOT instantaneously.
This prevents systemic feedback runaway — a disruption at time t cannot circle back to amplify itself at time t. Each turn computes a new state based on the previous turn's frozen snapshot. Feedback loops can still emerge across turns, but they are bounded and observable, making the simulation deterministic and debuggable.

Indicators Computed per Turn

Indicator Full Name Scope Description
IEG_NOEUDS Global Node Health Index Per IS Weighted average of all node operational_state values within an IS, normalized to [0, 100].
IEG_LIAISONS Global Edge Health Index Per IS Weighted average of all edge operational_state values within an IS, normalized to [0, 100].
IEG_IS Global IS Health Index Per IS Composite indicator combining IEG_NOEUDS and IEG_LIAISONS to give an overall IS health score.
IEG_PNAIV Global PNAIV Index Per IS Reflects the IS contribution to the national resilience posture (PNAIV weighting).
IEP_ISx→ISy Inter-IS Dependency Index Per IS pair Measures how much ISx contributes to ISy's operational capacity. Drops when ISx degrades.

Celery Task Chain

Simulation Execution Pipeline

Each simulation turn is executed as a Celery task chain, ensuring reliable asynchronous processing with retry logic and progress tracking.

  • start_simulation — Validates scenario, initializes turn counter, snapshots the initial graph state, and enqueues the first turn.
  • run_turn — Executes the propagation algorithm: internal propagation within each IS, then cross-IS dependency propagation. Produces updated node/edge states.
  • compute_indicators — Calculates all IEG and IEP indicators from the post-turn graph state. Stores results per turn for time-series analysis.
  • notify_simulation_service — Pushes turn results to aesop_simulation via REST callback. Triggers WebSocket broadcast so the frontend updates in real time.

Stopping Conditions

When Does the Simulation Stop?

The propagation engine continues executing turns until one of the following conditions is met:

  • Manual stop — An operator explicitly halts the simulation via the control panel or API endpoint.
  • Max turns reached — The simulation has executed the maximum number of turns configured in the scenario (default: 50). This prevents runaway simulations.
  • All indicators stabilized — Every IEG_IS and IEP indicator has changed by less than a configurable epsilon threshold (default: 0.1%) for two consecutive turns, indicating convergence.