ASSUME

An open-source toolbox for agent-based simulations of European electricity markets, with a primary focus on the German market setup.
https://github.com/assume-framework/assume

Category: Energy Systems
Sub Category: Energy Markets

Last synced: about 6 hours ago
JSON representation

Repository metadata

ASSUME - Agent-based Simulation for Studying and Understanding Market Evolution

README.md

ASSUME: Agent-Based Electricity Markets Simulation Toolbox

Lint Status
Code Coverage
DOI
REUSE status






DOI

Try examples in Colab

ASSUME is an open-source toolbox for agent-based simulations of European electricity markets, with a primary focus on the German market setup.
Developed as an open-source model, its primary objectives are to ensure usability and customizability for a wide range of users and use cases in the energy system modeling community.

Introduction

A unique feature of the ASSUME toolbox is its integration of Deep Reinforcement Learning methods into the behavioral strategies of market agents. The model offers predefined agent representations for both the demand and generation sides that can be used as plug-and-play modules, simplifying the implementation of learning strategies.
This setup enables research into new market designs and dynamics in energy markets.

If you have any questions - get in contact on matrix: https://matrix.to/#/#assume-framework:matrix.org
Log into your existing matrix account or create a new one. Paste the URL in the search field.

What can the software do?

The main motivation of ASSUME is to overcome the limitations of fixed, rule-based behaviors in existing ABMs.
For this, it leverages advancements in artificial intelligence, particularly deep reinforcement learning (DRL), enabling agents to adapt their behavior dynamically in response to market conditions.
This approach is practical for modeling interactions among competing market participants and observing emergent patterns from these interactions.
To support market design analysis in transforming electricity systems, we developed the ASSUME framework - a flexible and modular agent-based modeling tool for electricity market research.
ASSUME enables researchers to customize components such as agent representations, market configurations, and bidding strategies, utilizing pre-built modules for standard operations.
With the setup in ASSUME, researchers can simulate strategic interactions in electricity markets under a wide range of scenarios, from comparing market designs and modeling congestion management to analyzing the behavior of learning storage operators and renewable producers.
The framework supports studies on bidding under uncertainty, regulatory interventions, and multi-agent dynamics, making it ideal for exploring emergent behavior and testing new market mechanisms.
ASSUME has been utilized in research studies addressing diverse questions in electricity market design and operation.
It has explored the role of complex bids, demonstrated the effects of industrial demand-side flexibility for congestion management, and advanced the explainability of emergent strategies in learning agents.

Who is it made for?

The framework is versatile enough to be employed in smaller-scale projects, such as master's theses, while also robust enough for complex doctoral research or investigations conducted by industry professionals.
This accessibility and scalability make ASSUME suitable for many users, from early-career researchers to experienced professionals.

Documentation

Installation

You can install ASSUME using pip.
Choose the appropriate installation method based on your needs:

Using pip

To install the core package:

pip install assume-framework

To install with reinforcement learning capabilities:

pip install 'assume-framework[learning]'

Please keep in mind that the above installation method will install the PyTorch package without CUDA support.
If you want to make use of your GPU with CUDA cores, please install PyTorch with GPU support separately as described here.

We also include network-based market clearing algorithms such as for the re-dispatch, zonal clearing with NTCs and nodal market clearing, which all require the PyPSA library.
To install the package with these capabilities, use:

pip install 'assume-framework[network]'

To install with all capabilities:

pip install 'assume-framework[all]'

Timescale Database and Grafana Dashboards

The Timescale Database and Grafana Dashboard are used to store and represent simulation results.

If you want to use the supported TimescaleDB and integrated Grafana dashboards for scenario analysis, you can use the provided Docker Compose file.

Follow these steps:

  1. Clone the repository and navigate to its directory:
git clone https://github.com/assume-framework/assume.git
cd assume
  1. Start the database and Grafana using the following command:
docker compose up -d

This will launch a container for TimescaleDB and Grafana with preconfigured dashboards for analysis.
You can access the Grafana dashboards at http://localhost:3000.

Using TensorBoard to display Learning Metrics

TensorBoard is used to visualize and monitor the learning progress during reinforcement learning training.

When running an example with learning capabilities, you can start TensorBoard to observe the learning process.
Use the following shell command to start TensorBoard:

tensorboard --logdir tensorboard

You can then head to http://localhost:6006/ to view and evaluate the training progress.

Please note that TensorBoard should ideally be shut down via Ctrl + C every time you want to start a new simulation run in the same folder structure and want to overwrite existing results, as failing to do so may lead to conflicts deleting old logs.

Trying out ASSUME and the provided Examples

To ease your way into ASSUME, we provided some tutorial notebooks and preconfigured example simulations in the examples folder.
The former are helpful if you would like to get an impression of how ASSUME works, as they present different functionalities of ASSUME condensed in specific notebooks, and the latter provides various example simulations ranging from 8 power plant examples to the representations of Germany for one year.

The Tutorial Notebooks

You can run the tutorials locally using the notebooks here or use Google Colab.
The tutorials begin with the basics of ASSUME, e.g., introducing a new unit, while the later tutorials cover more advanced use cases.

We particularly recommend these tutorials; more can be found at the linked pages:

How to configure a new unit in ASSUME?

Open Learning Tutorial in Colab

How to change and adapt reinforcement learning algorithms in ASSUME?

Open Learning Tutorial in Colab

How to use reinforcement learning for new market participants in ASSUME?

  • Power plant unit: Open Learning Tutorial in Colab

  • Storage unit: Open Learning Tutorial in Colab

Preconfigured Examples

To explore the provided example simulations here, follow these steps:

  1. Clone the repository and navigate to its directory:
git clone https://github.com/assume-framework/assume.git
cd assume
  1. Quick Start:

There are three ways to run a simulation:

  • Local:
python examples/examples.py
  • Using the provided Docker setup:

If you have installed Docker and set up the Docker Compose file previously, you can select 'timescale' in examples.py before running the simulation.
This will save the simulation results in a Timescale database, and you can access the Dashboard at http://localhost:3000.

  • Using the CLI to run simulations:
assume -s example_01b -db "postgresql://assume:assume@localhost:5432/assume"

For additional CLI options, run assume -h.

Development

The Contribution Guidelines explain how to set up your development environment and contribute to the project.

Creating Documentation

See the Contribution Guidelines on how to build the docs for ASSUME.

Contributors and Funding

The project is developed by a collaborative team of researchers from INATECH at the University of Freiburg, IISM at Karlsruhe Institute of Technology, Fraunhofer Institute for Systems and Innovation Research, Fraunhofer Institution for Energy Infrastructures and Geothermal Energy, and FH Aachen - University of Applied Sciences. Each contributor brings valuable expertise in electricity market modeling, deep reinforcement learning, demand side flexibility, and infrastructure modeling.

ASSUME is funded by the Federal Ministry for Economic Affairs and Climate Action (BMWK).
We are grateful for their support in making this project possible.

Citing ASSUME

If you use ASSUME in your research, we would appreciate it if you cite the following paper:

Please use the following BibTeX to cite our work:

@article{ASSUME,
  title = {{ASSUME: An agent-based simulation framework for exploring electricity market dynamics with reinforcement learning}},
  author = {Harder, Nick and Miskiw, Kim K and Khanra, Manish and Maurer, Florian and Patil, Parag and Qussous, Ramiz and Weinhardt, Christof and Klobasa, Marian and Ragwitz, Mario and Weidlich, Anke},
  journal = {SoftwareX},
  volume = {30},
  pages = {102176},
  year = {2025},
  issn = {2352-7110},
  doi = {10.1016/j.softx.2025.102176},
  url = {https://www.sciencedirect.com/science/article/pii/S2352711025001438},
  keywords = {Electricity markets, Python, Reinforcement learning, Agent-based modeling}
}

If you want to cite a specific version of ASSUME, all releases are archived on Zenodo with version-specific DOIs:

DOI

License

Copyright 2022-2025 ASSUME developers.

ASSUME is licensed under the GNU Affero General Public License v3.0. This license is a strong copyleft license that requires that any derivative work be licensed under the same terms as the original work. It is approved by the Open Source Initiative.


Owner metadata


GitHub Events

Total
Last Year

Committers metadata

Last synced: 3 days ago

Total Commits: 1,228
Total Committers: 27
Avg Commits per committer: 45.481
Development Distribution Score (DDS): 0.685

Commits in past year: 241
Committers in past year: 17
Avg Commits per committer in past year: 14.176
Development Distribution Score (DDS) in past year: 0.722

Name Email Commits
Florian Maurer m****r@f****e 387
Nick Harder n****4@g****m 333
kim-mskw k****w@k****u 213
Andreas Eppler A****7@w****e 56
Johanna Adams j****s@t****e 47
mthede m****n@k****u 44
Jannik r****b@f****e 35
gugrimm 1****m 30
Manish Khanra 4****a 20
Johanna Adams a****j@t****e 13
Finn Reinecke 9****i 10
Parag Patil p****9@g****m 8
Philipp Fritz f****p@o****e 5
unknown a****o@w****e 5
tiernan-buckley-ufr t****2@s****e 4
Chiara Fusar Bassini c****i@h****g 4
Carl Wanninger 9****i 2
Nick Marx n****x@s****u 2
Michael Hafner 1****l 2
ChriKo97 c****s@p****e 1
DominikBurkert 3****t 1
Hendrik Wulfert H****t@i****e 1
Kyle Niemeyer k****r@f****m 1
Osama u****h@s****u 1
Ramiz Qussous r****s 1
Robbe Sneyders r****s@g****m 1
isaac-gumbrell 8****l 1

Committer domains:


Issue and Pull Request metadata

Last synced: 5 days ago

Total issues: 180
Total pull requests: 707
Average time to close issues: 3 months
Average time to close pull requests: 7 days
Total issue authors: 28
Total pull request authors: 27
Average comments per issue: 1.67
Average comments per pull request: 1.78
Merged pull request: 552
Bot issues: 0
Bot pull requests: 1

Past year issues: 56
Past year pull requests: 165
Past year average time to close issues: about 1 month
Past year average time to close pull requests: 10 days
Past year issue authors: 17
Past year pull request authors: 20
Past year average comments per issue: 2.05
Past year average comments per pull request: 1.93
Past year merged pull request: 116
Past year bot issues: 0
Past year bot pull requests: 0

More stats: https://issues.ecosyste.ms/repositories/lookup?url=https://github.com/assume-framework/assume

Top Issue Authors

  • nick-harder (43)
  • kim-mskw (33)
  • maurerle (27)
  • adamsjohanna (10)
  • gugrimm (9)
  • reinecfi (8)
  • mthede (7)
  • dlr-cjs (6)
  • AndreasEppler (4)
  • paragpatil39 (4)
  • jrasko (4)
  • hhuang-fzj (3)
  • Manish-Khanra (3)
  • chiara-fb (2)
  • matthieusirius (2)

Top Pull Request Authors

  • maurerle (244)
  • nick-harder (209)
  • kim-mskw (81)
  • Manish-Khanra (25)
  • jrasko (24)
  • adamsjohanna (21)
  • mthede (18)
  • gugrimm (11)
  • reinecfi (9)
  • HafnerMichael (9)
  • paragpatil39 (9)
  • tiernan-buckley-ufr (8)
  • AndreasEppler (8)
  • isaac-gumbrell (6)
  • fritzphilipp (4)

Top Issue Labels

  • documentation (14)
  • enhancement (14)
  • bug (10)
  • feature (10)
  • validation (7)
  • discussion needed (6)
  • priority: low (4)
  • tests (4)
  • priority: high (3)
  • question (3)
  • examples (3)
  • Workshop Prep (2)
  • upstream-fix-required (2)
  • blocked (1)
  • invalid (1)
  • priority: medium (1)

Top Pull Request Labels

  • feature (5)
  • priority: high (5)
  • enhancement (4)
  • discussion needed (4)
  • bug (2)
  • blocked (2)
  • documentation (2)
  • priority: low (2)
  • Review effort 4/5 (1)
  • examples (1)
  • Review effort 2/5 (1)
  • tagpr (1)

Package metadata

proxy.golang.org: github.com/assume-framework/assume

pypi.org: assume-framework

ASSUME - Agent-Based Electricity Markets Simulation Toolbox

  • Homepage: https://assume-project.de/
  • Documentation: https://assume.readthedocs.io
  • Licenses: AGPL-3.0-or-later
  • Latest release: 0.6.0 (published 3 months ago)
  • Last Synced: 2026-06-21T06:01:20.402Z (3 days ago)
  • Versions: 22
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 203 Last month
  • Rankings:
    • Dependent packages count: 7.402%
    • Stargazers count: 21.618%
    • Forks count: 22.802%
    • Average: 30.228%
    • Dependent repos count: 69.09%
  • Maintainers (2)

Dependencies

.github/workflows/docker-publish.yml actions
  • actions/checkout v3 composite
  • docker/build-push-action v4 composite
  • docker/login-action v2.2.0 composite
  • docker/metadata-action v4 composite
  • docker/setup-buildx-action v2 composite
.github/workflows/lint-pytest.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
  • actions/upload-artifact v3 composite
  • codecov/codecov-action v3 composite
Dockerfile docker
  • python 3.11-bookworm build
environment.yml pypi
pyproject.toml pypi
  • black ^23.3.0
  • glpk ^0.4.7
  • isort ^5.12.0
  • mango-agents ^1.1.1
  • matplotlib ^3.7.2
  • mypy ^1.1.1
  • nest-asyncio ^1.5.6
  • paho-mqtt ^1.5.1
  • pandas ^2.0.0
  • psycopg2-binary ^2.9.5
  • pyomo ^6.6.1
  • pytest ^7.2.2
  • pytest-asyncio ^0.21.1
  • pytest-cov ^4.1.0
  • python ^3.10
  • python-dateutil ^2.8.2
  • pyyaml ^6.0
  • sqlalchemy ^2.0.9
  • torch ^2.0.1
  • tqdm ^4.64.1

Score: 13.560489267752041