Skip to main content

EPyT-Control -- EPANET Python Toolkit - Control

Project description

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.10 - 3.14

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:

# 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:

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

epyt_control-0.6.0.tar.gz (300.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

epyt_control-0.6.0-py3-none-any.whl (41.3 kB view details)

Uploaded Python 3

File details

Details for the file epyt_control-0.6.0.tar.gz.

File metadata

  • Download URL: epyt_control-0.6.0.tar.gz
  • Upload date:
  • Size: 300.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.13

File hashes

Hashes for epyt_control-0.6.0.tar.gz
Algorithm Hash digest
SHA256 3577fa51db8c6ffe235671256143337412b52e7db67e2ff3a64c2f7feac9b94f
MD5 4d9f2764fd5a3881bed4add170b2ab6a
BLAKE2b-256 99a645afa5bba74fb9483a32399671959d6bd2afb51ee2df1df18d0d8f399443

See more details on using hashes here.

File details

Details for the file epyt_control-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: epyt_control-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 41.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.13

File hashes

Hashes for epyt_control-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6edde15856dfae8f2f4734a6f7ae34e86d8cb9a0db864e7195485f315eada2cf
MD5 1fb7cc8c03c28179846412bae6e00c3b
BLAKE2b-256 5ee2c1ccfdf1a026cd6c2aeb42e80a0f40e6f53f71f9debabf7a5038ec6cfb19

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page