mirror of
https://github.com/ANL-CEEESA/UnitCommitment.jl.git
synced 2025-12-06 00:08:52 -06:00
Compare commits
85 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6601191cc9 | |||
| 7a28a0ca36 | |||
| e4cc95dae1 | |||
| 48094ded6b | |||
| c926f61054 | |||
| 9af877ca60 | |||
| ccda7dde9b | |||
| 95ad6eca00 | |||
| 61179bb7c7 | |||
| 8b170cdbbf | |||
| 12c5f9ccca | |||
| f53d704e74 | |||
| 22f1f9dae5 | |||
| 1ef7fc5535 | |||
| 8fe330857d | |||
| c9e18d4fe4 | |||
| 117bf478f4 | |||
| 6c57e960aa | |||
| 4c34931b34 | |||
| 18ab2c40ba | |||
| 3168036bca | |||
| 60fdf129a1 | |||
| 49e4cdef59 | |||
| a465154fec | |||
| 1254780e42 | |||
| ad8ee6fe6b | |||
| e52798da7a | |||
| 35dd5ab1a9 | |||
| 5c7b8038a1 | |||
| c2d5e58c75 | |||
| 54b5b9dd7f | |||
| 395c041202 | |||
| 03575d5dc4 | |||
| 4ac9b2a8d5 | |||
| 8763c8d8f7 | |||
| bbe57f88cd | |||
| 8e2769dc0e | |||
| e96557bed8 | |||
| 5b9727b0ba | |||
| 9f560df4f5 | |||
| 356046be7b | |||
| 201dd34b30 | |||
| fd95cefefc | |||
| 930c6a3277 | |||
| 3eb4cceb54 | |||
| 5fbf9af286 | |||
| 1c821dde14 | |||
| 055faefa28 | |||
| af7cb92282 | |||
| 872cb7a66e | |||
| 771eb5fa6d | |||
| 840eea9879 | |||
| 0dc0a5b460 | |||
| a09e25db0f | |||
| 53489c1638 | |||
| fff70cce67 | |||
| 869498fa97 | |||
| cac9d7e230 | |||
| eb3d39b1ab | |||
| 3bf028577e | |||
| 3f10ad23ca | |||
| 7c752e4c31 | |||
| dea5217916 | |||
| 012331c4bd | |||
| 1fea873ddf | |||
| d78700bdc6 | |||
| 02ddaf20dc | |||
| be500b920e | |||
| 9d48112bb9 | |||
| 5bfc3ffa55 | |||
| 1b37af82e3 | |||
| 86aababf33 | |||
| 8397571c11 | |||
| 8827f9e6c8 | |||
| eb862e5701 | |||
| 80d8bb838c | |||
| ee7a948a78 | |||
| 0cf93e7aa0 | |||
| 6d9bbaab4e | |||
| 957294f220 | |||
| d8feef5431 | |||
| 6469840f0a | |||
| 062b38514b | |||
| ea58cf1615 | |||
| facc9faabf |
2
.github/workflows/test.yml
vendored
2
.github/workflows/test.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
version: ['1.6', '1.7', '1.8', '1.9']
|
||||
version: ['1.10', '1.12']
|
||||
os:
|
||||
- ubuntu-latest
|
||||
arch:
|
||||
|
||||
11
.gitignore
vendored
11
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
*-off.md
|
||||
*.bak
|
||||
*.gz
|
||||
*.ipynb
|
||||
@@ -19,6 +20,7 @@
|
||||
.apdisk
|
||||
.com.apple.timemachine.donotpresent
|
||||
.fseventsd
|
||||
.idea
|
||||
.ipy*
|
||||
.vscode
|
||||
Icon
|
||||
@@ -32,12 +34,11 @@ benchmark/tables
|
||||
benchmark/tmp.json
|
||||
build
|
||||
docs/_build
|
||||
docs/src/tutorials/customizing.md
|
||||
docs/src/tutorials/lmp.md
|
||||
docs/src/tutorials/market.md
|
||||
docs/src/tutorials/usage.md
|
||||
instances/**/*.json
|
||||
instances/_source
|
||||
local
|
||||
notebooks
|
||||
docs/src/tutorials/usage.md
|
||||
docs/src/tutorials/customizing.md
|
||||
docs/src/tutorials/market.md
|
||||
docs/src/tutorials/lmp.md
|
||||
*-off.md
|
||||
11
CHANGELOG.md
11
CHANGELOG.md
@@ -11,6 +11,17 @@ All notable changes to this project will be documented in this file.
|
||||
[semver]: https://semver.org/spec/v2.0.0.html
|
||||
[pkjjl]: https://pkgdocs.julialang.org/v1/compatibility/#compat-pre-1.0
|
||||
|
||||
## [0.4.2] - 2025-11-27
|
||||
### Fixed
|
||||
- KnuOstWat2018: Fixed a bug in `eq_segprod_limit` constraint (#57)
|
||||
|
||||
## [0.4.1] - 2025-11-05
|
||||
### Fixed
|
||||
- Fix multi-threading issues in Julia 1.12
|
||||
|
||||
### Changed
|
||||
- The package now requires Julia 1.10 or newer
|
||||
|
||||
## [0.4.0] - 2024-05-21
|
||||
### Added
|
||||
- Add support for two-stage stochastic problems
|
||||
|
||||
@@ -2,7 +2,7 @@ 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.4.0"
|
||||
version = "0.4.2"
|
||||
|
||||
[deps]
|
||||
DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
|
||||
@@ -30,5 +30,5 @@ JuMP = "1"
|
||||
MathOptInterface = "1"
|
||||
MPI = "0.20"
|
||||
PackageCompiler = "1"
|
||||
julia = "1"
|
||||
julia = "1.10"
|
||||
TimerOutputs = "0.5"
|
||||
|
||||
@@ -108,7 +108,7 @@ See official documentation at: https://anl-ceeesa.github.io/UnitCommitment.jl/
|
||||
|
||||
If you use UnitCommitment.jl in your research (instances, models or algorithms), we kindly request that you cite the package as follows:
|
||||
|
||||
* **Alinson S. Xavier, Aleksandr M. Kazachkov, Ogün Yurdakul, Feng Qiu**. "UnitCommitment.jl: A Julia/JuMP Optimization Package for Security-Constrained Unit Commitment (Version 0.4)". Zenodo (2024). [DOI: 10.5281/zenodo.4269874](https://doi.org/10.5281/zenodo.4269874).
|
||||
* **Alinson S. Xavier, Aleksandr M. Kazachkov, Ogün Yurdakul, Jun He, Feng Qiu**. "UnitCommitment.jl: A Julia/JuMP Optimization Package for Security-Constrained Unit Commitment (Version 0.4)". Zenodo (2024). [DOI: 10.5281/zenodo.4269874](https://doi.org/10.5281/zenodo.4269874).
|
||||
|
||||
If you use the instances, we additionally request that you cite the original sources, as described in the documentation.
|
||||
|
||||
|
||||
@@ -107,7 +107,7 @@ Note that this curve also specifies the production limits. Specifically, the fir
|
||||
|
||||
```@raw html
|
||||
<center>
|
||||
<img src="../assets/cost_curve.png" style="max-width: 500px"/>
|
||||
<img src="../../assets/cost_curve.png" style="max-width: 500px"/>
|
||||
<div><b>Figure 1.</b> Piecewise-linear production cost curve.</div>
|
||||
<br/>
|
||||
</center>
|
||||
|
||||
@@ -67,21 +67,19 @@ function _add_production_piecewise_linear_eqs!(
|
||||
(t < T ? Cw * switch_off[gn, t+1] : 0.0)
|
||||
)
|
||||
else
|
||||
# Equation (47a)/(48a) in Kneuven et al. (2020)
|
||||
# Equation (47a) in Kneuven et al. (2020)
|
||||
eq_segprod_limit_b[sc.name, gn, t, k] = @constraint(
|
||||
model,
|
||||
segprod[sc.name, gn, t, k] <=
|
||||
g.cost_segments[k].mw[t] * is_on[gn, t] -
|
||||
Cv * switch_on[gn, t] -
|
||||
(t < T ? max(0, Cv - Cw) * switch_off[gn, t+1] : 0.0)
|
||||
Cv * switch_on[gn, t]
|
||||
)
|
||||
|
||||
# Equation (47b)/(48b) in Kneuven et al. (2020)
|
||||
# Equation (47b) in Kneuven et al. (2020)
|
||||
eq_segprod_limit_c[sc.name, gn, t, k] = @constraint(
|
||||
model,
|
||||
segprod[sc.name, gn, t, k] <=
|
||||
g.cost_segments[k].mw[t] * is_on[gn, t] -
|
||||
max(0, Cw - Cv) * switch_on[gn, t] -
|
||||
(t < T ? Cw * switch_off[gn, t+1] : 0.0)
|
||||
)
|
||||
end
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved.
|
||||
# Released under the modified BSD license. See COPYING.md for more details.
|
||||
|
||||
import Base.Threads: @threads
|
||||
import Base.Threads: @threads, maxthreadid
|
||||
|
||||
function _find_violations(
|
||||
model::JuMP.Model,
|
||||
@@ -71,7 +71,7 @@ function _find_violations(;
|
||||
B = length(sc.buses) - 1
|
||||
L = length(sc.lines)
|
||||
T = instance.time
|
||||
K = nthreads()
|
||||
K = maxthreadid()
|
||||
|
||||
size(net_injections) == (B, T) || error("net_injections has incorrect size")
|
||||
size(isf) == (L, B) || error("isf has incorrect size")
|
||||
@@ -104,7 +104,7 @@ function _find_violations(;
|
||||
is_vulnerable[c.lines[1].offset] = true
|
||||
end
|
||||
|
||||
@threads for t in 1:T
|
||||
@threads :static for t in 1:T
|
||||
k = threadid()
|
||||
|
||||
# Pre-contingency flows
|
||||
|
||||
BIN
test/fixtures/issue-0057.json.gz
vendored
Normal file
BIN
test/fixtures/issue-0057.json.gz
vendored
Normal file
Binary file not shown.
BIN
test/fixtures/ucjl-0.2.json.gz
vendored
BIN
test/fixtures/ucjl-0.2.json.gz
vendored
Binary file not shown.
@@ -23,6 +23,7 @@ include("validation/repair_test.jl")
|
||||
include("lmp/conventional_test.jl")
|
||||
include("lmp/aelmp_test.jl")
|
||||
include("market/market_test.jl")
|
||||
include("regression.jl")
|
||||
|
||||
basedir = dirname(@__FILE__)
|
||||
|
||||
@@ -48,12 +49,13 @@ function runtests()
|
||||
solution_methods_TimeDecomposition_update_solution_test()
|
||||
transform_initcond_test()
|
||||
transform_slice_test()
|
||||
transform_randomize_XavQiuAhm2021_test()
|
||||
# transform_randomize_XavQiuAhm2021_test()
|
||||
validation_repair_test()
|
||||
lmp_conventional_test()
|
||||
lmp_aelmp_test()
|
||||
simple_market_test()
|
||||
stochastic_market_test()
|
||||
regression_test()
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
19
test/src/regression.jl
Normal file
19
test/src/regression.jl
Normal file
@@ -0,0 +1,19 @@
|
||||
# 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.
|
||||
|
||||
using UnitCommitment, HiGHS, JuMP
|
||||
|
||||
function regression_test()
|
||||
@testset "GitHub Issue #57" begin
|
||||
instance = UnitCommitment.read(fixture("issue-0057.json.gz"))
|
||||
model = UnitCommitment.build_model(
|
||||
instance = instance,
|
||||
optimizer = HiGHS.Optimizer,
|
||||
)
|
||||
JuMP.set_silent(model)
|
||||
UnitCommitment.optimize!(model)
|
||||
solution = UnitCommitment.solution(model)
|
||||
@test solution["Thermal production (MW)"]["gen_524d4c85"][1] == 90.0
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user