Recent Releases of ASSUME
ASSUME - v0.5.2
New Features:
- TensorBoard Integration: To enable better monitoring of the learning progress and comparison between different runs, we have added the possibility to use TensorBoard for logging
the learning progress. To use this feature, please follow the instructions in the README. - Building Class: Introduced a new
Building
class to represent residential and tertiary buildings. This enhancement allows users to define a building type along with
associated technology components, facilitating a more detailed investigation of energy consumption and flexibility potential. The building can also be defined as a prosumer or consumer.
When a building is defined as prosumer, it actively participates in electricity trading, allowing the operator/resident to sell excess energy to the grid. In contrast,
a consumer represents a traditional energy consumer focusing solely on energy consumption without trading capabilities.
Improvements:
- Changed SoC Definition: The state of charge (SoC) for storage units is now defined as the SoC at the beginning of the respective timestep, reflecting the entire available capacity before having submitted any bids.
This change ensures that the SoC is consistently interpretable. Discharging and charging action in the respective hour are then reflected by the next SoC. - Multi-market participation configuration: Respect the
eligible_obligations_lambda
set in theMarketConfig
to only bid on markets where the UnitsOperator fulfills the requirements.
Changes the behavior to not participate on markets when no unit has a matching bidding strategy for this market. - Learning Performance: The learning performance for large multi-agent learning setups has been significantly improved by introducing several learning stabilization techniques.
This leads to a more stable learning process and faster convergence. It also allows for running simulations with a larger number of agents that achieve comparable results to historical data.
For example, running example_03a for the year 2019, one can achieve an RMSE of 10.22 EUR/MWh and MAE of 6.52 EUR/MWh for hourly market prices, and an RMSE of 6.8 EUR/MWh and MAE of 4.6 EUR/MWh when
using daily average prices. This is a significant improvement compared to the previous version of the framework.
Bug Fixes:
- Storage Learning Strategy: Fixed a bug in the storage learning strategy that caused the learning process to fail or perform poorly. The bug was related to the way the storage was updating the state of charge.
This has been fixed, and the learning process for storage units is now stable and performs well. It also improved the performance of non-learning bidding strategies for storage units. Further reduced the actions number to one which reflects discharge and charge actions. - Wrong train_freq Handling: Fixed a bug where, if the simulation length was not a multiple of the train_freq, the remaining simulation steps were not used for training, causing the training to fail.
This has been fixed, and now the train_freq is adjusted dynamically to fit the simulation length. The user is also informed about the adjusted train_freq in the logs. - Logging of Learning Parameters: Fixed the way learning parameters were logged, which previously used a different simulation_id for each episode, leading to very slow performance of the learning Grafana dashboard.
Now, the learning parameters are logged using the same simulation_id for each episode, which significantly improves the performance of the learning Grafana dashboard. - Learning Reward Writing: Fixed a bug where the reward was wrongly transformed with a reshape instead of a transpose when writing the reward to the database. This caused the reward to be written in the wrong format when working with multiple units.
The bug did affect learning process with heterogeneous agents mainly. This has been fixed, and now the reward is written in the correct format.
Code Refactoring
- Moved common functions to DSMFlex.
- Added tests for the
Building
class. - Refactored variable names for better readability and consistency.
- Restructured the process sequence for improved efficiency.
Energy Systems - Energy Markets
- Python
Published by kim-mskw about 1 month ago

ASSUME - v0.5.1 (3rd February 2025)
New Features:
- Exchange Unit: A new unit type for modeling energy trading between market participants. It supports buying (importing) and selling (exporting) energy, with user-defined prices. Check example_01a, example_03, and the files "exchange_units.csv" and "exchanges_df.csv" for usage examples.
- Market Contracts and Support Policies: it is now possible to simulate the auctioning of support policies, like feed-in tariff, PPA, CfD or a market premium. The contracts are auctioned and then have a regular contract execution, to compensate according to the contracts dynamic, based on the historic market price and unit dispatch (#542).
- Merit Order Plot on the default Grafana Dashboard - showing a deeper view into the bidding behavior of the market actors. Additionally, a graph showing the market result per generation technology has been added (#531).
Improvements:
- Multi-agent DRL fix: Addressed a critical bug affecting action sampling, ensuring correct multi-agent learning.
- Performance boost: Optimized training efficiency, achieving 2x overall speedup and up to 5x on CUDA devices.
- Learning Observation Space Scaling: Instead of the formerly used max scaling of the observation space, we added a min-max scaling to the observation space. This allows for a more robust scaling of the observation space for future analysis (#508).
- Allow Multi-Market Bidding Strategies: Added the possibility to define a bidding strategy for multiple markets. Now when the same bidding strategy is used for two or more markets, the strategy is only created once and the same instance is used for all of these markets.
- Improve Storage Behavior: Storages were using the current unmodified SoC instead of the final SoC of last hour, leading to always using the initial value to calculate discharge possibility.(#524)
- OEDS Loader: when using the OEDS as a database, the queries have been adjusted to the latest update of the MarktStammDatenRegister. Time-sensitive fuel costs for gas, coal and oil are available from the OEDS as well. This also includes various fixes to the behavior of the DMAS market and complex powerplant strategies (#532).
Bug Fixes:
- Update PyPSA Version: Fixes example "small_with_redispatch"; adjustments to tutorials 10 and 11 to remove DeprecationWarnings.
- Fixes to the documentation documentation and example notebooks were updated to be compatible with the latest changes to the framework (#530, #537, #543)
- postgresql17 - using the docker container in the default compose.yml requires to backup or delete the existing assume-db folder. Afterwards, no permission changes should be required anymore when setting up the DB (#541)
New Contributors
- @tiernan-buckley-ufr made their first contribution in https://github.com/assume-framework/assume/pull/522
Full Changelog: https://github.com/assume-framework/assume/compare/v0.5.0...v0.5.1
Energy Systems - Energy Markets
- Python
Published by nick-harder 3 months ago

ASSUME - v0.5.0 - (10th December 2024)
New Features:
- Learning rate and noise scheduling: Added the possibility to schedule the learning rate and action noise in the learning process. This feature
enables streamlining the learning progress. Currently, only "linear" decay available by setting thelearning_rate_schedule
and
action_noise_schedule
in the learning config to "linear". Defaults to no decay if not provided. It decayslearning_rate
/noise_dt
linearly from starting value to 0 over giventraining_episodes
which can be adjusted by the user. The schedule parameters (e.g. end value
and end fraction) are not adjustable in the config file, but can be set in the code. - Hydrogen Plant: A new demand side unit representing a hydrogen plant has been added. The hydrogen plant consists of an
electrolyzer and a seasonal hydrogen storage unit. The electrolyzer converts electricity into hydrogen, which can be
stored in the hydrogen storage unit and later used. - Seasonal Hydrogen Storage: A new storage unit representing a seasonal hydrogen storage has been added. The seasonal hydrogen
storage unit can store hydrogen over long periods and release it when needed. It has specific constraints to avoid charging or
discharging during off-season or on-season time as well as a target level to be reached at the end of the season.
Improvements:
- Timeseries Performance Optimization: Switched to a custom
FastIndex
andFastSeries
class, which is based on the pandas Series
but utilizes NumPy arrays for internal data storage and indexing. This change significantly improves the
performance of read and write operations, achieving an average speedup of 2x to 3x compared to standard
pandas Series. TheFastSeries
class retains a close resemblance to the pandas Series, including core
functionalities like indexing, slicing, and arithmetic operations. This ensures seamless integration,
allowing users to work with the new class without requiring significant code adaptation. - Outputs Role Performance Optimization: Output role handles dict data directly and only converts to DataFrame on Database write.
- Overall Performance Optimization: The overall performance of the framework has been improved by a factor of 5x to 12x
depending on the size of the simulation (number of units, markets, and time steps).
Bugfixes:
- Tutorials: General fixes of the tutorials, to align with updated functionalitites of Assume
- Tutorial 07: Aligned Amiris loader with changes in format in Amiris compare (https://gitlab.com/fame-framework/fame-io/-/issues/203 and https://gitlab.com/fame-framework/fame-io/-/issues/208)
- Powerplant: Remove duplicate
Powerplant.set_dispatch_plan()
which broke multi-market bidding - CSV scenario loader: Fixed issue when one extra day was being added to the index, which lead to an error in the simulation when additional data was not available in the input data.
- Market opening schedule: Fixed issue where the market opening was scheduled even though the simulation was ending before the required products. Now the market opening is only scheduled
if the total duration of the market products plus first delivery time fits before the simulation end. - Loader fixes: Fixes for PyPSA, OEDS and AMIRIS loaders
Energy Systems - Energy Markets
- Python
Published by maurerle 5 months ago

ASSUME - v0.4.3 (11th November 2024)
Improvements:
- Documentation: added codespell hook to pre-commit which checks for spelling errors in documentation and code
Bugfixes:
- Simulation: Delete simulation results for same simulation prior to run (as before v0.4.2)
Full Changelog: https://github.com/assume-framework/assume/compare/v0.4.2...v0.4.3
Energy Systems - Energy Markets
- Python
Published by nick-harder 6 months ago

ASSUME - v0.4.2
New Features:
- Residential Components: Added new residential DST components including PV, EV, Heat Pump, and Boiler, now with enhanced docstrings for better usability.
- Modular DST Components: DST components have been converted from functions to classes, improving modularity and reusability.
- Generic Storage Class: Introduced a
GenericStorage
class for storage components. Specific classes, such as EV and Hydrogen Storage, now inherit from it. - Storage Learning Strategy: Added a new DRL-based learning strategy for storage units. To use it, set
storage_learning
in thebidding_EOM
column ofstorage_units.csv
. Refer to theStorageRLStrategy
documentation for more details. - Mango 2.x Update: Upgraded to mango 2.x, enabling synchronous world creation. To upgrade an existing environment, run:
pip uninstall -y mango-agents mango-agents-assume && pip install assume-framework --upgrade
- Distributed Simulation Enhancements: Improved distributed simulation for TCP and MQTT, allowing containers to wait for each other during simulations.
- Integrated Optimization with Pyomo and HIGHS Solver: The Pyomo library and HIGHS solver are now installed by default, removing the need to install
assume-framework[optimization]
separately. The HIGHS solver is used as the default, replacing the older GLPK solver for improved optimization performance and efficiency.
Improvements:
- Documentation: Refined tutorial notebooks and added bug fixes.
- Saving Frequency Logic: Refactored the saving frequency in the
WriteOutput
class for improved efficiency.
Bug Fixes:
- Solver Compatibility: Addressed undefined
solver_options
when using solvers other than Gurobi or HIGHS. - Cashflow Calculation: Corrected cashflow calculations for single-digit orders.
- Simulation Execution: Enabled simulations to synchronize and wait for each other.
- Edge Case Handling: Fixed edge cases in
pay_as_clear
andpay_as_bid
.
New Contributor:
- @HafnerMichael made their first contribution with improvements to cashflow calculations and development of residential DST components.
Full Changelog: v0.4.1...v0.4.2
Energy Systems - Energy Markets
- Python
Published by nick-harder 6 months ago

ASSUME - v0.4.1
v0.4.1 - latest release (8th October 2024)
New Features:
- improve LSTM learning strategy (#382)
- add python 3.12 compatibility (#334)
- manual strategy for interactive market simulation (#403)
Improvements:
- add the ability to define the solver for the optimization-based market clearing inside the param_dict of the config file (#432)
- shallow clone in Jupyter notebooks so that cloning is faster (#433)
- fixes in storage operation bidding (#417)
- update GitHub Actions versions (#402)
Bug Fixes:
- add compatibility with pyyaml-include (#421)
- make complex clearing compatible to RL (#430)
- pin PyPSA to remove DeprecationWarnings for now (#431)
Energy Systems - Energy Markets
- Python
Published by nick-harder 7 months ago

ASSUME - v0.4.0
New Features:
-
Market Coupling: Users can now perform market clearing for different market zones with given transmission capacities. This feature
allows for more realistic simulation of market conditions across multiple interconnected regions, enhancing the accuracy of market
analysis and decision-making processes. A tutorial on how to use this feature is coming soon. -
Adjust the Framework to Schedule Storing to the Learning Role: This enhancement enables Learning agents to participate in sequential
markets, such as day-ahead and intraday markets. The rewards are now written after the last market, ensuring that the learning process
accurately reflects the outcomes of all market interactions. This improvement supports more sophisticated and realistic agent training scenarios.
A tutorial on how to use this feature is coming soon. -
Multiprocessing: Using a command line option, it is now possible to use run each simulation agent in its own process to speed up larger simulations.
You can read more about it in :doc:distributed_simulation
-
Steel Plant Demand Side Management Unit: A new unit type has been added to the framework, enabling users to model the demand side management
of a steel plant. This feature allows for more detailed and accurate simulations of industrial energy consumption patterns and market interactions.
This unit can be configured with different components, such as the electric arc furnace, electrolyzer, and hot storage, to reflect the specific
characteristics of steel production processes. The process can be optimized to minimize costs or to maximize the available flexibility, depending
on the user's requirements. A tutorial and detailed documentation on how to use this feature are coming soon.
Improvements:
- Significant speed up of the framework and especially of the learning process
- Separated scenario loader function to improve speed and reduce unrequired operations
- Refactored unit operator by adding a seperate unit operator for learning units
- Enhanced learning output and path handling
- Updated dashboard for better storage view
- Improved clearing with shuffling of bids, to avoid bias in clearing of units early in order book
- Introduced a mechanism to clear the market according to defined market zones while maintaining information about
individual nodes, enabling the establishment of specific market zones within the energy market and subsequent
nodal-based markets such as redispatch. - Added
zones_identifier
to the configuration file andzone_id
to thebuses.csv
, and refactored the complex market
clearing algorithm to incorporate zone information, ensuring that bids submitted with a specific node are
matched to the corresponding market zone. - If any values in the availability_df.csv file are larger than 1, the framework will now warn the user
and run a method to normalize the values to [0, 1]. - Examples have been restructed to easier orientation and understanding: example_01.. cover all feature demonstration examples,
example_02.. cover all learning examples, example_03.. cover all full year examples
Bug Fixes:
- Fix learning when action dimension equals one
- Fixed Tutorial 5
- Correctly calculated timezone offsets
- Improved handling of rejected bids
- Fix the error that exploration mode is used during evaluation
- Fix double dispatch writing
- Fixed complex clearing with pyomo>=6.7
- Resolved various issues with learning and policy saving
- Fixed missing market dispatch values in day-ahead markets
- Added a check for availability_df.csv file to check for any values larger than 1
Other Changes:
- Added closing word and final dashboard link to interoperability tutorial
Energy Systems - Energy Markets
- Python
Published by nick-harder 9 months ago

ASSUME - v0.3.7
What's Changed
- Edit how pyomo markets are imported by @nick-harder in https://github.com/assume-framework/assume/pull/310
- Add ARM docker platform by @maurerle in https://github.com/assume-framework/assume/pull/312
- Contract Market with feed in policy and market premium by @maurerle in https://github.com/assume-framework/assume/pull/248
- Add basic grid visualization by @maurerle in https://github.com/assume-framework/assume/pull/305
- Pypsa loader by @maurerle in https://github.com/assume-framework/assume/pull/311
- update grafana docker version to latest by @maurerle in https://github.com/assume-framework/assume/pull/316
- adjustments to scenario loaders by @maurerle in https://github.com/assume-framework/assume/pull/317
- set correct compose.yml mount for docker by @maurerle in https://github.com/assume-framework/assume/pull/320
- This commit prepares assume to integrate proper nodal pricing by @nick-harder in https://github.com/assume-framework/assume/pull/304
- fix bugs in tutorial 6 by @adamsjohanna in https://github.com/assume-framework/assume/pull/324
- Add fixed pyomo version to avoid warning by @adamsjohanna in https://github.com/assume-framework/assume/pull/325
- Add Code of Conduct by @maurerle in https://github.com/assume-framework/assume/pull/313
- Interoperability tutorial by @maurerle in https://github.com/assume-framework/assume/pull/323
- increase version to 0.3.7 for latest release by @maurerle in https://github.com/assume-framework/assume/pull/327
Full Changelog: https://github.com/assume-framework/assume/compare/v0.3.6...v0.3.7
Energy Systems - Energy Markets
- Python
Published by maurerle about 1 year ago

ASSUME - v0.3.6
What's Changed
- update github actions by @maurerle in https://github.com/assume-framework/assume/pull/296
- use latest github actions versions for codecov too by @maurerle in https://github.com/assume-framework/assume/pull/297
- Fix tutorial 2 by @nick-harder in https://github.com/assume-framework/assume/pull/299
- silence output of gurobipy by specifying an env which does not log by @maurerle in https://github.com/assume-framework/assume/pull/300
- fixes writing market_dispatch and dispatch for other product_types by @maurerle in https://github.com/assume-framework/assume/pull/301
- Fix datetime warning by @maurerle in https://github.com/assume-framework/assume/pull/302
- Add a tutorial for the advanced order types and documentation for the complex clearing by @adamsjohanna in https://github.com/assume-framework/assume/pull/303
- Fixes string conversion of paths by @kim-mskw in https://github.com/assume-framework/assume/pull/307
- move dmas bidding strategies into try since pyomo is not a required d⦠by @nick-harder in https://github.com/assume-framework/assume/pull/308
Full Changelog: https://github.com/assume-framework/assume/compare/v0.3.5...v0.3.6
Energy Systems - Energy Markets
- Python
Published by maurerle about 1 year ago

ASSUME - v0.3.5
Release Notes - v0.3.5
We are thrilled to announce the release of v0.3.5 of ASSUME Framework. This release marks the introduction of the redispatch module, a tool for congestion management, alongside several bug fixes and improvements. Let's delve into the details of the changes:
Redispatch Module Introduction
Congestion Management
In v0.3.5, the introduction of the redispatch module significantly enhances the framework's capabilities in addressing congestion management challenges. This module is equipped to support both cost-based and market-based redispatch strategies, leveraging the PyPSA network to detect and resolve congestion effectively.
To explore its functionality, users can engage with the Example 01d, wherein a Day-Ahead Energy Market and a subsequent Redispatch Market are employed. Initially, the market is cleared using a single bidding zone, followed by a congestion management process. Furthermore, a detailed Jupyter-based tutorial will be made available to facilitate a deeper understanding of the module's application.
Cost-Based and Market-Based Redispatch
The redispatch module offers support for both cost-based and market-based redispatch strategies. This includes the implementation of "pay as bid" and "pay as clear" market methods, empowering users with versatile tools for congestion management.
Detailed Changes
Redispatch v1
Implemented by @nick-harder. @paragpatil39 and @rqussous in PR #279, this significant update introduces the initial version of the redispatch feature, laying the foundation for advanced congestion management.
New Strategies Allocation
@nick-harder's contribution in PR #289 brings about a crucial change in strategy allocation, now utilizing market names instead of product types, enhancing the overall clarity and usability of the framework.
Bug Fixes and Refinements
- Storage Operation Fixes: @adamsjohanna addressed some bugs in storage operations, ensuring smoother functionality (PR #291).
- Removal of Empty Bid Method: In PR #293, @nick-harder eliminated the use of empty bid as a method of bidding strategy, streamlining the bidding process.
- EOM References Cleanup: @nick-harder's contribution in PR #294 involved the removal of hard-coded EOM references from the code base, ensuring a more flexible and maintainable code structure.
- Overall scenario loading and other quality improvements by @maurerle
For a comprehensive list of changes, please refer to the Full Changelog.
We encourage all users to upgrade to v0.3.5 to leverage the latest enhancements and bug fixes. Your feedback is invaluable, and we look forward to hearing about your experiences with these new features.
Energy Systems - Energy Markets
- Python
Published by nick-harder about 1 year ago

ASSUME - v0.3
Release Notes - Version 0.3
What's Changed
Features
- Added reuse compliance by @maurerle
- Added Data Request mechanism by @maurerle (#247)
- Added "Open in Collab" to notebooks by @nick-harder (#258)
- Added block order and linked order and respective market clearing mechanism by @adamsjohanna (#269)
- Added MASTR based OEDS loader by @maurerle
- Added AMIRIS Scenario loader by @maurerle
Fixes
- Fixed calculation of marginal cost and output_before by @maurerle (#250)
- Changed buffer add function call by @kim-mskw (#255)
- Adjusted query of reward during training by @nick-harder (#256)
- Fixed calculation of flexible storage bids by @maurerle (#260)
- Fixed RL evaluations by @kim-mskw (#280)
- Fixed usage of license references by @maurerle (#246)
Documentation
- [Tutorial] Added basic tutorial 01 and 02 by @nick-harder (#257)
- [Tutorial] Added Custom Unit and Custom Strategy tutorial by @Manish-Khanra (#262)
- [Tutorial] Added tutorial of EOM and LTM comparison by @maurerle (#265)
- Updated dependencies and installation instructions by @nick-harder (#282)
- Added additional clearing and strategy docs by @maurerle (#283)
Other
- Moved scenario loaders to separate folder by @maurerle (#264)
- Added an automatic assignment of RL units to one RL unit operator by @kim-mskw (#276)
- Improved data_dict usage by @maurerle (#274)
Full Changelog
Energy Systems - Energy Markets
- Python
Published by nick-harder about 1 year ago

ASSUME - v0.2.1
What's Changed
- fix loading learned strategies by @nick-harder in https://github.com/assume-framework/assume/pull/219
- Workshop dach by @kim-mskw in https://github.com/assume-framework/assume/pull/218
- distribute current time correctly to agents running in shadow container in different process by @maurerle in https://github.com/assume-framework/assume/pull/199
- RL Documentation by @kim-mskw in https://github.com/assume-framework/assume/pull/221
- Add shields badges to readme by @maurerle in https://github.com/assume-framework/assume/pull/223
- add amiris scenario loader by @maurerle in https://github.com/assume-framework/assume/pull/224
- fixes for running distributed scenario with mqtt by @maurerle in https://github.com/assume-framework/assume/pull/222
Full Changelog: https://github.com/assume-framework/assume/compare/v0.2.0...v0.2.1
Energy Systems - Energy Markets
- Python
Published by maurerle over 1 year ago

ASSUME - v0.2.0
What has changed:
- The learning performance has been improved
- The learning can now be also performed on CUDA enabled devices
- Added tracking of evaluation periods for better learning performance evaluation
- Storage units behavior bugs have been adressed
- Now several simulation can be started in parallel
- New Grafana dashboard definitions for easier analysis
- Docker compose file now includes Renderer to save plots directly from Grafan dashboards
Energy Systems - Energy Markets
- Python
Published by nick-harder over 1 year ago

ASSUME - v0.1.0 - initial release
This is the initial release of assume-framework, which is published to PyPi.
The assume-framework allows to define different energy market designs and includes reinforcement learning capabilities.
Energy Systems - Energy Markets
- Python
Published by maurerle over 1 year ago

ASSUME - EIA-2023 - Market Abstraction Paper
This tag is used to release a citable version of the code used for the conference paper:
"Market Abstraction of Energy Markets and Policies ā Application in an Agent-Based Modeling Toolbox"
Energy Systems - Energy Markets
- Python
Published by maurerle almost 2 years ago
