thesis_intradayscheduling
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 (8.8%) to scientific vocabulary
Repository
Basic Info
- Host: GitHub
- Owner: paulinash
- License: mit
- Language: Jupyter Notebook
- Default Branch: main
- Size: 37.7 MB
Statistics
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
README.md
Intra-Day Scheduling of Residential PV Battery Systems
This repository contains the Python implementation for the master's thesis:
[Multi-Objective Optimization for Intra-Day Scheduling of Residential PV Battery Systems]
Author: Paulina Hering
Repository Structure
``` . ├── forecasting/ │ ├── createquantileforecasts.ipynb # Create quantile prosumption forecasts based on real-world data │ ├── convertforecasts.ipynb # Convert quantile forecasts to parametric form │ ├── getinfinitehorizonforecasts.ipynb # Convert quantile forecasts to parametric form for every starting hour │ ├── visualizeforecasts.ipynb # Visualize forecasts PDFs for every starting hour │ └── visualizedata.ipynb # Visualize forecasted PDFs
│ ├── data/ │ ├── groundtruth/ # Contains the ground-truth of prosumption of selected │ ├── electricitycosts # Contains electricity costs for selected time interval to include in future works
real-world example │ ├── quantileforecasts/ # Contains the quantile forecasts │ ├── parametricforecasts/ # Contains parametric forecasts for gaussian distribution and every starting hour │ └── parameters/ # Contains json files with params such as cost-function weights, battery specifications, ... │ └── optimization/ ├── inputdata.py # Load forecasts and parameters ├── experimenttracking.py # Tracks the experiment in MLFlow ├── optimizationmodel.py # Contains the optimization problem ├── intradayoptimizationmodel.py # Contains the optimization problem for intra-Day run ├── epsilonconstoptimizationmodel.py # Contains the optimization problem for Intra-Day in epsilon constraint form ├── intradaysolve.py # Contains functions that handle the structure of Intra-Day Scheduling ├── visualizecosts.py # Manually takes cost values and plots results ├── main.py # Executes the optimization problem ├── resultsprocessing.py # Visualizes the results ├── intradayresultsprocessing.py # Visualizes results of Intra-Day run ├── paretofront.py # Runs consecutive and MOO runs and plots pareto fronts ├── intraday_utils.py # Contains utility functions for Intra-Day functionality └── utils.py # Contains utility functions such as parametric pdf implementations
```
Installation
- Install virtualenv
pip install virtualenv - Create a Virtual Environment
virtualenv myenv - Activate the Virtual Environment
source myenv/Scripts/activate - Install Packages specified in requirements-optimization.txt
python -m pip install -r requirements-optimization.txtFurthermore, ensure that IPOPT is properly installed. For more information, see IPOPT
Execution
In order to start an optimization process, execute main.py.
python optimization/main.py
Reproduce results
In order to reproduce the results shown in the paper, execute the optimization process with the corresponding parameter file. The necessary forecasts are included in the repository.
To run Intra-Day Scheduling set intradayapproach=True in main.py.
To run and plot 3D Pareto fronts set multipleparetofronts=True in main.py
Both Intra-Day Scheduling and 3D Pareto fronts can be run for any resolution (timeslots=[4,10] corresponds to scheduling at 6am (Day-Ahead), 10am and 8pm. Can be up to timeslots=time_slots = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23], Be aware that the cost values are only sensible for an hourly resolution [1,2,3...,23])
Day 1, Day 2 and Day 3 in thesis correspond to timeframe1, timeframe2, timeframe3 in main.py. The weights for MOO approach can be set as weights=[gridweights, ssweights] in line 67 in main.py
In order to reproduce the forecasts, the following steps need to be done:
1. Install corresponding forecasting requirements
python -m pip install -r requirements-forecasting.txt
2. Execute createquantileforecasts.ipynb with the following specifications:
- The forecast were generated seeded using a system with the following specs, os, python version:
- Processor: Intel 13th Gen Core i9-13900
- Memory: 64 GB RAM
- Graphics: NVIDIA GeForce RTX 3090 (Driver Version: 555.42.02 / CUDA Version: 12.5)
- OS: Ubuntu 22.04.4 LTS
- PYTHON: 3.12.5
Owner
- Login: paulinash
- Kind: user
- Repositories: 1
- Profile: https://github.com/paulinash
Citation (CITATION.cff)
# This CITATION.cff file was generated with cffinit.
# Visit https://bit.ly/cffinit to generate yours today!
cff-version: 1.2.0
title: >-
Day-Ahead Battery Scheduling based on Mixed Random
Variables
message: >-
If you use this software, please cite it using the
metadata from this file.
type: software
authors:
- given-names: Janik
family-names: Pinter
email: janik.pinter@kit.edu
affiliation: Karlsruhe Institute of Technology (KIT)
orcid: 'https://orcid.org/0009-0000-4494-8416'
repository-code: 'https://github.com/JaMoPinter/Day-Ahead-Battery-Scheduling'
keywords:
- Day-Ahead Battery Scheduling
- Stochastic Optimization
- Prosumer Integration
- Mixed Random Variables
license: MIT
date-released: '2024-10-31'
GitHub Events
Total
- Member event: 1
- Push event: 25
- Create event: 2
Last Year
- Member event: 1
- Push event: 25
- Create event: 2
Dependencies
- Cython ==3.0.11
- Flask ==3.0.3
- Jinja2 ==3.1.4
- Mako ==1.3.5
- MarkupSafe ==2.1.5
- PyYAML ==6.0.2
- SQLAlchemy ==2.0.35
- Werkzeug ==3.0.4
- adagio ==0.2.6
- aiohappyeyeballs ==2.4.0
- aiohttp ==3.10.5
- aiosignal ==1.3.1
- alembic ==1.13.2
- annotated-types ==0.7.0
- appdirs ==1.4.4
- arch ==7.0.0
- attrs ==24.2.0
- autots ==0.6.15
- blinker ==1.8.2
- certifi ==2024.8.30
- charset-normalizer ==3.3.2
- click ==8.1.7
- cloudpickle ==3.0.0
- cmdstanpy ==1.2.4
- colorlog ==6.8.2
- contourpy ==1.3.0
- coreforecast ==0.0.12
- cycler ==0.12.1
- darts ==0.30.0
- dash ==2.18.1
- dash-core-components ==2.0.0
- dash-html-components ==2.0.0
- dash-table ==5.0.0
- dtaidistance ==2.3.12
- dtw-python ==1.5.3
- filelock ==3.16.1
- fonttools ==4.53.1
- frozenlist ==1.4.1
- fs ==2.4.16
- fsspec ==2024.9.0
- fugue ==0.9.1
- gluonts ==0.15.1
- greenlet ==3.1.0
- holidays ==0.57
- idna ==3.10
- importlib_resources ==6.4.5
- ipywidgets ==8.1.5
- itsdangerous ==2.2.0
- joblib ==1.4.2
- jsonschema ==4.23.0
- jsonschema-specifications ==2023.12.1
- jupyterlab_widgets ==3.0.13
- kiwisolver ==1.4.7
- lazy_loader ==0.4
- lightning-utilities ==0.11.7
- llvmlite ==0.43.0
- matplotlib ==3.9.2
- mne ==1.8.0
- mpmath ==1.3.0
- msgpack ==1.1.0
- multidict ==6.1.0
- networkx ==3.3
- neuralforecast ==1.7.5
- nfoursid ==1.0.1
- numba ==0.60.0
- numpy ==1.26.4
- nvidia-cublas-cu12 ==12.1.3.1
- nvidia-cuda-cupti-cu12 ==12.1.105
- nvidia-cuda-nvrtc-cu12 ==12.1.105
- nvidia-cuda-runtime-cu12 ==12.1.105
- nvidia-cudnn-cu12 ==9.1.0.70
- nvidia-cufft-cu12 ==11.0.2.54
- nvidia-curand-cu12 ==10.3.2.106
- nvidia-cusolver-cu12 ==11.4.5.107
- nvidia-cusparse-cu12 ==12.1.0.106
- nvidia-nccl-cu12 ==2.20.5
- nvidia-nvjitlink-cu12 ==12.6.68
- nvidia-nvtx-cu12 ==12.1.105
- optuna ==3.6.1
- pandas ==2.2.2
- patsy ==0.5.6
- pillow ==10.4.0
- plotly ==5.24.1
- pmdarima ==2.0.4
- polars ==1.7.1
- pooch ==1.8.2
- prophet ==1.1.5
- protobuf ==5.28.2
- pyaml ==24.7.0
- pyarrow ==17.0.0
- pycatch22 ==0.4.5
- pydantic ==2.9.2
- pydantic_core ==2.23.4
- pyod ==2.0.2
- pyparsing ==3.1.4
- pytorch-lightning ==2.4.0
- pytz ==2024.2
- ray ==2.37.0
- referencing ==0.35.1
- requests ==2.32.3
- retrying ==1.3.4
- rpds-py ==0.20.0
- scikit-base ==0.8.3
- scikit-learn ==1.5.2
- scikit-optimize ==0.10.2
- scikit-posthocs ==0.9.0
- scipy ==1.14.1
- seaborn ==0.13.2
- seasonal ==0.3.1
- setuptools ==73.0.1
- shap ==0.46.0
- skforecast ==0.13.0
- skpro ==2.5.1
- sktime ==0.33.0
- slicer ==0.0.8
- stanio ==0.5.1
- statsforecast ==1.7.8
- statsmodels ==0.14.3
- sympy ==1.13.3
- tbats ==1.1.3
- tenacity ==9.0.0
- tensorboardX ==2.6.2.2
- threadpoolctl ==3.5.0
- toolz ==0.12.1
- torch ==2.4.1
- torchmetrics ==1.4.2
- tqdm ==4.66.5
- triad ==0.9.8
- triton ==3.0.0
- tzdata ==2024.1
- u8darts ==0.30.0
- urllib3 ==2.2.3
- utilsforecast ==0.2.5
- wheel ==0.44.0
- widgetsnbextension ==4.0.13
- xarray ==2024.9.0
- xgboost ==2.1.1
- yarl ==1.11.1
- Cython ==3.0.11
- DateTime ==5.5
- Deprecated ==1.2.14
- Flask ==3.0.3
- GitPython ==3.1.43
- Jinja2 ==3.1.4
- Mako ==1.3.5
- Markdown ==3.6
- MarkupSafe ==2.1.5
- PyYAML ==6.0.1
- Pygments ==2.18.0
- Pyomo ==6.7.3
- SQLAlchemy ==2.0.31
- Werkzeug ==3.0.3
- adagio ==0.2.6
- aiohappyeyeballs ==2.4.3
- aiohttp ==3.10.10
- aiosignal ==1.3.1
- alembic ==1.13.2
- aniso8601 ==9.0.1
- appdirs ==1.4.4
- asttokens ==2.4.1
- attrs ==24.2.0
- blinker ==1.8.2
- cachetools ==5.4.0
- certifi ==2024.7.4
- charset-normalizer ==3.3.2
- click ==8.1.7
- cloudpickle ==3.0.0
- colorama ==0.4.6
- comm ==0.2.2
- contourpy ==1.2.1
- coreforecast ==0.0.13.1
- cycler ==0.12.1
- darts ==0.31.0
- databricks-sdk ==0.29.0
- debugpy ==1.8.1
- decorator ==5.1.1
- docker ==7.1.0
- entrypoints ==0.4
- executing ==2.0.1
- fastjsonschema ==2.20.0
- filelock ==3.16.1
- fonttools ==4.53.0
- frozenlist ==1.5.0
- fs ==2.4.16
- fsspec ==2024.10.0
- fugue ==0.9.1
- gitdb ==4.0.11
- google-auth ==2.32.0
- graphene ==3.3
- graphql-core ==3.2.3
- graphql-relay ==3.2.0
- greenlet ==3.0.3
- holidays ==0.59
- idna ==3.7
- importlib_metadata ==7.2.1
- ipykernel ==6.29.4
- ipython ==8.25.0
- itsdangerous ==2.2.0
- jedi ==0.19.1
- joblib ==1.4.2
- jsonschema ==4.23.0
- jsonschema-specifications ==2023.12.1
- jupyter_client ==8.6.2
- jupyter_core ==5.7.2
- kiwisolver ==1.4.5
- lightning-utilities ==0.11.8
- llvmlite ==0.43.0
- matplotlib ==3.9.0
- matplotlib-inline ==0.1.7
- mlflow ==2.16.1
- mlflow-skinny ==2.16.1
- mpmath ==1.3.0
- multidict ==6.1.0
- nbformat ==5.10.4
- nest-asyncio ==1.6.0
- networkx ==3.4.2
- nfoursid ==1.0.1
- numba ==0.60.0
- numpy ==1.26.4
- opentelemetry-api ==1.26.0
- opentelemetry-sdk ==1.26.0
- opentelemetry-semantic-conventions ==0.47b0
- packaging ==24.1
- pandas ==2.2.2
- parso ==0.8.4
- patsy ==0.5.6
- pillow ==10.3.0
- pip ==24.1.1
- platformdirs ==4.2.2
- plotly ==5.23.0
- ply ==3.11
- pmdarima ==2.0.4
- prompt_toolkit ==3.0.47
- propcache ==0.2.0
- protobuf ==5.27.3
- psutil ==5.9.8
- pure-eval ==0.2.2
- pyarrow ==15.0.2
- pyasn1 ==0.6.0
- pyasn1_modules ==0.4.0
- pyod ==2.0.2
- pyparsing ==3.1.2
- python-dateutil ==2.9.0.post0
- pytorch-lightning ==2.4.0
- pytz ==2024.1
- pyzmq ==26.0.3
- querystring-parser ==1.2.4
- referencing ==0.35.1
- requests ==2.32.3
- rpds-py ==0.20.0
- rsa ==4.9
- scikit-learn ==1.5.0
- scipy ==1.14.0
- setuptools ==70.0.0
- shap ==0.46.0
- six ==1.16.0
- slicer ==0.0.8
- smmap ==5.0.1
- sqlparse ==0.5.1
- stack-data ==0.6.3
- statsforecast ==1.7.8
- statsmodels ==0.14.4
- sympy ==1.13.1
- tbats ==1.1.3
- tenacity ==9.0.0
- tensorboardX ==2.6.2.2
- threadpoolctl ==3.5.0
- torch ==2.5.0
- torchmetrics ==1.5.1
- tornado ==6.4.1
- tqdm ==4.66.6
- traitlets ==5.14.3
- triad ==0.9.8
- typing_extensions ==4.12.2
- tzdata ==2024.1
- urllib3 ==2.2.2
- utilsforecast ==0.2.7
- waitress ==3.0.0
- wcwidth ==0.2.13
- wrapt ==1.16.0
- xarray ==2024.10.0
- xgboost ==2.1.2
- yarl ==1.17.0
- zipp ==3.19.2
- zope.interface ==6.4.post2