Modellazione, analisi ed ottimizzazione di un piano di evacuazione della popolazione dalla zona rossa e gialla dei Campi Flegrei, utilizzando un algoritmo di Quickest Flow su una rete stradale reale.
Autori
- Obiettivo del Progetto
- Riferimenti Accademici
- Struttura del Progetto
- Flusso di Lavoro
- Dettagli dei Notebook
- creazione_grafo.ipynb
- fleg_flow.ipynb
- Scenari avversi
- Installazione ed Esecuzione
Lo scopo di Fleg-Flow è applicare un modello di ottimizzazione su rete per analizzare il piano di evacuazione previsto per la crisi vulcanica dei Campi Flegrei. Il progetto si propone di:
- Calcolare il tempo minimo stimato per evacuare l'intera popolazione della zona rossa e gialla, data la rete stradale e le sue capacità.
- Identificare i colli di bottiglia (strade critiche) che limitano la velocità dell'intera operazione.
- Simulare scenari avversi (es. blocco di strade o capacità ridotte) per valutare la resilienza del piano.
- Fornire una visualizzazione chiara ed interattiva del piano di flusso risultante.
La metodologia implementata trae ispirazione principale da:
- Fleischer, L., & Skutella, M. (2007). Quickest Flows Over Time.
Questo paper fornisce il framework teorico fondamentale per il progetto. Nello specifico, è stato implementato l'algoritmo di 2-approssimazione descritto nella Sezione 3, che riduce il complesso problema del flusso più rapido a una serie di problemi di flusso a costo minimo, risolvibili efficientemente. Nella cartella
riassunto_paperè possibile leggerne i passaggi principali.
La repository è organizzata come segue:
fleg-flow/
│
├── creazione_grafo.ipynb # (FASE 1) Prepara i dati e crea il grafo
├── fleg_flow.ipynb # (FASE 2) Esegue l'ottimizzazione e l'analisi
│
├── campi_flegrei_features.json # Input: dati ufficiali della Protezione Civile
│
├── grafo_flegreo.graphml # Output Fase 1: Grafo della rete stradale
├── sorgenti_pozzi.json # Output Fase 1: Dati su sorgenti e pozzi
│
├── 📂 risultati/
│ └── mappa_evacuazione.html # Output Fase 2: Mappa interattiva del piano
│
├── requirements.txt # Lista delle dipendenze Python per pip
│
├──📂 riassunto_paper/
│ └──Quickest_Flow_Over_Time_paper_resume.pdf #Riassunto articolo di riferimento
│
└── README.md # Questo fileIl progetto è diviso in 2 fasi computazionali distinte, implementate in 2 notebook separati.
- Input: Un file GeoJSON contenente le aree di incontro e i comuni associati. Per il piano ufficiale, il file è scaricabile dal repository della Protezione Civile.
- Processo:
- Utilizza OSMnx per scaricare la rete stradale reale dell'area flegrea.
- Processa il grafo calcolando attributi personalizzati per ogni strada: tempo di transito (
tau) e capacità di flusso (capacity). - Legge il file GeoJSON per identificare le coordinate delle aree di incontro (pozzi) e i nomi dei comuni da evacuare (sorgenti).
- Mappa sorgenti e pozzi ai nodi più vicini sulla rete stradale scaricata.
- Output:
grafo_flegreo.graphml: Un file che contiene il grafo della rete stradale completo e processato.sorgenti_pozzi.json: Un file che contiene i dizionari con le informazioni su sorgenti (ID del nodo e popolazione) e pozzi (ID del nodo e nome dell'area).
-
Input: I file
.graphmle.jsongenerati dalla Fase 1. -
Processo:
- Carica il grafo e i dati di sorgenti/pozzi.
- Implementa una ricerca binaria sul tempo totale di evacuazione
T. - Ad ogni iterazione, risolve un problema di flusso a costo minimo utilizzando il solutore Gurobi per determinare se un piano è fattibile per il tempo
Tdato. - Una volta trovato il tempo minimo di riferimento
$$T^*$$ , calcola il piano di flusso ottimale associato. - Analizza il piano, calcolando la saturazione di ogni strada per identificare i colli di bottiglia.
-
Output:
- Analisi stampata a console con il tempo di evacuazione stimato e le strade più critiche.
-
mappa_evacuazione.html: Una mappa interattiva (creata con Folium) che visualizza le rotte di evacuazione, colorandole in base al livello di saturazione.
Questo notebook è il motore di preparazione dei dati. La sua esecuzione è necessaria solo una volta o ogni volta che si desidera aggiornare la mappa stradale o i dati di input. Contiene tutte le logiche di interfacciamento con OSMnx e GeoPandas.
Per utilizzare il file ufficiale del Piano Nazionale Campi Flegrei, è possibile scaricarlo da questo link:
Riferimenti protezione civile:
Questo è il notebook principale per l'analisi. Una volta che i file di input sono stati generati, può essere eseguito più volte per testare diversi scenari senza dover riscaricare o riprocessare la mappa.
Il notebook è strutturato per facilitare l'analisi di scenari avversi. Modificando il grafo caricato prima dell'ottimizzazione, è possibile simulare:
- Blocco di strade critiche
- Riduzione della capacità
Il confronto tra i risultati del caso base e quelli degli scenari avversi permette di valutare la resilienza del piano di evacuazione.
- Python 3.9 o superiore
- Git
- Gurobi Optimizer installato e licenza attiva (la licenza accademica è gratuita).
-
Clonare la repository
git clone [https://github.com/vlb20/Fleg-Flow.git](https://github.com/vlb20/Fleg-Flow.git) cd fleg-flow -
Creare ed attivare l'ambiente virtuale:
# Crea un ambiente virtuale chiamato 'fleg-env' python -m venv fleg-env # Attiva l'ambiente # Su Windows: .\fleg-env\Scripts\activate # Su macOS/Linux: source fleg-env/bin/activate
-
Installare le dipendenze:
pip install -r requirements.txt