Welcome! We have built this library in an effort to systematize quantitative analysis of stormwater control algorithms. It is a natural extension of Open-Storm's mission to open up and ease access into the technical world of smart stormwater systems. Our initial efforts allowed us to develop open source and free tools for anyone to be able to deploy flood sensors, measure green infrastructure, or even control storm or sewer systems. Now we have developed a tool to be able to test the performance of algorithms used to coordinate these different sensing and control technologies that have been deployed throughout urban water systems.
Ultimately we want to encourage more researchers to explore smart stormwater control problems! Whether you only have experience in controls or stormwater or neither, our aim is to have this library be accessible to you. We have streamlined all of the backend details of running a smart stormwater control problem, so all you have to do is focus on the control algorithm (see below for an example).
To try out how exactly to interact with stormwater networks using our pystorms library, we encourage you to first begin with scenario theta, our "toy control problem". Once you feel comfortable with how our toolbox works, we then encourage you really begin to have some fun by interacting with our five challenging scenarios: alpha, beta, gamma, delta, and epsilon. These 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:
pip install pystorms
This is how one would go about running a scenario ...
importpystormsimportnumpyasnp# Define your awesome controllerdef controller(state):
actions = np.ones(len(state))
for i in range(0, len(state)):
if state[i] > 0.5:
actions[i] = 1.0
env = pystorms.scenarios.theta() # Initialize scenario
done = Falsewhilenot done:
state = env.state()
actions = controller(state)
done = env.step(actions)
performance = env.performance()
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:
Submit some of your own scenarios to our toolbox! We are looking to expand this library to include far more networks/scenarios with more diverse control needs and that have been implemented with a variety of different hydraulic simulators.
Download our code and hack into it for whatever other needs you may have! We have built this toolbox to be 100% open-source, so if you want to use it for any other application or need that you see fit, by all means, have at it. While the scenarios were built specifically for direct algorithm performance, we have also provided libraries of many other driving events so that you can customize your own research problem.
Continue to follow our work! In the future we plan to (a) develop competitions for novel smart stormwater control problems, and (b) present solutions that have been submitted to us for the scenarios we have developed so you can see how your results perform against others.
Check out our other open-source efforts, including open-storm.org, where we have built open-source sensor nodes for smart stormwater testing and deployment.