---
kind: concept
slug: network-resilience
title: Network resilience
summary: >-
  Measures how well a network withstands a failure and how far it recovers, from a performance curve over time. Shows three numbers (lowest point, value at a cutoff, time average), a per-node risk SIRD failure model, and protection or recovery actions triggered by a forecast. One card, simulation only, with author-reported gains on a single traffic network.
tags: [resilience, fault-propagation, sird, traffic-networks, forecasting]
papers: ["2609.27903"]
related: [compartmental-epidemic-model, time-series-forecasting, recurrent-neural-network]
status: draft
updated_at: 2026-10-19
---

## Overview

After an initial failure, damage can spread to neighbouring parts and stop much
of a network. Resilience asks two questions: how far does performance fall, and
how far does it climb back. The shared idea is to track a network performance
curve K(t) over time and compare it with a normal-state baseline K0
[arxiv:2609.27903 §3.2] [eq. 7]. Every variant derives its numbers from that
curve, so the baseline must be defined before the numbers mean anything. The
card does not define K0 beyond "normal circumstances" [arxiv:2609.27903 §3.2].

The repository holds one card. It models failure spread with a
susceptible-failed-recovered-dead (SIRD) model, adds a per-node risk value, and
then measures resilience and tests two responses: protecting healthy nodes and
restoring failed ones. The response is timed from an LSTM forecast of the
resilience curve [arxiv:2609.27903 §3.3] [arxiv:2609.27903 §3.4]. All results
come from simulation on one traffic network, with single runs
[arxiv:2609.27903 §4] [arxiv:2609.27903 tab. 1].

## Variants

### Resilience measures from a performance curve

Three measures are computed from the real-time resilience curve E(t), which is
the ratio of performance under attack to normal performance over a window
[arxiv:2609.27903 §3.2] [eq. 7]:

- **Bearing capacity** E_withstand: the minimum of E(t) over the run. It shows
  how far performance falls at the worst point [arxiv:2609.27903 §3.2] [eq. 8].
- **Recovery capacity** E_recover: E(t) at a chosen cutoff time T. It shows how
  far the network has climbed back by then [arxiv:2609.27903 §3.2] [eq. 9].
- **Overall resilience** E: the time average of E(t) over [0, T]
  [arxiv:2609.27903 eq. 12].

Performance itself is a weighted share of nodes still in service. The weight is
degree centrality, and nodes that are failed or dead count as unavailable
[arxiv:2609.27903 eq. 4] [eq. 5] [eq. 6]. The paper's numbers depend on its
choice of weight, its window and its cutoff. Table 2 shows that the overall
value depends strongly on T: the same run gives E = 0.5725 at T = 30 and
E = 0.7427 at T = 400, while E_recover levels off near 0.768 after T = 250
[arxiv:2609.27903 tab. 2]. Compare values only at the same T and window.

### Node protection before failure

The protection variant lowers the risk value f of healthy nodes. A lower f
lowers the infection rate and the collapse rate and raises the recovery rate
[arxiv:2609.27903 §3.4.1] [fig. 15]. In the paper's table, the protection
rate of 0.5 raised overall E from 0.7310 without protection to 0.8796
[arxiv:2609.27903 tab. 6]. The meaning of the protection rate beyond the table
values is not defined, and the figure legend calls it "defense"
[arxiv:2609.27903 tab. 6] [fig. 15].

### Node recovery of failed nodes

The recovery variant restores failed nodes to working state at a recovery rate
[arxiv:2609.27903 §3.4.2] [fig. 16]. At a recovery rate of 0.5, overall E rose
from 0.7282 to 0.9117 and E_recover reached 1.0000 [arxiv:2609.27903 tab. 7].
The "time cost" column in these tables is not defined in the text, so do not
read it as a cost in any unit [arxiv:2609.27903 tab. 6] [arxiv:2609.27903 tab. 7].
The forecast time advance decides how early recovery starts. In the paper's
table, E was 0.9278, 0.9354 and 0.9559 for advances of 0.5, 0.3 and 0.1, with
the unit not stated [arxiv:2609.27903 tab. 8].

### Forecast-driven timing

An LSTM is trained on the E(t) series and predicts the next time point from a
fixed number of earlier observations [arxiv:2609.27903 §3.3]. Its reported
forecast quality is MRE 0.00639, MSE 0.00016 and R2 0.96842 on the paper's
setup [arxiv:2609.27903 tab. 3]. Against an RNN (R2 0.91152) and a CNN (R2
0.85833), the LSTM scores best in the paper's table, but the baseline
architectures and training settings are not given [arxiv:2609.27903 tab. 4]. The
LSTM's layers, units, window length and split are also not stated
[arxiv:2609.27903 §3.3]. For the general forecasting trade-offs, see
[Time-series forecasting](/concepts/time-series-forecasting).

## When to use which

| Situation | Use | Why |
|---|---|---|
| You need one score for how a network copes with a failure | Overall E, reported with E_withstand and E_recover | The paper reports all three together [arxiv:2609.27903 tab. 1]. A single number hides the worst point. |
| Failures are expected to start at a few nodes and spread | Node-level SIRD with a risk value | The paper's experiments start from one failed node and vary the rates [arxiv:2609.27903 §4.1] [arxiv:2609.27903 tab. 5]. Other attack sizes are not tested. |
| Failures should be contained before they spread | Protection, when healthy nodes can be hardened | Protection raised E_withstand from 0.4241 to 0.6470 at rate 0.5 [arxiv:2609.27903 tab. 6]. |
| Failed nodes can be restored quickly | Recovery, with a forecast to start early | Recovery reached E_recover ≈ 1.0 at rates 0.3 and 0.5 [arxiv:2609.27903 tab. 7]. |
| You cannot observe the performance curve over time | Not covered by this card | The method needs the E(t) history to train the forecast [arxiv:2609.27903 §3.3]. |
| You must reproduce the numbers | Not yet possible from the paper alone | No official code is linked, and several parameters are not stated (see Contradictions). |

The paper's combined run gives E = 0.9354 for the traffic network, up from
0.7261 unoptimised [arxiv:2609.27903 tab. 11]. The same table shows gains on
aviation, industrial and power networks, whose data are not named
[arxiv:2609.27903 tab. 11]. The gains are author-reported and come from
simulation with no variance across seeds [arxiv:2609.27903 §4].

## Implementation sketch

The common core is the failure step, the performance share and the three
measures. The paper's protection and recovery act on the same state, and the
forecast only decides when they run. The risk-scaled step below follows the
paper's recovery term in its figure, not its printed equation
[arxiv:2609.27903 §3.1] [fig. 4].

```pseudocode
# One Euler step of a per-node SIRD model with risk value f  [§3.1] [fig. 4]
def sird_r_step(S, I, R, D, f, beta0, mu0, lam0, dt):
    # Infection scaled by risk: lower risk fails less  [§3.1]
    infected = f * beta0 * S * dt
    # Recovery uses (1 - f); the printed eq. 3 differs  [fig. 4]
    recovered = (1 - f) * mu0 * I * dt
    # Collapse scaled by risk  [§3.1]
    dead = f * lam0 * I * dt
    S = S - infected
    I = I + infected - recovered - dead
    R = R + recovered
    D = D + dead
    return S, I, R, D
```

```pseudocode
# Performance and the three resilience measures  [eq. 4] to [eq. 12]
def performance(weights, available):
    # available is 1 for S or R, 0 for I or D  [eq. 5]
    return dot(weights, available) / sum(weights)  # [eq. 4]

def measures(E_t, times, T):
    E_withstand = min(E_t)                     # [eq. 8]
    E_recover = value_at(E_t, times, T)        # [eq. 9]
    E_overall = integrate(E_t, times, 0, T) / T  # [eq. 12]
    return E_withstand, E_recover, E_overall
```

## Contradictions

- **Recovery term.** The printed equation for the recovered count uses μ0·I,
  while the infected count subtracts only (1 − f)·μ0·I. Figure 4 uses
  (1 − f)·μ0 for recovery. Summed over all states, the printed form does not
  keep the node total fixed [arxiv:2609.27903 eq. 3] [fig. 4]. The authors do
  not say which form they simulated.
- **Forecast quality.** The text says R2 is close to 1 under all six tested
  conditions [arxiv:2609.27903 §4.2]. The table gives R2 from 0.87052 to
  0.97014 across those conditions [arxiv:2609.27903 tab. 5].
- **Table 1 against Table 2.** Table 1 gives overall E = 0.7474, but the
  largest value in Table 2 is 0.7427, at T = 400. The cutoff for Table 1 is not
  stated [arxiv:2609.27903 tab. 1] [arxiv:2609.27903 tab. 2].
- **No-intervention baseline.** Bearing capacity without intervention is 0.4014
  in Table 1, 0.4241 in Table 6, 0.3996 in Table 7 and 0.4094 in Table 8. The
  paper gives no seeds or risk values that would explain the gap
  [arxiv:2609.27903 tab. 1] [arxiv:2609.27903 tab. 6] [arxiv:2609.27903 tab. 7]
  [arxiv:2609.27903 tab. 8].
- **Scaling.** The text says the complexity is O(n) [arxiv:2609.27903 §4.2].
  Simulation time in Table 10 rises about 10 times for a 400 times larger
  network, and the paper gives no derivation [arxiv:2609.27903 tab. 10].

## Papers

- [A Resilience Recovery Method for Complex Traffic Network Security Based on Trend Forecasting](/papers/2609.27903): defines SIRD-R with a per-node risk value, three resilience measures, an LSTM forecast, and forecast-driven protection and recovery, evaluated by simulation on a traffic network.
