WATER 4.0 è un progetto di ricerca orientato alla previsione delle perdite idriche in reti di distribuzione, mediante una pipeline che integra:
- Un modello generativo GAN per la simulazione di scenari plausibili di variabili idrauliche.
- Un modello LSTM per la stima della perdita idrica associata a ciascuno scenario.
- Un’ottimizzazione numerica tramite Continuous Particle Swarm Optimization (CPSO) per il tuning della LSTM.
Predire in modo accurato e continuo la quantità di acqua persa (m³/h) nella rete idrica, sfruttando scenari simulati multivariati (pressioni, flussi, domande, livelli) generati da una GAN condizionata.
L'approccio si articola in due fasi:
- Generazione di scenari realistici tramite una rete Generative Adversarial Network.
- Predizione della perdita su ciascuno scenario tramite una rete LSTM ottimizzata.
- È stato addestrato un modello GAN condizionato per simulare variabili idrauliche multivariate coerenti con i dati storici reali.
- Lo scopo è espandere artificialmente il dataset con scenari realistici e stocastici.
- Gli scenari prodotti hanno la forma
(N_scenari, forecast_horizon, n_features)e sono salvati come input per la LSTM.
- Una rete LSTM bidirezionale con meccanismo di attenzione viene impiegata per mappare ciascuno scenario generato in una previsione puntuale di leakage.
- L'output finale è un valore continuo che rappresenta la perdita idrica aggregata prevista per scenario.
- La rete è stata ottimizzata tramite CPSO su iperparametri chiave (numero layer, neuroni, learning rate, dropout).
- Aumento virtuale dei dati (Data Augmentation) senza necessità di simulazioni idrauliche computazionalmente costose.
- Stima probabilistica della perdita idrica tramite simulazione di molteplici scenari e analisi della distribuzione delle predizioni.
- Separazione chiara dei compiti:
- La GAN genera il "futuro possibile".
- La LSTM valuta il rischio (leakage) associato a ciascuna possibilità.
- Flessibilità e scalabilità verso scenari reali, anche in condizioni di scarsità di dati osservati.
- LSTM bidirezionale con 2 layer.
- Dropout e BatchNorm per regolarizzazione.
- Meccanismo di attenzione per pesare temporalmente le informazioni più rilevanti.
- Fully connected finale per output continuo.
L’input è un tensore sequenziale ((T, n_features)) mediato su più simulazioni dello stesso scenario. L’output è un valore continuo corrispondente alla perdita prevista.
Il tuning della rete LSTM è effettuato tramite CPSO, in grado di:
- Esplorare in modo efficiente lo spazio continuo degli iperparametri.
- Adattare dinamicamente i parametri dello sciame.
- Evitare minimi locali e migliorare la generalizzazione rispetto al tuning tradizionale.
Il dataset utilizzato proviene dalla competizione internazionale BattLeDIM 2020, ed è basato su simulazioni realistiche della rete idrica virtuale L-Town.
- Domande (Demands) – 82 nodi (l/h)
- Flussi (Flows) – 3 sensori (m³/h)
- Pressioni (Pressures) – 33 sensori (m)
- Livelli (Levels) – 1 serbatoio (m)
- Perdite (Leakages) – perdite simulate (m³/h)
Dati registrati ogni 5 minuti, per due anni (2018–2019).
A cura del modulo utils/dataset.py:
- Parsing temporale: indicizzazione per timestamp
- Unione delle variabili: concatenazione orizzontale delle features
- Pulizia dei dati: rimozione righe con NaN
- Costruzione target: somma delle perdite su tutti i link
- Normalizzazione: via
StandardScaler(Scikit-learn) - Segmentazione sequenziale: sliding window (
seq_len,target) - Media su simulazioni: aggregazione dei dati generati da GAN
WATER-4.0/
│
├── CPSO/ # Cartella Ottimizzazione
│ ├── CPSO.py # Algoritmo di ottimizzazione CPSO
│ ├── f_obj.py # Funzione obiettivo + Train
│ ├── island_cpso.py # Ottimizzazione con modello a isole
│ └── ottimizzazione.py # File che esegue l'ottimizzazione
│
├── data/ # Cartella dei dati
│
├── models/ # Cartella del modello
│ ├── lstm_model.py # Definizione della rete LSTM
│ ├── generatore.py # Generatore del modello GAN
│ └── discriminatore.py # Discriminatore del modello GAN
│
├── utils/ # Cartella utils
│ ├── dataset.py # Preprocessing e dataset loader LSTM MODEL
│ ├── evaluate.py # Metriche di valutazione
│ ├── plot.py # Visualizzazioni
│ ├── train.py # Ciclo di training LSTM MODEL
│ │
│ ├── dataset_gan.py # Preprocessing e dataset loader GAN MODEL
│ ├── generate_scenario.py # Genera gli scenari possibili
│ └── train_gan.py # Ciclo di training GAN MODEL
│
├── config.yaml # Parametri del modello
├── environment.yml # Dipendenze Conda
│
├── main_lstm.py # Script principale per esecuzione della LSTM
├── main_gan.py # Script principale per esecuzione della GAN
├── run_lstm_on_scenarios.py # Script principale per esecuzione della GAN
│
├── .gitignore # File Gitignore
│
└── README.md # File README - Crea un ambiente conda:
conda env create -f environment.yml
conda activate water-leakage-env- Avvia l'allenamento del modello:
python main_lstm.py- Genera uno scenario allenando la GAN:
python main_gan.py- Usando il modello LSTM predici i leakages:
python run_lstm_on_scenarios.pyPer domande: giovanni.iacuzzo@unikorestudent.it


