pystorms : Simulation sandbox for the evaluation and control of stormwater networks

⚔️ Want to know how your control algorithm stacks up against others in smart stormwater systems? ⚔️

Welcome! We have built this library to encourage more researchers to have access to smart stormwater control problems. We want these problems accessible to all populations of researchers — those with experience in controls, but not stormwater; those with experience in stormwater, but not controls; and those without prior experience in either! We have streamlined all of the backend details of running a smart stormwater control problem so that all you have to do is focus on the control algorithm (see below for an example).


Getting Started

To try out how exactly to interact with stormwater networks using our toolbox, we encourage you to first begin with our "toy control problem" which you can access here . Once you feel comfortable with how our toolbox works, we then encourage you really begin to have some fun by interacting with our five benchmarking scenarios: alpha, beta, gamma, delta, and epsilon. These benchmarking scenarios are built using real-world inspired stormwater networks, driving events, and control assets.

To learn more about this work, check out our github repository:


To install and begin working, use:

This is how one would go about running a scenario ...

import pystorms

def controller(state):
    Your control algorithm that generates actions based on state information.
    return actions

env = pystorms.scenarios.alpha()
done = False

while not done:
    state = env.state()
    actions = controller(state)
    done = env.step(actions)

For more technical details on what we have developed, and why, please check out our documentation.


If you want to be more involved, please consider the following:




Partnering Institutions

University of Michigan
University of Virginia
Emnet, LLC
University of Tennessee, Knoxville

Funding Sources