Merge branch 'dev' into akazachk/formulations

akazachk/formulations
Alinson S. Xavier 5 years ago
commit ba9e086bea

5
.gitattributes vendored

@ -1 +1,6 @@
* text=auto
*.bz2 diff=bz2
*.gz diff=gzip
*.tar diff=tar
*.tar.bz2 diff=tar-bz2
*.zip diff=zip

@ -1,14 +1,9 @@
name: Benchmark
on:
push:
paths-ignore:
- '**.csv'
- '**.md'
- '.git*'
- 'test/**'
on: push
jobs:
benchmark:
runs-on: [self-hosted, benchmark]
if: "contains(github.event.head_commit.message, '[benchmark]')"
timeout-minutes: 10080
steps:
- uses: actions/checkout@v1
@ -23,11 +18,11 @@ jobs:
- name: Upload logs
uses: actions/upload-artifact@v2
with:
name: logs
name: Logs
path: benchmark/results/*
- name: Upload tables & charts
uses: actions/upload-artifact@v2
with:
name: tables
name: Tables
path: benchmark/tables/*

@ -0,0 +1,11 @@
name: TagBot
on:
schedule:
- cron: 0 * * * *
jobs:
TagBot:
runs-on: ubuntu-latest
steps:
- uses: JuliaRegistries/TagBot@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}

@ -1,9 +1,28 @@
name: Tests
on: push
on:
push:
paths:
- '**.jl'
- '**.toml'
pull_request:
paths:
- '**.jl'
- '**.toml'
jobs:
test:
runs-on: self-hosted
runs-on: ${{ matrix.os }}
strategy:
matrix:
julia-version: ['1.3', '1.4', '1']
julia-arch: [x64, x86]
os: [ubuntu-latest, windows-latest, macOS-latest]
exclude:
- os: macOS-latest
julia-arch: x86
steps:
- uses: actions/checkout@v1
- name: Run unit tests
run: julia --project=@. -e 'using Pkg; Pkg.test("UnitCommitment")'
- uses: actions/checkout@v2
- uses: julia-actions/setup-julia@latest
with:
version: ${{ matrix.julia-version }}
- uses: julia-actions/julia-buildpkg@latest
- uses: julia-actions/julia-runtest@latest

2
.gitignore vendored

@ -3,6 +3,7 @@
*.lastrun
*.so
*.mps
*.ipynb
.ipy*
benchmark/results
benchmark/runs
@ -11,6 +12,5 @@ build
instances/**/*.json
instances/_source
local
docs
notebooks
TODO.md

@ -1,5 +1,11 @@
# UnitCommitment.jl
### Version 0.1.0 (November 6, 2020)
### Version 0.1.1 (Nov 16, 2020)
* Fixes to MATLAB and PGLIB-UC instances
* Add OR-LIB and Tejada19 instances
* Improve documentation
### Version 0.1.0 (Nov 6, 2020)
* Initial public release

@ -4,11 +4,12 @@
JULIA := julia --color=yes --project=@.
MKDOCS := ~/.local/bin/mkdocs
SRC_FILES := $(wildcard src/*.jl) $(wildcard test/*.jl)
VERSION := 0.1
build/sysimage.so: src/sysimage.jl Project.toml Manifest.toml
mkdir -p build
mkdir -p benchmark/results/test
cd benchmark; $(JULIA) --trace-compile=../build/precompile.jl run.jl test/case14.1.sol.json
$(JULIA) src/sysimage.jl
clean:
@ -18,14 +19,11 @@ docs:
$(MKDOCS) build -d ../docs/$(VERSION)/
rm ../docs/$(VERSION)/*.ipynb
docs-push:
rsync -avP docs/ isoron@axavier.org:/www/axavier.org/projects/UnitCommitment.jl/
install-deps-docs:
pip install --user mkdocs mkdocs-cinder python-markdown-math
test: build/sysimage.so
@echo Running tests...
cd test; $(JULIA) --sysimage ../build/sysimage.so runtests.jl | tee ../build/test.log
$(JULIA) --sysimage build/sysimage.so -e 'using Pkg; Pkg.test("UnitCommitment")' | tee build/test.log
.PHONY: docs docs-push build test
.PHONY: docs test

@ -88,9 +88,9 @@ version = "0.3.0"
[[Compat]]
deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "SHA", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"]
git-tree-sha1 = "48608f94f3e1a755f65e7ef34684675bb3653030"
git-tree-sha1 = "a706ff10f1cd8dab94f59fd09c0e657db8e77ff0"
uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
version = "3.21.0"
version = "3.23.0"
[[CompilerSupportLibraries_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
@ -100,9 +100,9 @@ version = "0.3.4+0"
[[DataStructures]]
deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
git-tree-sha1 = "db07bb22795762895b60e44d62b34b16c982a687"
git-tree-sha1 = "fb0aa371da91c1ff9dc7fbed6122d3e411420b9c"
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
version = "0.18.7"
version = "0.18.8"
[[Dates]]
deps = ["Printf"]
@ -135,10 +135,10 @@ uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
version = "0.8.3"
[[Documenter]]
deps = ["Base64", "Dates", "DocStringExtensions", "InteractiveUtils", "JSON", "LibGit2", "Logging", "Markdown", "REPL", "Test", "Unicode"]
git-tree-sha1 = "fb1ff838470573adc15c71ba79f8d31328f035da"
deps = ["Base64", "Dates", "DocStringExtensions", "IOCapture", "InteractiveUtils", "JSON", "LibGit2", "Logging", "Markdown", "REPL", "Test", "Unicode"]
git-tree-sha1 = "71e35e069daa9969b8af06cef595a1add76e0a11"
uuid = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
version = "0.25.2"
version = "0.25.3"
[[ForwardDiff]]
deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "NaNMath", "Random", "SpecialFunctions", "StaticArrays"]
@ -146,24 +146,6 @@ git-tree-sha1 = "1d090099fb82223abc48f7ce176d3f7696ede36d"
uuid = "f6369f11-7733-5829-9624-2563aa707210"
version = "0.10.12"
[[GLPK]]
deps = ["BinaryProvider", "Libdl", "MathOptInterface", "SparseArrays"]
git-tree-sha1 = "3420033e843e140d9237238d69937a5bc7292e5a"
uuid = "60bf3e95-4087-53dc-ae20-288a0d20c6a6"
version = "0.13.0"
[[GLPK_jll]]
deps = ["GMP_jll", "Libdl", "Pkg"]
git-tree-sha1 = "ccc855de74292e478d4278e3a6fdd8212f75e81e"
uuid = "e8aa6df9-e6ca-548a-97ff-1f85fc5b8b98"
version = "4.64.0+0"
[[GMP_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "15abc5f976569a1c9d651aff02f7222ef305eb2a"
uuid = "781609d7-10c4-51f6-84f2-b8444358ff6d"
version = "6.1.2+6"
[[GZip]]
deps = ["Libdl"]
git-tree-sha1 = "039be665faf0b8ae36e089cd694233f5dee3f7d6"
@ -176,6 +158,12 @@ git-tree-sha1 = "c7ec02c4c6a039a98a15f955462cd7aea5df4508"
uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3"
version = "0.8.19"
[[IOCapture]]
deps = ["Logging"]
git-tree-sha1 = "377252859f740c217b936cebcd918a44f9b53b59"
uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89"
version = "0.1.1"
[[IniFile]]
deps = ["Test"]
git-tree-sha1 = "098e4d2c533924c921f9f9847274f2ad89e018b8"
@ -187,9 +175,9 @@ deps = ["Markdown"]
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
[[JLLWrappers]]
git-tree-sha1 = "7cec881362e5b4e367ff0279dd99a06526d51a55"
git-tree-sha1 = "c70593677bbf2c3ccab4f7500d0f4dacfff7b75c"
uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210"
version = "1.1.2"
version = "1.1.3"
[[JSON]]
deps = ["Dates", "Mmap", "Parsers", "Unicode"]
@ -235,30 +223,30 @@ uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
[[MathOptInterface]]
deps = ["BenchmarkTools", "CodecBzip2", "CodecZlib", "JSON", "JSONSchema", "LinearAlgebra", "MutableArithmetics", "OrderedCollections", "SparseArrays", "Test", "Unicode"]
git-tree-sha1 = "5a1d631e0a9087d425e024d66b9c71e92e78fda8"
git-tree-sha1 = "4fd15565d1811be771e87a877f1e691a005d2b90"
uuid = "b8f27783-ece8-5eb3-8dc8-9495eed66fee"
version = "0.9.17"
version = "0.9.18"
[[MbedTLS]]
deps = ["Dates", "MbedTLS_jll", "Random", "Sockets"]
git-tree-sha1 = "426a6978b03a97ceb7ead77775a1da066343ec6e"
git-tree-sha1 = "1c38e51c3d08ef2278062ebceade0e46cefc96fe"
uuid = "739be429-bea8-5141-9913-cc70e7f3736d"
version = "1.0.2"
version = "1.0.3"
[[MbedTLS_jll]]
deps = ["Libdl", "Pkg"]
git-tree-sha1 = "c0b1286883cac4e2b617539de41111e0776d02e8"
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "0eef589dd1c26a3ac9d753fe1a8bcad63f956fa6"
uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"
version = "2.16.8+0"
version = "2.16.8+1"
[[Mmap]]
uuid = "a63ad114-7e13-5084-954f-fe012c677804"
[[MutableArithmetics]]
deps = ["LinearAlgebra", "SparseArrays", "Test"]
git-tree-sha1 = "6cf09794783b9de2e662c4e8b60d743021e338d0"
git-tree-sha1 = "c14dea152799bd0376024e3c3c1c3a6cb06764c7"
uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0"
version = "0.2.10"
version = "0.2.11"
[[NaNMath]]
git-tree-sha1 = "c84c576296d0e2fbb3fc134d3e09086b3ea617cd"
@ -278,9 +266,9 @@ uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e"
version = "0.5.3+4"
[[OrderedCollections]]
git-tree-sha1 = "16c08bf5dba06609fe45e30860092d6fa41fde7b"
git-tree-sha1 = "cf59cfed2e2c12e8a2ff0a4f1e9b2cd8650da6db"
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
version = "1.3.1"
version = "1.3.2"
[[Osi_jll]]
deps = ["CoinUtils_jll", "CompilerSupportLibraries_jll", "Libdl", "OpenBLAS32_jll", "Pkg"]
@ -290,9 +278,9 @@ version = "0.108.5+3"
[[PackageCompiler]]
deps = ["Libdl", "Pkg", "UUIDs"]
git-tree-sha1 = "98aa9c653e1dc3473bb5050caf8501293db9eee1"
git-tree-sha1 = "3eee77c94646163f15bd8626acf494360897f890"
uuid = "9b87118b-4619-50d2-8e1e-99f35a4d4d9d"
version = "1.2.1"
version = "1.2.3"
[[Parsers]]
deps = ["Dates"]
@ -316,12 +304,6 @@ uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
deps = ["Serialization"]
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
[[Requires]]
deps = ["UUIDs"]
git-tree-sha1 = "28faf1c963ca1dc3ec87f166d92982e3c4a1f66d"
uuid = "ae029012-a4dd-5104-9daa-d747884805df"
version = "1.1.0"
[[SHA]]
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
@ -347,9 +329,9 @@ version = "0.10.3"
[[StaticArrays]]
deps = ["LinearAlgebra", "Random", "Statistics"]
git-tree-sha1 = "016d1e1a00fabc556473b07161da3d39726ded35"
git-tree-sha1 = "da4cf579416c81994afd6322365d00916c79b8ae"
uuid = "90137ffa-7385-5640-81b9-e52037218182"
version = "0.12.4"
version = "0.12.5"
[[Statistics]]
deps = ["LinearAlgebra", "SparseArrays"]
@ -359,12 +341,6 @@ uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
deps = ["Distributed", "InteractiveUtils", "Logging", "Random"]
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
[[TimerOutputs]]
deps = ["Printf"]
git-tree-sha1 = "f458ca23ff80e46a630922c555d838303e4b9603"
uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f"
version = "0.5.6"
[[TranscodingStreams]]
deps = ["Random", "Test"]
git-tree-sha1 = "7c53c35547de1c5b9d46a4797cf6d8253807108c"

@ -1,18 +1,11 @@
# UnitCommitment.jl: Optimization Package for Security-Constrained Unit Commitment
# Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved.
# Released under the modified BSD license. See COPYING.md for more details.
name = "UnitCommitment"
uuid = "64606440-39ea-11e9-0f29-3303a1d3d877"
authors = ["Santos Xavier, Alinson <axavier@anl.gov>"]
repo = "https://github.com/ANL-CEEESA/UnitCommitment.jl"
version = "0.1.0"
version = "0.1.1"
[deps]
Cbc = "9961bab8-2fa3-5c5a-9d89-47fab24efd76"
DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
GLPK = "60bf3e95-4087-53dc-ae20-288a0d20c6a6"
GZip = "92fee26a-97fe-5a0c-ad85-20a5f3185b63"
JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
JuMP = "4076af6c-e467-56ae-b986-b466b2749572"
@ -22,10 +15,21 @@ MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee"
OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
PackageCompiler = "9b87118b-4619-50d2-8e1e-99f35a4d4d9d"
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
Requires = "ae029012-a4dd-5104-9daa-d747884805df"
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
TimerOutputs = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f"
[compat]
Cbc = "0.7"
DataStructures = "0.18"
GZip = "0.5"
JSON = "0.21"
JuMP = "0.21"
MathOptInterface = "0.9"
PackageCompiler = "1"
julia = "1"
[extras]
Cbc = "9961bab8-2fa3-5c5a-9d89-47fab24efd76"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
[targets]
test = ["Cbc", "Test"]

@ -1,26 +1,44 @@
<a href="https://github.com/iSoron/UnitCommitment.jl/actions?query=workflow%3ATest+branch%3Adev"><img src="https://github.com/iSoron/UnitCommitment.jl/workflows/Tests/badge.svg"></img></a>
<a href="https://github.com/iSoron/UnitCommitment.jl/actions?query=workflow%3ABenchmark+branch%3Adev"><img src="https://github.com/iSoron/UnitCommitment.jl/workflows/Benchmark/badge.svg"></img></a>
<a href="https://github.com/ANL-CEEESA/UnitCommitment.jl/actions?query=workflow%3ATest+branch%3Adev"><img src="https://github.com/iSoron/UnitCommitment.jl/workflows/Tests/badge.svg"></img></a>
<a href="https://github.com/ANL-CEEESA/UnitCommitment.jl/actions?query=workflow%3ABenchmark+branch%3Adev+is%3Asuccess"><img src="https://github.com/iSoron/UnitCommitment.jl/workflows/Benchmark/badge.svg"></img></a>
<a href="https://doi.org/10.5281/zenodo.4269874"><img src="https://zenodo.org/badge/doi/10.5281/zenodo.4269874.svg" alt="DOI"></a>
# UnitCommitment.jl
**UnitCommitment.jl** is an optimization package for the Security-Constrained Unit Commitment Problem (SCUC), a fundamental optimization problem in power systems which is used, for example, to clear the day-ahead electricity markets. The problem asks for the most cost-effective power generation schedule under a number of physical, operational and economic constraints.
**UnitCommitment.jl** (UC.jl) is an optimization package for the Security-Constrained Unit Commitment Problem (SCUC), a fundamental optimization problem in power systems used, for example, to clear the day-ahead electricity markets. The package provides benchmark instances for the problem and JuMP implementations of state-of-the-art mixed-integer programming formulations.
### Package Components
* **Data Format:** The package proposes an extensible and fully-documented JSON-based data specification format for SCUC, developed in collaboration with Independent System Operators (ISOs), which describes the most important aspects of the problem.
* **Benchmark Instances:** The package provides a diverse collection of large-scale benchmark instances collected from the literature and extended to make them more challenging and realistic, based on publicly available data.
* **Data Format:** The package proposes an extensible and fully-documented JSON-based data specification format for SCUC, developed in collaboration with Independent System Operators (ISOs), which describes the most important aspects of the problem. The format supports all the most common generator characteristics (including ramping, piecewise-linear production cost curves and time-dependent startup costs), as well as operating reserves, price-sensitive loads, transmission networks and contingencies.
* **Benchmark Instances:** The package provides a diverse collection of large-scale benchmark instances collected from the literature and extended to make them more challenging and realistic.
* **Model Implementation**: The package provides a Julia/JuMP implementation of state-of-the-art formulations and solution methods for SCUC. Our goal is to keep this implementation up-to-date, as new methods are proposed in the literature.
* **Benchmark Tools:** The package provides automated benchmark scripts to accurately evaluate the performance impact of proposed code changes.
### Documentation
* [Installation Guide](https://axavier.org/projects/UnitCommitment.jl/install/)
* [Data Format Specification](https://axavier.org/projects/UnitCommitment.jl/format/)
* [Usage](https://anl-ceeesa.github.io/UnitCommitment.jl/0.1/usage/)
* [Data Format](https://anl-ceeesa.github.io/UnitCommitment.jl/0.1/format/)
* [Instances](https://anl-ceeesa.github.io/UnitCommitment.jl/0.1/instances/)
### Authors
* **Alinson Santos Xavier,** Argonne National Laboratory
* **Feng Qiu,** Argonne National Laboratory
* **Alinson Santos Xavier** (Argonne National Laboratory)
* **Feng Qiu** (Argonne National Laboratory)
### Acknowledgments
* We would like to thank **Aleksandr M. Kazachkov** (University of Florida), **Yonghong Chen** (Midcontinent Independent System Operator), **Feng Pan** (Pacific Northwest National Laboratory) for valuable feedback on early versions of this package.
* Based upon work supported by **Laboratory Directed Research and Development** (LDRD) funding from Argonne National Laboratory, provided by the Director, Office of Science, of the U.S. Department of Energy under Contract No. DE-AC02-06CH11357.
### Citing
If you use UnitCommitment.jl in your research, we request that you cite the package as follows:
* **Alinson S. Xavier, Feng Qiu**. "UnitCommitment.jl: A Julia/JuMP Optimization Package for Security-Constrained Unit Commitment". Zenodo (2020). [DOI: 10.5281/zenodo.4269874](https://doi.org/10.5281/zenodo.4269874).
If you make use of the provided instances files, we request that you additionally cite the original sources, as described in the [instances page](https://anl-ceeesa.github.io/UnitCommitment.jl/0.1/instances/).
### License
Released under the modified BSD license. See `LICENSE.md` for more details.
### Collaborators
* **Yonghong Chen,** Midcontinent Independent System Operator
* **Feng Pan,** Pacific Northwest National Laboratory

@ -13,56 +13,15 @@ results_dir := results_$(FORMULATION)
INSTANCES_PGLIB := \
pglib-uc/ca/2014-09-01_reserves_0 \
pglib-uc/ca/2014-09-01_reserves_1 \
pglib-uc/ca/2014-09-01_reserves_3 \
pglib-uc/ca/2014-09-01_reserves_5 \
pglib-uc/ca/2014-12-01_reserves_0 \
pglib-uc/ca/2014-12-01_reserves_1 \
pglib-uc/ca/2014-12-01_reserves_3 \
pglib-uc/ca/2014-12-01_reserves_5 \
pglib-uc/ca/2015-03-01_reserves_0 \
pglib-uc/ca/2015-03-01_reserves_1 \
pglib-uc/ca/2015-03-01_reserves_3 \
pglib-uc/ca/2015-03-01_reserves_5 \
pglib-uc/ca/2015-06-01_reserves_0 \
pglib-uc/ca/2015-06-01_reserves_1 \
pglib-uc/ca/2015-06-01_reserves_3 \
pglib-uc/ca/2015-06-01_reserves_5 \
pglib-uc/ca/Scenario400_reserves_0 \
pglib-uc/ca/Scenario400_reserves_1 \
pglib-uc/ca/Scenario400_reserves_3 \
pglib-uc/ca/Scenario400_reserves_5 \
pglib-uc/ferc/2015-01-01_hw \
pglib-uc/ferc/2015-01-01_lw \
pglib-uc/ferc/2015-02-01_hw \
pglib-uc/ferc/2015-02-01_lw \
pglib-uc/ferc/2015-03-01_hw \
pglib-uc/ferc/2015-03-01_lw \
pglib-uc/ferc/2015-04-01_hw \
pglib-uc/ferc/2015-04-01_lw \
pglib-uc/ferc/2015-05-01_hw \
pglib-uc/ferc/2015-05-01_lw \
pglib-uc/ferc/2015-06-01_hw \
pglib-uc/ferc/2015-06-01_lw \
pglib-uc/ferc/2015-07-01_hw \
pglib-uc/ferc/2015-07-01_lw \
pglib-uc/ferc/2015-08-01_hw \
pglib-uc/ferc/2015-08-01_lw \
pglib-uc/ferc/2015-09-01_hw \
pglib-uc/ferc/2015-09-01_lw \
pglib-uc/ferc/2015-10-01_hw \
pglib-uc/ferc/2015-10-01_lw \
pglib-uc/ferc/2015-11-02_hw \
pglib-uc/ferc/2015-11-02_lw \
pglib-uc/ferc/2015-12-01_hw \
pglib-uc/ferc/2015-12-01_lw \
pglib-uc/rts_gmlc/2020-01-27 \
pglib-uc/rts_gmlc/2020-02-09 \
pglib-uc/rts_gmlc/2020-03-05 \
pglib-uc/rts_gmlc/2020-04-03 \
pglib-uc/rts_gmlc/2020-05-05 \
pglib-uc/rts_gmlc/2020-06-09 \
pglib-uc/rts_gmlc/2020-07-06 \
pglib-uc/rts_gmlc/2020-08-12 \
pglib-uc/rts_gmlc/2020-09-20 \
pglib-uc/rts_gmlc/2020-10-27 \
pglib-uc/rts_gmlc/2020-11-25 \
@ -74,20 +33,12 @@ INSTANCES_MATPOWER := \
matpower/case300/2017-02-01 \
matpower/case300/2017-08-01 \
matpower/case1354pegase/2017-02-01 \
matpower/case1354pegase/2017-08-01 \
matpower/case1888rte/2017-02-01 \
matpower/case1888rte/2017-08-01 \
matpower/case1951rte/2017-02-01 \
matpower/case1951rte/2017-08-01 \
matpower/case2848rte/2017-02-01 \
matpower/case2848rte/2017-08-01 \
matpower/case2868rte/2017-02-01 \
matpower/case2868rte/2017-08-01 \
matpower/case3375wp/2017-02-01 \
matpower/case3375wp/2017-08-01 \
matpower/case6468rte/2017-02-01 \
matpower/case6468rte/2017-08-01 \
matpower/case6515rte/2017-02-01 \
matpower/case6515rte/2017-08-01
INSTANCES_INFORMS1 := \
@ -288,9 +239,36 @@ SOLUTIONS_INFORMS2 := $(foreach s,$(SAMPLES),$(addprefix $(results_dir)/,$(addsu
SOLUTIONS_INFORMS3 := $(foreach s,$(SAMPLES),$(addprefix $(results_dir)/,$(addsuffix .$(s).sol.json,$(INSTANCES_INFORMS3))))
SOLUTIONS_TEST := $(foreach s,$(SAMPLES),$(addprefix $(results_dir)/,$(addsuffix .$(s).sol.json,$(INSTANCES_TEST))))
.PHONY: tables save small large clean-mps matpower pglib informs1 informs2 informs3 test
.PHONY: tables save small large clean-mps matpower pglib informs1 informs2 informs3 test pglib orlib
all: matpower pglib
INSTANCES_ORLIB := \
or-lib/20_0_1_w \
or-lib/20_0_5_w \
or-lib/50_0_2_w \
or-lib/75_0_2_w \
or-lib/100_0_1_w \
or-lib/100_0_4_w \
or-lib/100_0_5_w \
or-lib/200_0_3_w \
or-lib/200_0_7_w \
or-lib/200_0_9_w
INSTANCES_TEJADA19 := \
tejada19/UC_24h_290g \
tejada19/UC_24h_623g \
tejada19/UC_24h_959g \
tejada19/UC_24h_1577g \
tejada19/UC_24h_1888g \
tejada19/UC_168h_72g \
tejada19/UC_168h_86g \
tejada19/UC_168h_130g \
tejada19/UC_168h_131g \
tejada19/UC_168h_199g
SOLUTIONS_ORLIB := $(foreach s,$(SAMPLES),$(addprefix results/,$(addsuffix .$(s).sol.json,$(INSTANCES_ORLIB))))
SOLUTIONS_TEJADA19 := $(foreach s,$(SAMPLES),$(addprefix results/,$(addsuffix .$(s).sol.json,$(INSTANCES_TEJADA19))))
all: matpower pglib orlib tejada19
matpower: $(SOLUTIONS_MATPOWER)
@ -302,14 +280,18 @@ informs3: $(SOLUTIONS_INFORMS3)
test: $(SOLUTIONS_TEST)
orlib: $(SOLUTIONS_ORLIB)
tejada19: $(SOLUTIONS_TEJADA19)
clean:
@rm -rf tables/benchmark* tables/compare* $(results_dir)
clean-mps:
@rm -fv $(results_dir)/*/*/*.mps.gz
@rm -fv results/*/*.mps.gz results/*/*/*.mps.gz
clean-sol:
@rm -rf $(results_dir)/*/*/*.sol.*
@rm -rf results/*/*.sol.* results/*/*/*.sol.*
save:
mkdir -p "runs/$(TIMESTAMP)"

@ -8,7 +8,7 @@ import seaborn as sns
import matplotlib.pyplot as plt
import sys
easy_cutoff = 120
#easy_cutoff = 120
b1 = pd.read_csv(sys.argv[1], index_col=0)
b2 = pd.read_csv(sys.argv[2], index_col=0)
@ -24,10 +24,10 @@ merged["Time diff (s)"] = merged["B Time (s)"] - merged["A Time (s)"]
merged["Value diff (%)"] = np.round((merged["B Value"] - merged["A Value"]) / merged["A Value"] * 100.0, 5)
merged.loc[merged.loc[:, "B Time (s)"] <= 0, "Speedup"] = float("nan")
merged.loc[merged.loc[:, "B Time (s)"] <= 0, "Time diff (s)"] = float("nan")
merged = merged[(merged["A Time (s)"] >= easy_cutoff) | (merged["B Time (s)"] >= easy_cutoff)]
#merged = merged[(merged["A Time (s)"] >= easy_cutoff) | (merged["B Time (s)"] >= easy_cutoff)]
merged.reset_index(inplace=True)
merged["Name"] = merged["Group"] + "/" + merged["Instance"]
merged = merged.sort_values(by="Speedup", ascending=False)
#merged = merged.sort_values(by="Speedup", ascending=False)
k = len(merged.groupby("Name"))

@ -9,7 +9,8 @@ from tabulate import tabulate
def process_all_log_files():
pathlist = Path(".").glob('results/*/*/*.log')
pathlist = list(Path(".").glob('results/*/*/*.log'))
pathlist += list(Path(".").glob('results/*/*.log'))
rows = []
for path in pathlist:
if ".ipy" in str(path):

@ -1,29 +1,53 @@
UnitCommitment.jl Instances
===========================
Instances
=========
UnitCommitment.jl provides a large collection of benchmark instances collected
from the literature and converted to a common data format. If you use these instances in your research, we request that you cite UnitCommitment.jl, as well as the original sources, as listed below. [See documentation for more details](https://anl-ceeesa.github.io/UnitCommitment.jl/).
References
----------
### PGLIB-UC
* Coffrin, Carleton and Knueven, Bernard. "Power Grid Lib - Unit Commitment". https://github.com/power-grid-lib/pglib-uc
### UnitCommitment.jl
* Knueven, Bernard, James Ostrowski, and Jean-Paul Watson. "On mixed integer programming formulations for the unit commitment problem." Pre-print available at http://www.optimization-online.org/DB_HTML/2018/11/6930.pdf (2018).
* [UCJL] **Alinson S. Xavier, Feng Qiu.** "UnitCommitment.jl: A Julia/JuMP Optimization Package for Security-Constrained Unit Commitment". Zenodo (2020). [DOI: 10.5281/zenodo.4269874](https://doi.org/10.5281/zenodo.4269874)
* Krall, Eric, Michael Higgins, and Richard P. ONeill. "RTO unit commitment test system." Federal Energy Regulatory Commission. Available: http://ferc.gov/legal/staff-reports/rto-COMMITMENT-TEST.pdf (2012).
### MATPOWER
* https://github.com/MATPOWER/matpower
* [MTPWR] **D. Zimmerman, C. E. Murillo-Sandnchez and R. J. Thomas.** "Matpower: Steady-state operations, planning, and analysis tools forpower systems research and education", IEEE Transactions on PowerSystems, vol. 26, no. 1, pp. 12 19, Feb. 2011. [DOI: 10.1109/TPWRS.2010.2051168](https://doi.org/10.1109/TPWRS.2010.2051168)
* [PSTCA] **University of Washington, Dept. of Electrical Engineering.** "Power Systems Test Case Archive". Available at: <http://www.ee.washington.edu/research/pstca/> (Accessed: Nov 14, 2020)
* [JoFlMa16] **C. Josz, S. Fliscounakis, J. Maeght, and P. Panciatici.** "AC Power Flow
Data in MATPOWER and QCQP Format: iTesla, RTE Snapshots, and PEGASE". [ArXiv (2016)](https://arxiv.org/abs/1603.01533).
* [FlPaCa13] **S. Fliscounakis, P. Panciatici, F. Capitanescu, and L. Wehenkel.**
"Contingency ranking with respect to overloads in very large power
systems taking into account uncertainty, preventive and corrective
actions", Power Systems, IEEE Trans. on, (28)4:4909-4917, 2013.
[DOI: 10.1109/TPWRS.2013.2251015](https://doi.org/10.1109/TPWRS.2013.2251015)
* R. D. Zimmerman, C. E. Murillo-Sanchez, and R. J. Thomas, "MATPOWER: Steady-State Operations, Planning and Analysis Tools for Power Systems Research and Education," Power Systems, IEEE Transactions on, vol. 26, no. 1, pp. 1219, Feb. 2011.
### PGLIB-UC
* [PGLIB] **Carleton Coffrin and Bernard Knueven.** "Power Grid Lib - Unit Commitment". Available at: <https://github.com/power-grid-lib/pglib-uc> (Accessed: Nov 14, 2020)
* C. Josz, S. Fliscounakis, J. Maeght, and P. Panciatici, "AC Power Flow Data in MATPOWER and QCQP Format: iTesla, RTE Snapshots, and PEGASE" https://arxiv.org/abs/1603.01533
* [KrHiOn12] **Eric Krall, Michael Higgins and Richard P. ONeill.** "RTO unit commitment test system." Federal Energy Regulatory Commission. Available at: <https://www.ferc.gov/industries-data/electric/power-sales-and-markets/increasing-efficiency-through-improved-software-1> (Accessed: Nov 14, 2020)
* S. Fliscounakis, P. Panciatici, F. Capitanescu, and L. Wehenkel, "Contingency ranking with respect to overloads in very large power systems taking into account uncertainty, preventive and corrective actions", Power Systems, IEEE Trans. on, (28)4:4909-4917, 2013. https://doi.org/10.1109/TPWRS.2013.2251015
* [KnOsWa20] **Bernard Knueven, James Ostrowski and Jean-Paul Watson.** "On Mixed-Integer Programming Formulations for the Unit Commitment Problem". INFORMS Journal on Computing (2020). [DOI: 10.1287/ijoc.2019.0944](https://doi.org/10.1287/ijoc.2019.0944)
### RTS-GMLC
* https://github.com/GridMod/RTS-GMLC
* Barrows, Clayton, Aaron Bloom, Ali Ehlen, Jussi Ikaheimo, Jennie Jorgenson, Dheepak Krishnamurthy, Jessica Lau et al. "The IEEE Reliability Test System: A Proposed 2019 Update." IEEE Transactions on Power Systems (2019).
* [BaBlEh19] **Clayton Barrows, Aaron Bloom, Ali Ehlen, Jussi Ikaheimo, Jennie Jorgenson, Dheepak Krishnamurthy, Jessica Lau et al.** "The IEEE Reliability Test System: A Proposed 2019 Update." IEEE Transactions on Power Systems (2019). [DOI: 10.1109/TPWRS.2019.2925557](https://doi.org/10.1109/TPWRS.2019.2925557)
### OR-LIB
* [ORLIB] **J.E.Beasley.** "OR-Library: distributing test problems by electronic mail", Journal of the Operational Research Society 41(11) (1990). [DOI: 10.2307/2582903](https://doi.org/10.2307/2582903)
* [FrGe06] **A. Frangioni, C. Gentile.** "Solving nonlinear single-unit commitment problems with ramping constraints" Operations Research 54(4), p. 767 - 775, 2006. [DOI: 10.1287/opre.1060.0309](https://doi.org/10.1287/opre.1060.0309)
### Tejada19
* [TeLuSa19] **D. A. Tejada-Arango, S. Lumbreras, P. Sanchez-Martin and A. Ramos.** "Which Unit-Commitment Formulation is Best? A Systematic Comparison," in IEEE Transactions on Power Systems. [DOI: 10.1109/TPWRS.2019.2962024](https://ieeexplore.ieee.org/document/8941313/).

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save