Day 0 S 0 E 0 I 0 R 0 Vacc. 0
Hero Top Hub
Each person is a node; lines are contacts. Blue susceptible, orange exposed (latent), red infectious, green recovered, gold vaccinated. Bigger people have more contacts. Click a person to infect or vaccinate them (tool below). Drag to orbit.
WebGL is not available here — the model and graphs on the right still work.
Contact-Network Epidemic: Hubs, Vaccination and the Final-Size Equation
A stochastic SEIR epidemic on a real graph of contacts. Compare a homogeneous network with a hub-dominated one, then test which vaccination strategy stops the outbreak.
1. Presets
2. Run
Pause Step 1 day New outbreak New network Quality: High Reset
Speed (days per second)
3. Network and disease
Random (Erdős–Rényi) Hubs (scale-free)
4. Vaccination
None Random Most-connected first Acquaintance
Click: infect Click: vaccinate
Results
Epidemic curve
Degree distribution and who got infected
Experiment: how much vaccination is enough?
Runs the stochastic epidemic 6 times for each coverage on a 1000-person copy of the current network type and plots final size (dots) against the generating-function prediction (lines).
Run vaccination sweep
Not run yet.
Missions
Independent numerical checks
Re-run checks (3000-person random copy)
Educational model: a small random graph, not a city. Rates are illustrative, not fitted to any real disease; real epidemics have households, schools, age structure, behaviour change and many other effects.
Controls Drag / one finger: orbit; wheel / pinch: zoom; Hero / Top / Hub jump to preset views. Click or tap a person with the selected tool to infect or vaccinate them. Space pauses while the 3D view is focused.
The science
SEIR on a network. Time step Δt = 0.25 day. Each infectious person infects each susceptible contact with probability 1 − e−βΔt ; exposed people become infectious at rate σ, infectious people recover at rate γ.
Transmissibility. The chance that an infectious person transmits along one given contact before recovering is T = p / (1 − (1−p)(1−q)) with p = 1−e−βΔt , q = 1−e−γΔt (about β/(β+γ) for small steps). Only T, not the latent period, decides the final size.
Reproduction number on a network. A newly infected person has on average (〈k²〉 − 〈k〉)/〈k〉 onward contacts (the friendship paradox: neighbours have more contacts than average). So R0 = T (〈k²〉 − 〈k〉)/〈k〉. For a random graph this is T〈k〉; for hubs 〈k²〉 is large and R0 grows, while the epidemic threshold Tc = 〈k〉/(〈k²〉−〈k〉) shrinks.
Final-size equation. With generating functions G0 (x) = Σ pk xk and G1 (x) = Σ qk xk , qk = (k+1)pk+1 /〈k〉, the probability u that a contact does not lead to the epidemic solves u = 1 − T + T G1 (u) and the fraction ever infected is 1 − G0 (u). With vaccination, each degree class k keeps a fraction ok unvaccinated: u = Σ qk [1 − ok+1 T (1 − uk )] and size = Σ pk ok (1 − uk ). The program evaluates these with the empirical degree distribution of the actual graph.
Vaccination. Random vaccination needs coverage above 1 − 1/R0 (herd immunity); on hub networks R0 is large so random coverage is inefficient, while removing the best-connected people stops the epidemic with far fewer doses. Acquaintance immunisation vaccinates a random contact of a random person, which finds hubs without knowing the network.
Honest simplifications. Vaccines are 100 % effective and instant; no births, deaths, waning immunity or behaviour change; contacts are static and unweighted; the theory assumes a locally tree-like graph with uncorrelated contacts. The checks therefore use a degree-preserving randomised 3000-person copy; on the 400-person preferential-attachment graph itself the prediction can be several points off (old hubs link to young low-degree people, so removing hubs helps more than theory says).
Models built with Blender (figures, status rings, floor with baked textures) and rendered with Three.js.