Progetto per il corso di Modelli Probabilistici (A.A. 2025/2026, Università di Bologna).
Il repository contiene l'implementazione, la validazione statistica e i deliverable teorici per la simulazione stocastica del modello epidemiologico SIR (Susceptible-Infectious-Removed) su popolazione finita
Il processo a tempo discreto
Ad ogni passo temporale
L'aggiornamento dello stato è dato da:
Tutti gli stati con
-
Limite Fluido (Teorema di Kurtz, 1970): Per
$N \to \infty$ , la frazione normalizzata$X_t / N$ converge quasi certamente alla soluzione del sistema differenziale continuo di Kermack-McKendrick. -
Effetti di Taglia Finita: A popolazione finita (
$N=100$ ), la desincronizzazione temporale delle traiettorie stocastiche produce un picco medio campionario ($\approx 16.4%$ ) inferiore al picco deterministico continuo ($\approx 18.3%$ ). -
Soglia Critica
$R_0$ : La transizione di fase avviene a$R_0 = \beta / \gamma = 1$ . Per$R_0 > 1$ , la frazione finale asintotica$r_\infty$ soddisfa l'equazione trascendente$1 - r_\infty - s_0 e^{-R_0 r_\infty} = 0$ .
Il codice richiede Python 3.10+ con le librerie scientifiche specificate in requirements.txt (numpy, scipy, matplotlib, pytest).
# Setup ambiente
git clone https://github.com/FrancescoCastaldi/sir-markov-chain.git
cd sir-markov-chain
python -m venv .venv
source .venv/bin/activate # Su Windows: .venv\Scripts\Activate.ps1
pip install -r requirements.txt# Simulazione Monte Carlo benchmark (M=1000 traiettorie, seed 42)
python src/simulation.py --n 100 --i0 5 --beta 0.20 --gamma 0.10 --sims 1000 --seed 42
# Analisi di sensibilità su molteplici valori di R0
python src/sensitivity.py --sims 500 --seed 42python -m pytest tests/ -vLa suite verifica formalmente:
- Conservazione della popolazione (
$S_t + I_t + R_t = N$ per ogni$t$ ). - Stocasticità per righe della matrice di transizione (
$\sum_j P_{ij} = 1$ ). - Stabilità e assorbimento degli stati con
$I=0$ . - Monotonicità del compartimento rimosso (
$R_{t+1} \ge R_t$ ).
sir-markov-chain/
├── src/ # Moduli Python (modello Markov, simulatore, ODE, plotting)
│ ├── model.py # Definizione catena e matrice di transizione P
│ ├── simulation.py # Motore Monte Carlo e interfaccia CLI
│ ├── analysis.py # Statistiche, First-Step analysis e solutore ODE
│ ├── sensitivity.py # Studio parametrico su R0
│ └── plotting.py # Routine di visualizzazione (Matplotlib)
├── tests/ # Test di unità e verifica invarianti (pytest)
│ └── test_model.py # 16 test formali su invarianti stocastici
├── report/ # Presentazione LaTeX Beamer
│ ├── presentazione.tex # Sorgente slide Beamer (16:9)
│ └── presentazione.pdf # Slide compilate
├── docs/ # Dashboard Web distribuita su GitHub Pages
├── notebooks/ # Jupyter notebook per simulazioni ed esplorazione
└── img/ # Grafici e figure scientifiche ad alta risoluzione
- Presentazione Beamer (27 Slide):
report/presentazione.pdf - Dashboard Web & Playground Interattivo: GitHub Pages
Distribuito sotto licenza MIT.

