Skip to content

Commit acbf232

Browse files
authored
Merge pull request #22 from pommes-public/dev
Prepare release of v0.1.0
2 parents e53de12 + d8e7b19 commit acbf232

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+2670
-479
lines changed

.coveragerc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[paths]
2+
source = pommesdispatch
3+
4+
[run]
5+
source =
6+
pommesdispatch
7+
tests
8+
omit =
9+
*test*
10+
*__init__*
11+
*__main__*

.github/workflows/lint.yml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
name: Flake8
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
- dev
8+
pull_request:
9+
branches:
10+
- main
11+
- dev
12+
13+
jobs:
14+
run-linters:
15+
name: Run linters
16+
runs-on: ubuntu-latest
17+
18+
steps:
19+
- name: Check out Git repository
20+
uses: actions/checkout@v2
21+
22+
- name: Set up Python
23+
uses: actions/setup-python@v1
24+
with:
25+
python-version: 3.9
26+
27+
- name: Install Python dependencies
28+
run: pip install black flake8
29+
30+
- name: Run linters
31+
uses: samuelmeuli/lint-action@v1
32+
with:
33+
github_token: ${{ secrets.github_token }}
34+
# Enable linters
35+
black: false
36+
flake8: true
37+
# Mark the following line true if you want linters to attempt to autocorrect your code
38+
auto_fix: false
39+
git_name: "Greene Lab Linter"
40+
git_email: "[email protected]"

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# Ignore (files stored at) a given path
22
/results
33
/inputs
4+
/build
5+
/dist
6+
*.egg-info
47

58
# Ignore files with a special ending (or content)
69
*__pycache__*

CITATION.cff

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
abstract: "pommesdispatch. A bottom-up fundamental power market model for the German electricity sector. https://github.com/pommes-public/pommesdispatch, accessed YYYY-MM-DD."
2+
authors:
3+
- family-names: Kochems
4+
given-names: Johannes
5+
orcid: "https://orcid.org/0000-0002-3461-3679"
6+
- family-names: Werner
7+
given-names: Yannick
8+
orcid: "https://orcid.org/0000-0002-6674-805X"
9+
- family-names: Giehl
10+
given-names: Johannes
11+
orcid: "https://orcid.org/0000-0002-1769-1907"
12+
- family-names: Grosse
13+
given-names: Benjamin
14+
orcid: "https://orcid.org/0000-0002-3323-9734"
15+
- family-names: Westphal
16+
given-names: Sophie
17+
- family-names: "Mikulicz-Radecki"
18+
given-names: Flora
19+
- family-names: Spiller
20+
given-names: Carla
21+
- family-names: "Büllesbach"
22+
given-names: Fabian
23+
- family-names: Ghosh
24+
given-names: Timona
25+
- family-names: Verwiebe
26+
given-names: Paul
27+
orcid: "https://orcid.org/0000-0002-6877-2846"
28+
- family-names: "Encinas-Rosa"
29+
given-names: Leticia
30+
- family-names: "Müller-Kirchenbauer"
31+
given-names: Joachim
32+
cff-version: "1.1.0"
33+
date-released: 2021-10-15
34+
doi: https://doi.org/
35+
keywords:
36+
- "power market"
37+
- "fundamental model"
38+
- "dispatch"
39+
- "power price"
40+
- "oemof.solph"
41+
license: "MIT license"
42+
message: "If you use this software, please cite as follows."
43+
title: pommesdispatch
44+
version: "0.1.0"

LICENSE.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# License
2+
This software is licensed under MIT License.
3+
4+
Copyright 2021 pommes developer group
5+
6+
Permission is hereby granted, free of charge, to any person obtaining a copy
7+
of this software and associated documentation files (the "Software"), to deal
8+
in the Software without restriction, including without limitation the rights
9+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
copies of the Software, and to permit persons to whom the Software is
11+
furnished to do so, subject to the following conditions:
12+
13+
The above copyright notice and this permission notice shall be included in all
14+
copies or substantial portions of the Software.
15+
16+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20+
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
22+
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

README.md

Lines changed: 72 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
1-
# pommes-dispatch
1+
![PyPI](https://img.shields.io/pypi/v/pommesdispatch)
2+
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pommesdispatch)
3+
![Documentation Status](https://readthedocs.org/projects/pommesdispatch/badge/?version=latest)
4+
![PyPI - License](https://img.shields.io/pypi/l/pommesdispatch)
5+
6+
# pommesdispatch
27

38
**A bottom-up fundamental power market model for the German electricity sector**
49

5-
This is the **dispatch variant** of the fundamental power market model *POMMES* (**PO**wer **M**arket **M**odel of **E**nergy and re**S**ources).<br>
10+
This is the **dispatch variant** of the fundamental power market model *POMMES* (**PO**wer **M**arket **M**odel of **E**nergy and re**S**ources).
611
Please navigate to the section of interest to find out more.
712

813
## Contents
914
* [Introduction](#introduction)
1015
* [Documentation](#documentation)
1116
* [Installation](#installation)
12-
* [Setting up the environment](#setting-up-the-environment)
17+
* [Setting up pommesdispatch](#setting-up-pommesdispatch)
1318
* [Installing a solver](#installing-a-solver)
1419
* [Contributing](#contributing)
1520
* [Citing](#citing)
@@ -19,43 +24,58 @@ Please navigate to the section of interest to find out more.
1924
*POMMES* itself is a cosmos consisting of a **dispatch model** (stored in this repository and described here), a **data preparation routine** and an **investment model** for the German wholesale power market. The model was originally developed by a group of researchers and students at the [chair of Energy and Resources Management of TU Berlin](https://www.er.tu-berlin.de/menue/home/) and is now maintained by a group of alumni and open for other contributions.
2025

2126
If you are interested in the data preparation routines used or investment modeling, please find more information here:
22-
- [pommes-data](https://github.com/pommes-public/pommes-data): A full-featured transparent data preparation routine from raw data to POMMES model inputs
23-
- pommes-invest: A multi-period integrated investment and dispatch model for the German power sector (upcoming).
27+
- [pommesdata](https://github.com/pommes-public/pommesdata): A full-featured transparent data preparation routine from raw data to POMMES model inputs
28+
- pommesinvest: A multi-period integrated investment and dispatch model for the German power sector (upcoming).
2429

2530
### Purpose and model characterization
26-
The **dispatch variant** of the power market model *POMMES* `pommes-dispatch` enables the user to simulate the **dispatch of backup power plants, storages as well as demand response units for the Federal Republic of Germany** for an arbitrary year or timeframe between 2017 and 2030. The dispatch of renewable power plants is exogeneously determined by normalized infeed time series and capacity values. The models' overall goal is to minimize power system costs occuring from wholesale markets whereby no network constraints are considered except for the existing bidding zone configuration used for modeling electricity exchange. Thus, the model purpose is to simulate **dispatch decisions** and the resulting **day-ahed market prices**. A brief categorization of the model is given in the following table. An extensive categorization can be found in the [model documentation]().
31+
The **dispatch variant** of the power market model *POMMES* `pommesdispatch` enables the user to simulate the **dispatch of backup power plants, storages as well as demand response units for the Federal Republic of Germany** for an arbitrary year or timeframe between 2017 and 2030. The dispatch of renewable power plants is exogeneously determined by normalized infeed time series and capacity values. The models' overall goal is to minimize power system costs occuring from wholesale markets whereby no network constraints are considered except for the existing bidding zone configuration used for modeling electricity exchange. Thus, the model purpose is to simulate **dispatch decisions** and the resulting **day-ahed market prices**. A brief categorization of the model is given in the following table. An extensive categorization can be found in the [model documentation]().
2732

2833
| **criterion** | **manifestation** |
2934
| ---- | ---- |
3035
| Purpose | - simulation of power plant dispatch and day-ahead prices for DE (scenario analysis) |
3136
| Spatial coverage | - Germany (DE-LU) + electrical neighbours (NTC approach) |
3237
| Time horizon | - usually 1 year in hourly resolution |
3338
| Technologies | - conventional power plants, storages, demand response (optimized)<br> - renewable generators (fixed)<br> - demand: exogenous time series |
34-
| Data sources | - OPSD, BNetzA, ENTSO-E, others (see [pommes-data](https://github.com/pommes-public/pommes-data)) |
35-
| Implementation | - graph representation & linear optimization: oemof.solph / pyomo<br> - data management: python / .csv |
39+
| Data sources | - input data not shipped out, but can be obtained from [pommesdata](https://github.com/pommes-public/pommesdata); OPSD, BNetzA, ENTSO-E, others |
40+
| Implementation | - graph representation & linear optimization: [oemof.solph](https://github.com/oemof/oemof-solph) / [pyomo](https://github.com/Pyomo/pyomo) <br> - data management: python / .csv |
3641

3742
### Mathematical and technical implementation
38-
The models' underlying mathematical method is a **linear programming** approach, seeking to minimize overall power system costs under constraints such as satisfying power demand at all times and not violating power generation capacity or storage limits. Thus, binary variables such as units' status, startups and shutdowns are not accounted for.
43+
The models' underlying mathematical method is a **linear programming** approach, seeking to minimize overall
44+
power system costs under constraints such as satisfying power demand at all times and not violating power generation
45+
capacity or storage limits. Thus, binary variables such as units' status, startups and shutdowns are not accounted for.
3946

40-
The model builds on the framework **[oemof.solph](https://github.com/oemof/oemof-solph)** which allows to model energy systems in a graph-based representation with the underlying mathematical constraints and objective function terms implemented in **[pyomo](https://pyomo.readthedocs.io/en/stable/)**. Some of the required oemof.solph features - such as demand response modeling - have been provided by the *POMMES* core developers which are also active in the oemof community. Users not familiar with oemof.solph may find further information in the [oemof.solph documentation](https://oemof-solph.readthedocs.io/en/latest/readme.html).
47+
The model builds on the framework **[oemof.solph](https://github.com/oemof/oemof-solph)** which allows modeling
48+
energy systems in a graph-based representation with the underlying mathematical constraints and objective function
49+
terms implemented in **[pyomo](https://pyomo.readthedocs.io/en/stable/)**. Some of the required oemof.solph featuresm - such as demand response modeling - have been provided by the *POMMES* main developers which are also active in the
50+
oemof community. Users not familiar with oemof.solph may find further information in the
51+
[oemof.solph documentation](https://oemof-solph.readthedocs.io/en/latest/readme.html).
4152

4253
## Documentation
43-
An extensive **[documentation of pommes-dispatch]()** can be found on readthedocs. It contains a model categorization, some energy economic and technical background information as well as documentation of the model functions and classes.
54+
An extensive **[documentation of pommesdispatch](https://pommesdispatch.readthedocs.io/)** can be found on readthedocs. It contains a user's guide, a model categorization, some energy economic and technical background information, a complete model formulation as well as documentation of the model functions and classes.
4455

4556
## Installation
46-
To set up `pommes-dispatch`, you have to set up a virtual environment (e.g. using conda) or add the required packages to your python installation. Additionally, you have to install a solver in order to solve the mathematical optimization problem.
57+
To set up `pommesdispatch`, set up a virtual environment (e.g. using conda) or add the required packages to your python installation. Additionally, you have to install a solver in order to solve the mathematical optimization problem.
4758

48-
### Setting up the environment
49-
`pommes-dispatch` is (to be) hosted on [PyPI](). To install it, please use the following command
59+
### Setting up pommesdispatch
60+
`pommesdispatch` is hosted on [PyPI](https://pypi.org/project/pommesdispatch/).
61+
To install it, please use the following command
5062
```
51-
pip install pommes-dispatch
63+
pip install pommesdispatch
5264
```
5365

54-
For now, you still have to clone the environment and copy the files locally by typing
66+
If you want to contribute as a developer, you fist have to
67+
[fork](https://docs.github.com/en/get-started/quickstart/fork-a-repo>)
68+
it and then clone the repository, in order to copy the files locally by typing
5569
```
56-
git clone https://github.com/pommes-public/pommes-dispatch.git
70+
git clone https://github.com/your-github-username/pommesdispatch.git
5771
```
58-
After cloning the repository, you have to install the required dependencies. Make sure you have conda installed as a package manager. If not, you can download it [here](https://www.anaconda.com/). Open a command shell and navigate to the folder where you copied the environment to. Use the following command to install dependencies
72+
After cloning the repository, you have to install the required dependencies.
73+
Make sure you have conda installed as a package manager.
74+
If not, you can download it [here](https://www.anaconda.com/).
75+
Open a command shell and navigate to the folder
76+
where you copied the environment to.
77+
78+
Use the following command to install dependencies
5979
```
6080
conda env create -f environment.yml
6181
```
@@ -65,19 +85,47 @@ conda activate pommes_dispatch
6585
```
6686

6787
### Installing a solver
68-
In order to solve a `pommes-dispatch` model instance, you need a solver installed. Please see [oemof.solph's information on solvers](https://github.com/oemof/oemof-solph#installing-a-solver). As a default, gurobi is used for `pommes-dispatch` models. It is a commercial solver, but provides academic licenses, though, if this applies to you. Elsewhise, we recommend to use CBC as the solver oemof recommends. To test your solver and oemof.solph installation, again see information from [oemof.solph](https://github.com/oemof/oemof-solph#installation-test).
88+
In order to solve a `pommesdispatch` model instance, you need a solver installed. Please see [oemof.solph's information on solvers](https://github.com/oemof/oemof-solph#installing-a-solver). As a default, gurobi is used for `pommesdispatch` models. It is a commercial solver, but provides academic licenses, though, if this applies to you. Elsewhise, we recommend to use CBC as the solver oemof recommends. To test your solver and oemof.solph installation, again see information from [oemof.solph](https://github.com/oemof/oemof-solph#installation-test).
6989

7090
## Contributing
7191
Every kind of contribution or feedback is warmly welcome.<br>
72-
We use the GitHub issue management as well as pull requests for collaboration. We try to stick to the PEP8 coding standards.
92+
We use the [GitHub issue management](https://github.com/pommes-public/pommesdispatch/issues) as well as
93+
[pull requests](https://github.com/pommes-public/pommesdispatch/pulls) for collaboration. We try to stick to the PEP8 coding standards.
94+
95+
The following people have contributed in the following manner to `pommesdispatch`:
96+
97+
| Name | Contribution | Status |
98+
| ---- | ---- | ---- |
99+
| Johannes Kochems | major development & conceptualization<br>conceptualization, core functionality (esp. dispatch, power prices, demand response, rolling horizon modeling), architecture, publishing process | coordinator & maintainer,<br>developer & corresponding author |
100+
| Yannick Werner | major development & conceptualization<br>conceptualization, core functionality (esp. exchange, RES, CHP modeling), interface to pommesdata | developer & corresponding author |
101+
| Johannes Giehl | development<br>early-stage core functionality | developer |
102+
| Benjamin Grosse | development<br>support for conceptualization, early-stage contributions at the interface to pommesdata | developer |
103+
| Sophie Westphal | development<br>early-stage contributions at the interface to pommesdata | former developer (student assistant) |
104+
| Flora von Mikulicz-Radecki | testing<br>early-stage comprehensive testing | former tester (student assistant) |
105+
| Carla Spiller | development<br>early-stage rolling horizon and cross-border exchange integration | former developer (student assistant) |
106+
| Fabian Büllesbach | development<br>early-stage rolling horizon implementation | former developer (master's student) |
107+
| Timona Ghosh | development<br>early-stage cross-border exchange implementation | former developer (master's student) |
108+
| Paul Verwiebe | support<br>support of early-stage core functionality development | former supporter (research associate) |
109+
| Leticia Encinas Rosa | support<br>support of early-stage core functionality development | former supporter (research associate) |
110+
| Joachim Müller-Kirchenbauer | support & conceptualization<br>early-stage conceptualization, funding | supporter (university professor) |
111+
112+
*Note: Not every single contribution is reflected in the current version of
113+
`pommesdispatch`. This is especially true for those marked as early-stage
114+
contributions that may have been extended, altered or sometimes discarded.
115+
Nonetheless, all people listed have made valuable contributions. The ones
116+
discarded might be re-integrated at some point in time.
117+
Dedicated contributions to `pommesdata` and `pommesinvest` are not included
118+
in the list, but listed individually for these projects.*
73119

74120
## Citing
75-
A publication using and introducing `pommes-dispatch` is currently in preparation.
121+
A publication using and introducing `pommesdispatch` is currently in preparation.
122+
123+
If you are using `pommesdispatch` for your own analyses, we recommend citing as:<br>
124+
*Kochems, J.; Werner, Y.; Giehl, J.; Grosse, B. et al. (2021): pommesdispatch. A bottom-up fundamental power market model for the German electricity sector. https://github.com/pommes-public/pommesdispatch, accessed YYYY-MM-DD.*
76125

77-
If you are using `pommes-dispatch` for your own analyses, please cite as:<br>
78-
*Kochems, J.; Werner, Y.; Giehl, J.; Grosse, B. et al. (2021): pommes-dispatch. A bottom-up fundamental power market model for the German electricity sector. https://github.com/pommes-public/pommes-dispatch, accessed YYYY-MM-DD.*
126+
We furthermore recommend naming the version tag or the commit hash used for the sake of transparency and reproducibility.
79127

80-
We furthermore recommend to name the version tag or the commit hash used for the sake of transparancy and reproducibility.
128+
Also see the *CITATION.cff* file for citation information.
81129

82130
## License
83131
This software is licensed under MIT License.

config.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ control_parameters:
1616
demand_response_scenario: "50"
1717
save_production_results: True
1818
save_price_results: True
19+
write_lp_file: False
1920

2021
# 2) Set model optimization time and frequency
2122
time_parameters:
@@ -25,8 +26,8 @@ time_parameters:
2526

2627
# 3) Set input and output data paths
2728
input_output_parameters:
28-
path_folder_input: "../../../inputs/"
29-
path_folder_output: "../../../results/"
29+
path_folder_input: "./inputs/"
30+
path_folder_output: "./results/"
3031

3132
# 4) Set rolling horizon parameters (optional)
3233
rolling_horizon_parameters:

docs/api.rst

Lines changed: 0 additions & 35 deletions
This file was deleted.

0 commit comments

Comments
 (0)