Skip to content

Commit

Permalink
Add files for joss submission
Browse files Browse the repository at this point in the history
  • Loading branch information
phumthep committed Oct 26, 2024
1 parent 782b50a commit 5da157e
Show file tree
Hide file tree
Showing 4 changed files with 320 additions and 0 deletions.
24 changes: 24 additions & 0 deletions .github/workflows/joss_draft.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: JOSS draft
on: [push]

jobs:
paper:
runs-on: ubuntu-latest
name: Paper Draft
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build draft PDF
uses: openjournals/openjournals-draft-action@master
with:
journal: joss
# This should be the path to the paper within your repo.
paper-path: joss_submission/paper.md
- name: Upload
uses: actions/upload-artifact@v4
with:
name: paper
# This is the output path where Pandoc will write the compiled
# PDF. Note, this should be the same directory as the input
# paper.md
path: joss_submission/paper.pdf
Binary file added joss_submission/overview_pownet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
236 changes: 236 additions & 0 deletions joss_submission/paper.bib
Original file line number Diff line number Diff line change
@@ -0,0 +1,236 @@
@article{garver1962threebin,
title={Power generation scheduling by integer programming-development of theory},
author={Garver, Len L},
journal={Transactions of the American Institute of Electrical Engineers. Part III: Power Apparatus and Systems},
volume={81},
number={3},
pages={730--734},
year={1962},
publisher={IEEE}
}
@article{horsch2018linear,
title={Linear optimal power flow using cycle flows},
author={H{\"o}rsch, Jonas and Ronellenfitsch, Henrik and Witthaut, Dirk and Brown, Tom},
journal={Electric Power Systems Research},
volume={158},
pages={126--135},
year={2018},
publisher={Elsevier}
}
@article{knueven2020mixed,
title={On mixed-integer programming formulations for the unit commitment problem},
author={Knueven, Bernard and Ostrowski, James and Watson, Jean-Paul},
journal={INFORMS Journal on Computing},
volume={32},
number={4},
pages={857--876},
year={2020},
publisher={INFORMS}
}
@article{koh2022hard,
title={Hard-coupling water and power system models increases the complementarity of renewable energy sources},
author={Koh, Rachel and Kern, Jordan and Galelli, Stefano},
journal={Applied Energy},
volume={321},
pages={119386},
year={2022},
publisher={Elsevier}
}
@article{galelli2022opportunities,
title={Opportunities to curb hydrological alterations via dam re-operation in the Mekong},
author={Galelli, Stefano and Dang, Thanh Duc and Ng, Jia Yi and Chowdhury, AFM Kamal and Arias, Mauricio E},
journal={Nature Sustainability},
volume={5},
number={12},
pages={1058--1069},
year={2022},
publisher={Nature Publishing Group UK London}
}
@article{chowdhury2020expected,
title={Expected benefits of Laos’ hydropower development curbed by hydroclimatic variability and limited transmission capacity: Opportunities to reform},
author={Chowdhury, AFM Kamal and Dang, Thanh Duc and Bagchi, Arijit and Galelli, Stefano},
journal={Journal of Water Resources Planning and Management},
volume={146},
number={10},
pages={05020019},
year={2020},
publisher={American Society of Civil Engineers}
}
@article{chowdhury2021greater,
title={The Greater Mekong's climate-water-energy nexus: How ENSO-triggered regional droughts affect power supply and CO2 emissions},
author={Chowdhury, AFM Kamal and Dang, Thanh Duc and Nguyen, Hung TT and Koh, Rachel and Galelli, Stefano},
journal={Earth's Future},
volume={9},
number={3},
pages={e2020EF001814},
year={2021},
publisher={Wiley Online Library}
}
@article{arnold2024floating,
title={Floating photovoltaics may reduce the risk of hydro-dominated energy development in Africa},
author={Arnold, Wyatt and Giuliani, Matteo and Castelletti, Andrea},
journal={Nature Energy},
pages={1--10},
year={2024},
publisher={Nature Publishing Group UK London}
}

@misc{openmod,
title = {Open Energy Modelling Initiative},
url = {https://openmod-initiative.org/},
year = {n.d.},
organization = {Open Energy Modelling Initiative},
note = {Accessed: October 9, 2024}
}
@article{groissbock2019open,
title={Are open source energy system optimization tools mature enough for serious use?},
author={Groissb{\"o}ck, Markus},
journal={Renewable and Sustainable Energy Reviews},
volume={102},
pages={234--248},
year={2019},
publisher={Elsevier}
}
@article{hofmann2023linopy,
title={Linopy: Linear optimization with n-dimensional labeled variables},
author={Hofmann, Fabian},
journal={Journal of Open Source Software},
volume={8},
number={84},
pages={4823},
year={2023}
}
@article{chen2016improving,
title={Improving large scale day-ahead security constrained unit commitment performance},
author={Chen, Yonghong and Casto, Aaron and Wang, Fengyu and Wang, Qianfan and Wang, Xing and Wan, Jie},
journal={IEEE Transactions on Power Systems},
volume={31},
number={6},
pages={4732--4743},
year={2016},
publisher={IEEE}
}
@article{su2020open,
title={An open source model for quantifying risks in bulk electric power systems from spatially and temporally correlated hydrometeorological processes},
author={Su, Yufei and Kern, Jordan D and Denaro, Simona and Hill, Joy and Reed, Patrick and Sun, Yina and Cohen, Jon and Characklis, Gregory W},
journal={Environmental Modelling \& Software},
volume={126},
pages={104667},
year={2020},
publisher={Elsevier}
}
@article{hoffmann2024review,
title={A review of mixed-integer linear formulations for framework-based energy system models},
author={Hoffmann, Maximilian and Schyska, Bruno U and Bartels, Julian and Pelser, Tristan and Behrens, Johannes and Wetzel, Manuel and Gils, Hans Christian and Tang, Chuen-Fung and Tillmanns, Marius and Stock, Jan and others},
journal={Advances in Applied Energy},
pages={100190},
year={2024},
publisher={Elsevier}
}
@article{tejada2019unit,
title={Which unit-commitment formulation is best? A comparison framework},
author={Tejada-Arango, Diego A and Lumbreras, Sara and S{\'a}nchez-Mart{\'\i}n, Pedro and Ramos, Andres},
journal={IEEE Transactions on Power Systems},
volume={35},
number={4},
pages={2926--2936},
year={2019},
publisher={IEEE}
}
@article{oberle2019open,
title={Are open access models able to assess today's energy scenarios?},
author={Oberle, Stella and Elsland, Rainer},
journal={Energy Strategy Reviews},
volume={26},
pages={100396},
year={2019},
publisher={Elsevier}
}
@article{oikonomou2022core,
title={Core process representation in power system operational models: Gaps, challenges, and opportunities for multisector dynamics research},
author={Oikonomou, Konstantinos and Tarroja, Brian and Kern, Jordan and Voisin, Nathalie},
journal={Energy},
volume={238},
pages={122049},
year={2022},
publisher={Elsevier}
}
@article{chen2022security,
title={Security-constrained unit commitment for electricity market: Modeling, solution methods, and future challenges},
author={Chen, Yonghong and Pan, Feng and Qiu, Feng and Xavier, Alinson S and Zheng, Tongxin and Marwali, Muhammad and Knueven, Bernard and Guan, Yongpei and Luh, Peter B and Wu, Lei and others},
journal={IEEE Transactions on Power Systems},
volume={38},
number={5},
pages={4668--4681},
year={2022},
publisher={IEEE}
}
@article{chowdhury2020pownet,
title={PowNet: a network-constrained unit commitment/economic dispatch model for large-scale power systems analysis},
author={Chowdhury, AFM Kamal and Kern, Jordan and Dang, Thanh Duc and Galelli, Stefano},
journal={Journal of Open Research Software},
volume={8},
number={1},
year={2020}
}
@misc{bunnak2024bridging,
author = {Bunnak, Phumthep and Coniglio, Stefano and Galelli, Stefano},
title = {Bridging Theory and Practice: Efficiently Solving the Unit Commitment Problem in Production Cost Models},
year = {2024},
note = {Available at SSRN 4918660}
}
@article{boyd2016power,
title={Power Sector Modeling 101},
author={Boyd, Erin},
journal={Department of Energy-Office of Energy Policy and Systems Analysis, February},
volume={18},
year={2016}
}
@misc{gams2023perf,
author = {Justine Broihan},
title = {Performance in Optimization Models: A Comparative Analysis of GAMS, Pyomo, GurobiPy, and JuMP},
url = {https://www.gams.com/blog/2023/07/performance-in-optimization-models-a-comparative-analysis-of-gams-pyomo-gurobipy-and-jump/},
year = {2023},
note = {Accessed: October 9, 2024}
}
@article{parzen2022opt,
title={Optimization solvers: the missing link for a fully open-source energy system modelling ecosystem},
author={Parzen, Maximilian and Hall, Julian and Jenkins, Jesse and Brown, Tom},
journal={mars},
year={2022}
}
@article{wilkinson2016fair,
title={{The FAIR Guiding Principles for scientific data management and stewardship}},
author={Wilkinson, Mark D and Dumontier, Michel and Aalbersberg, IJsbrand Jan and Appleton, Gabrielle and Axton, Myles and Baak, Arie and Blomberg, Niklas and Boiten, Jan-Willem and da Silva Santos, Luiz Bonino and Bourne, Philip E and others},
journal={Scientific data},
volume={3},
number={1},
pages={1--9},
year={2016},
publisher={Nature Publishing Group}
}
@article{akdemir2024open,
title={An open-source framework for balancing computational speed and fidelity in production cost models},
author={Akdemir, Kerem Ziya and Oikonomou, Konstantinos and Kern, Jordan D and Voisin, Nathalie and Ssembatya, Henry and Qian, Jingwei},
journal={Environmental Research: Energy},
volume={1},
number={1},
pages={015003},
year={2024},
publisher={IOP Publishing}
}
@article{lara2021pcm,
title={PowerSystems. jl—A power system data management package for large scale modeling},
author={Lara, Jos{\'e} Daniel and Barrows, Clayton and Thom, Daniel and Krishnamurthy, Dheepak and Callaway, Duncan},
journal={SoftwareX},
volume={15},
pages={100747},
year={2021},
publisher={Elsevier}
}
@article{brown2017pypsa,
title={PyPSA: Python for power system analysis},
author={Brown, Tom and H{\"o}rsch, Jonas and Schlachtberger, David},
journal={arXiv preprint arXiv:1707.09913},
year={2017}
}
60 changes: 60 additions & 0 deletions joss_submission/paper.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
---
title: 'PowNet 2.0: A production cost modeling framework for large-scale power systems'
tags:
- Python
- mathematical optimization
- unit commitment problem
- sensitivity analysis
authors:
- name: Phumthep Bunnak
orcid: 0000-0001-6412-7017
corresponding: true
affiliation: 1
- name: Hisham Eldardiry
orcid: 0000-0002-2932-7459
affiliation: 1
- name: Stefano Galelli
orcid: 0000-0003-2316-3243
affiliation: 1
affiliations:
- name: Cornell University, USA
index: 1
date: 6 October 2024
bibliography: paper.bib
---

# Summary

Managing the complex network of power stations and transmission lines that deliver electricity across large spatial domains (e.g., country and continental scale) requires a variety of mathematical models, most of which are formulated as mathematical optimization problems. Production Cost Models (PCM) are among the most common types of models found in the power systems literature; their task is for planning the short-term operation of generators [@garver1962threebin]. In contrast to other power system models, PCMs thus employ a simpler representation of power flow and do not account for long-term investment decisions for system components. `PowNet 2.0` is a Python-based production cost modeling framework that simulates and analyzes the most cost-effective way of meeting electricity demand using various electricity sources (coal, natural gas, and renewables) such that sufficient electricity is generated at each hour while considering factors like fuel prices, availability of renewables, and regulatory requirements.

The framework is designed to be accessible to a wide range of users, especially those with only basic Python knowledge. To use `PowNet 2.0`, a user can supply data on power stations, transmission lines, and electricity demand as spreadsheets and run a script to handle the complex calculations and produce modeling outputs as either data frames or spreadsheet files. While a basic user does not need to touch the codebase, an advanced user can instead leverage the software’s flexible and modular design for complex tasks like modeling the interaction between water and power systems or exploring customized algorithms.


# Statement of need

PCMs share similar features [@oikonomou2022core] and are widely used in both industry and academia. While proprietary options like `PLEXOS` and `PROMOD` offer comprehensive features and user-friendly interfaces, they do not follow the Findable, Accessible, Interoperable, and Reusable (FAIR) principles [@wilkinson2016fair ], which help us improve the transparency and applicability of models. Furthermore, the cost of proprietary PCMs can be prohibitive for many researchers and institutions. In response to these limitations, the open-source community has developed PCMs in various programming languages. Notable examples include `SIENNA`[@lara2021pcm], written in Julia, and Python-based frameworks like `PyPSA` [@brown2017pypsa], `Grid Operations`[@akdemir2024open], and `PowNet`[@chowdhury2020pownet]. A detailed taxonomy and comparison of different PCMs can be found in [@hoffmann2024review, @oberle2019open].

However, not all existing PCM frameworks have a full suite of features for addressing specific needs within the power systems domain: (1) the ability to efficiently handle large-scale systems with numerous nodes and edges, (2) the flexibility to incorporate diverse mathematical formulations and solution algorithms, (3) the capacity to generate stochastic input data for uncertainty analysis, and (4) the seamless integration of these functionalities.

`PowNet 2.0` is specifically designed to run multiple simulations of large-scale power systems. While sharing a similar name, `PowNet 2.0` represents a significant advancement over its predecessor, `PowNet`. Specifically, the new software has several desirable features that address the aforementioned needs:

**Modeling Framework**: `PowNet 2.0` leverages the Gurobipy package for building instances of the optimization problem. Gurobipy has a proven performance when compared to other Python-based modeling frameworks as shown in [@hofmann2023linopy, @gams2023perf]. Furthermore, Gurobipy allows a user to leverage the Python ecosystem by using popular libraries like Pandas, SciPy, and NetworkX.

**Mathematical Formulations**: Selecting a set of computationally efficient mathematical formulations is an on-going research [@tejada2019unit, @chen2022security]. The set of formulations implemented in `PowNet 2.0` was chosen based on thorough benchmarking exercises that compare the runtime of several different formulations [@knueven2020mixed, @horsch2018linear]. `PowNet 2.0` also allows a user to experiment with different formulations, such as representing the direct-current power flow with either the voltage-angle formulation or the Kirchhoff formulation.

**Solution Method**: `PowNet 2.0` supports both Gurobi and HiGHS as the mathematical solver. While Gurobi is a powerful commercial solver, its free usage is limited to an academic license. Consequently, HiGHs was chosen as an alternative due to its competitive performance among open-source solvers [@parzen2022opt]. Furthermore, a user can also explore solution methods like rounding heuristics [@bunnak2024bridging].

**Stochastic generation of input variables**: A user can automatically generate stochastic time series given a historical time series. Through this functionality, the user can then explore the impact of weather and climate on power system performance.

**Reservoir simulation**: A reservoir module simulates the operation of a cascade of reservoirs. This allows for a detailed modeling of hydropower availability given inflow data.


# Software Design, Implementation, and Validation

`PowNet 2.0` offers an end-to-end modeling framework through functionalities from generating synthetic time series to plotting the modeling outputs. The software is specifically designed to support power-water systems coupling, featuring a reservoir simulation module and the ability to modify modeling inputs at each simulation timestep.

![A simplified diagram of PowNet 2.0 modeling workflow. Each process is responsible by a dedicated Python module.\label{fig:workflow}](overview_pownet.png)

The modeling workflow of `PowNet 2.0` is illustrated in Figure\autoref{fig:workflow}. For each modeling task represented by a rectangle, there is a corresponding module to accomplish the task. This modular design facilitates unit testing of individual class objects and functions, ensuring code reliability and maintainability. It also enables future extension and customization, empowering users to adapt `PowNet 2.0` to their specific research needs and contribute to its ongoing development.

# References

0 comments on commit 5da157e

Please sign in to comment.