epyt-control
A Python package for implementing and evaluating control algorithms & strategies in smart water networks.
Science Score: 44.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (17.2%) to scientific vocabulary
Keywords
Repository
A Python package for implementing and evaluating control algorithms & strategies in smart water networks.
Basic Info
- Host: GitHub
- Owner: WaterFutures
- License: mit
- Language: Python
- Default Branch: dev
- Homepage: https://epyt-control.readthedocs.io/en/stable
- Size: 567 KB
Statistics
- Stars: 9
- Watchers: 4
- Forks: 3
- Open Issues: 0
- Releases: 4
Topics
Metadata Files
README.md
EPyT-Control -- EPANET Python Toolkit - Control

EPyT-Control is a Python package building on top of EPyT-Flow for implementing and evaluating control algorithms & strategies in water distribution networks (WDNs).
Besides related control tasks such as state estimation and event diagnosis, a special focus of this Python package is Reinforcement Learning for data-driven control in WDNs and therefore it provides full compatibility with the Stable-Baselines3 package.
Unique Features
Unique features of EPyT-Control are the following:
- Support of hydraulic and (advanced) water quality simulation (i.e. EPANET and EPANET-MSX are supported)
- Compatibility with Gymnasium and integration of Stable-Baselines3
- Wide variety of pre-defined actions (e.g. pump state actions, pump speed actons, valve state actions, species injection actions, etc.)
- Implementation of classic control aglorithms such as PID and LQR controllers
- Signal processing methods such as state estimation (e.g. Kalman filters) and event diagnosis
- Neural surrogate models for state transition
- High- and low-level interface
- Object-orientated design that is easy to extend and customize
Installation
EPyT-Control supports Python 3.9 - 3.13
PyPI
pip install epyt-control
Git
Download or clone the repository:
git clone https://github.com/WaterFutures/EPyT-Control.git
cd EPyT-Control
Install all requirements as listed in REQUIREMENTS.txt:
pip install -r REQUIREMENTS.txt
Install the toolbox:
pip install .
Quick Example
Interface of Environments
Basic example demonstrating the environments' interface:
```python
Define/Specify MyEnv
....
Load hypothetical environment "MyEnv"
with MyEnv() as env: # Show the observation space print(f"Observation space: {env.observation_space}")
# Run 1000 iterations -- assuming that autorest=True
obs, info = env.reset()
for _ in range(1000):
# Sample and apply a random action from the action space.
# TODO: Replace with some smart RL/control method
action = env.action_space.sample()
obs, reward, terminated, _, _ = env.step(action)
# Show action and observed reward
print(action, reward)
```
Applying Reinforcement Learning to a given Environment
Simple example of using Stable-Baselines3 for learning a policy to control the chlorine injection in a given environment called SimpleChlorineInjectionEnv:
```python from stable_baselines3 import PPO from gymnasium.wrappers import NormalizeObservation
Define/Specify SimpleChlorineInjectionEnv
....
Load chlorine injection environment
with SimpleChlorineInjectionEnv() as env: # Wrap environment env = NormalizeObservation(env)
# Apply a simple policy learner
# You might want to add more wrappers (e.g. normalizing inputs, rewards, etc.) and logging here
# Also, inceasing the number of time steps might help as well
model = PPO("MlpPolicy", env, verbose=1)
model.learn(total_timesteps=1000)
model.save("my_model_clinject.zip") # Save policy
```
Documentation
Documentation is available on readthedocs: https://epyt-control.readthedocs.io/en/stable/
License
MIT license -- see LICENSE
How to Cite?
If you use this software, please cite it as follows:
@misc{github:epytcontrol,
author = {André Artelt},
title = {{EPyT-Control -- EPANET Python Toolkit - Control}},
year = {2025},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {https://github.com/WaterFutures/EPyT-Control}
}
How to get Support?
If you come across any bug or need assistance please feel free to open a new issue if non of the existing issues answers your questions.
How to Contribute?
Contributions (e.g. creating issues, pull-requests, etc.) are welcome -- please make sure to read the code of conduct and follow the developers' guidelines.
Owner
- Name: ERC Synergy Grant Water Futures
- Login: WaterFutures
- Kind: organization
- Website: www.waterfutures.eu
- Repositories: 1
- Profile: https://github.com/WaterFutures
Repository for the ERC SyG Water Futures Team
Citation (CITATION.cff)
cff-version: 1.2.0
authors:
- family-names: Artelt
given-names: André
orcid: "https://orcid.org/0000-0002-2426-3126"
contact:
- family-names: Artelt
given-names: André
orcid: "https://orcid.org/0000-0002-2426-3126"
message: "If you use this software, please cite it using these metadata."
title: "EPyT-Control -- EPANET Python Toolkit - Control"
keywords:
- python
- simulation
- water
- epanet
- epanet-python-toolkit
- control
- reinforcement learning
license: MIT
repository-code: "https://github.com/WaterFutures/EPyT-Control"
GitHub Events
Total
- Release event: 5
- Watch event: 6
- Push event: 50
- Public event: 1
- Fork event: 4
- Create event: 5
Last Year
- Release event: 5
- Watch event: 6
- Push event: 50
- Public event: 1
- Fork event: 4
- Create event: 5
Packages
- Total packages: 1
-
Total downloads:
- pypi 116 last-month
- Total dependent packages: 0
- Total dependent repositories: 0
- Total versions: 5
- Total maintainers: 1
pypi.org: epyt-control
EPyT-Control -- EPANET Python Toolkit - Control
- Homepage: https://github.com/WaterFutures/EPyT-Control
- Documentation: https://epyt-control.readthedocs.io/en/stable/
- License: mit
-
Latest release: 0.4.0
published 8 months ago
Rankings
Maintainers (1)
Dependencies
- ipykernel >=6.29.3
- nbsphinx >=0.9.3
- sphinx >=7.2.6
- sphinx-rtd-theme >=2.0.0