Everyone is welcome to contribute to this project. Feel free to share your ideas to improve the dataset and make it more valuable to the power engineering community.
If you have found a bug or have a suggestion, please open an issue to discuss possible new developments with the community and developers.
If you can fix a problem or implement a new feature yourself, please read the following steps to learn how to submit your suggestions via pull requests:
- Create a fork using the "Fork" button in the repository. This creates a copy of the code under your GitHub user account and allows you to freely experiment with changes without affecting the original project (see GitHub docs for details).
- Clone your fork to your local disk, and add the base repository as a remote:
$ git clone https://github.com/<YOUR_GITHUB_USERNAME>/ieee118_power_flow_data.git $ cd ieee118_power_flow_data $ git remote add upstream https://github.com/evgenytsydenov/ieee118_power_flow_data.git
- Create a new branch to hold your development changes:
$ git checkout -b <BRANCH_NAME>
- Set up a development environment using poetry by running the following command:
or, if you prefer pip, create and activate virtual environment, and run the following command:
$ poetry install --with dev
$ pip install -r requirements-dev.txt
- Develop on your branch. Please follow the project considerations listed below.
- Once you finished developing, install pre-commit hooks:
add changed files and make a commit to record your changes locally:
$ pre-commit install
sync your code with the original repository:$ git add . $ git commit -m "Add: commit message"
push the changes to your account:$ git fetch upstream $ git rebase upstream/main
$ git push -u origin <BRANCH_NAME>
- Go to the webpage of your fork on GitHub, choose your branch, click on "Pull request" to send your changes for review (see GitHub docs for details). The title of your pull request should be a summary of its contribution.
- Your changes are now visible for everyone on the Pull requests page. We will review your pull request as soon as possible!
- Commit messages should have the following format: "<tag>: <message>", where <tag> is one of "Add", "Update" or "Fix".
- Branch names should be informative and snake_case formatted.
- All methods and classes should be documented. We try to adhere by the Google Python Style Guide.
- We use PEP8 (with max line length equal to 88) and check that the code is formatted with black.
Here is a list of topics that can be implemented to enhance the quality of the dataset (in descending order of priority):
- Bus voltage limits can be set from the JEAS-118 dataset. Currently, these values are hardcoded as 0.8 and 1.2 for
min_v_pu
andmax_v_pu
respectively to achieve the convergence of the OPF estimation. - Min limits of active output of optimized generators are currently set to zero to achieve the convergence of the OPF estimation. These limits can be set according to the NREL-118 data.
- The cost function used for the OPF task can be composed and added to reflect the unit commitment process used in the industry. Currently, the default cost function from PandaPower is used which aims to minimize the total generation.
- Transfer capability limits of lines and transformers seem unrealistic. Line and transformer types can be specified for more realistic estimation of their characteristics.
- Limits of reactive output of generators can be estimated more accurate with consideration of actual active output of generators. Currently, the limits are set from -0.3 to 0.7 of the max active output.
- Branch outages can be added as time series to simulate emergency failures or maintenance during the year. At present, all branches are always in service.
- Bus voltage limits can be set as time series to simulate the change of the operating limits over time.
- The NREL-118 dataset contains a lot of generator parameters (fuel price, emission rate, start cost, up and down time, speed and cost of ramp up and down, etc.) that can be used to solve the OPF task in a more realistic way.
- The JEAS-118 dataset contains information about angles of phase shifting transformers. These angles can be added to the power system model for more accurate transformer modeling.
- Limits of slack bus injections can be added as time series for more realistic simulation of external grid behavior.
- The
PLANT_MODE
parameter can be added to group generators per buses so that the power system model contains only one generator/plant per bus. - Memory consumption of parallel execution of OPF and PF (in workers) can be optimized by using the shared memory.
- Besides PandaPower, other solvers can be added for OPF and PF estimation.