epyt-control

A Python package for implementing and evaluating control algorithms & strategies in smart water networks.

https://github.com/waterfutures/epyt-control

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

control epanet epanet-python-toolkit hydraulics python reinforcement-learning simulation water water-distribution-networks water-quality
Last synced: 6 months ago · JSON representation ·

Repository

A Python package for implementing and evaluating control algorithms & strategies in smart water networks.

Basic Info
Statistics
  • Stars: 9
  • Watchers: 4
  • Forks: 3
  • Open Issues: 0
  • Releases: 4
Topics
control epanet epanet-python-toolkit hydraulics python reinforcement-learning simulation water water-distribution-networks water-quality
Created about 1 year ago · Last pushed 8 months ago
Metadata Files
Readme License Code of conduct Citation

README.md

pypi License: MIT PyPI - Python Version Documentation Status Downloads Downloads

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

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

  • Versions: 5
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 116 Last month
Rankings
Dependent packages count: 9.7%
Average: 32.1%
Dependent repos count: 54.6%
Maintainers (1)
Last synced: 7 months ago

Dependencies

docs/requirements.txt pypi
  • ipykernel >=6.29.3
  • nbsphinx >=0.9.3
  • sphinx >=7.2.6
  • sphinx-rtd-theme >=2.0.0
pyproject.toml pypi
setup.py pypi