NYC FloodAI

A research project I contributed to alongside fellow researchers from the Distributed AI Research Lab (DAIR) @ Hunter College. Led by Dr. Anita Raja.

FloodAI (internally, “RAFT” — Resilient Agent for Flood Tracking) is a smart flood-alert system for New York City that I contributed to as part of the DAIR lab. It watches local water-level sensors and decides when to send alerts while staying within a small alert budget. The goal is simple: catch real floods early, avoid spamming people, and show what’s happening on a clear & interactive map.

Note: this project is now maintained by other DAIR lab researchers — the repo is private and no longer under my ownership, so the sections below describe my past contributions rather than the project’s current state.

Why it matters

Floods don’t just damage architecture, they throw emergency responders, transit, and whole neighborhoods into chaos. A system that is able to issue intelligent alerts based off a given neighborhoods vulnerability and antecendent flood data will allow authorities to know which locations are most likely to be impacted.

How it works

  • City sensors: We read water depth from NYC FloodNet
  • Smart alerting: An AI agent learns when an alert is worth it, given a limited budget (e.g., 25 alerts per season).
  • Clear map: A web dashboard shows live status, past events, and context layers like elevation and vulnerability.

Issues encountered

  • Training was too slow and jittery at 1-minute data.
    I moved to 15-minute sampling so episodes are shorter and the agent learns faster without losing the story of a storm.
  • API limits + missing days.
    The FloodNet API can be strict and limit requests. I created scripts to collect and cache everything locally first, then train from a clean, complete dataset.
  • Wild outliers ruined charts.
    Some readings (e.g., 1200–2000 mm) blew up the y-axis. I keep them for QA but filter >500 mm in visualizations so real patterns stay readable.
  • Sudden jumps triggered instant alerts.
    I added rate-of-change checks and hysteresis (different “start” and “stop” levels) so alerts are stable, and still allow multiple alerts in one day when separate events happen.
  • Nearby sensors disagree or go offline.
    I combine them with a winner-takes-all rule: at each moment, whichever sensor shows the stronger signal drives the decision. That way, the system stays resilient.

What you can do on the dashboard

  • Watch a simulated sensor status and alert history.
  • Step through time in 15-minute ticks (or run it automatically) to see how the agent responds
  • See budget used vs. floods covered.
  • Toggle layers: elevation, flood vulnerability, tree canopy, and sensor clusters.

Results so far

  • Alerts are conservative but clean (fewer false alarms).
  • Runs smoothly with a modest alert budget.
  • The 15-minute grid made training and evaluation manageable without losing important timing.

What’s next

  • Add more FloodNet sensors and short-term weather forecasts.
  • Push email/SOS notifications for locals

Built with Python, Pandas, Gymnasium, Stable-Baselines3, and Leaflet. Repo is private; associated paper is WIP.