From 6e3064508425a689e98d11dd735b3b4ce9551c7f Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Tue, 12 Jul 2022 11:46:27 -0500 Subject: [PATCH] Allow v0.3 to read v0.2 instance files --- docs/format.md | 5 ++- docs/instances.md | 2 +- instances/test/case14-flex.json.gz | Bin 1852 -> 0 bytes src/UnitCommitment.jl | 1 + src/instance/migrate.jl | 38 ++++++++++++++++++ src/instance/read.jl | 1 + test/fixtures/case118-initcond.json.gz | Bin 24064 -> 24081 bytes test/fixtures/case14-flex.json.gz | Bin 0 -> 1867 bytes test/fixtures/case14-sub-hourly.json.gz | Bin 0 -> 1804 bytes test/fixtures/case14.json.gz | Bin 0 -> 1855 bytes test/fixtures/ucjl-0.2.json.gz | Bin 0 -> 1823 bytes test/fixtures/ucjl-0.3.json.gz | Bin 0 -> 1857 bytes test/import/egret_test.jl | 7 +--- test/instance/migrate_test.jl | 18 +++++++++ test/instance/read_test.jl | 4 +- test/model/formulations_test.jl | 6 +-- test/runtests.jl | 3 ++ .../methods/XavQiuWanThi19/filter_test.jl | 2 +- .../methods/XavQiuWanThi19/find_test.jl | 2 +- .../XavQiuWanThi19/sensitivity_test.jl | 8 ++-- test/transform/initcond_test.jl | 5 +-- test/transform/slice_test.jl | 2 +- test/usage.jl | 2 +- test/validation/repair_test.jl | 4 +- 24 files changed, 83 insertions(+), 27 deletions(-) delete mode 100644 instances/test/case14-flex.json.gz create mode 100644 src/instance/migrate.jl create mode 100644 test/fixtures/case14-flex.json.gz create mode 100644 test/fixtures/case14-sub-hourly.json.gz create mode 100644 test/fixtures/case14.json.gz create mode 100644 test/fixtures/ucjl-0.2.json.gz create mode 100644 test/fixtures/ucjl-0.3.json.gz create mode 100644 test/instance/migrate_test.jl diff --git a/docs/format.md b/docs/format.md index 86e7fb7..a537c58 100644 --- a/docs/format.md +++ b/docs/format.md @@ -24,7 +24,9 @@ Instances are specified by JSON files containing the following main sections: * Reserves * Contingencies -Each section is described in detail below. +Each section is described in detail below. See [case118/2017-01-01.json.gz][example] for a complete example. + +[example]: https://axavier.org/UnitCommitment.jl/0.3/instances/matpower/case118/2017-01-01.json.gz ### Parameters @@ -303,3 +305,4 @@ Current limitations * Only N-1 transmission contingencies are supported. Generator contingencies are not currently supported. * Time-varying minimum production amounts are not currently compatible with ramp/startup/shutdown limits. * Flexible ramping products can only be acquired under the `WanHob2016` formulation, which does not support spinning reserves. + diff --git a/docs/instances.md b/docs/instances.md index b8bfa24..67a81fc 100644 --- a/docs/instances.md +++ b/docs/instances.md @@ -9,7 +9,7 @@ suffix: . Instances ========= -UnitCommitment.jl provides a large collection of benchmark instances collected from the literature and converted to a [common data format](format.md). In some cases, as indicated below, the original instances have been extended, with realistic parameters, using data-driven methods. If you use these instances in your research, we request that you cite UnitCommitment.jl, as well as the original sources, as listed below. Benchmark instances can be loaded with `UnitCommitment.read_benchmark(name)`, as explained in the [usage section](usage.md). +UnitCommitment.jl provides a large collection of benchmark instances collected from the literature and converted to a [common data format](format.md). In some cases, as indicated below, the original instances have been extended, with realistic parameters, using data-driven methods. If you use these instances in your research, we request that you cite UnitCommitment.jl, as well as the original sources, as listed below. Benchmark instances can be loaded with `UnitCommitment.read_benchmark(name)`, as explained in the [usage section](usage.md). Instance files can also be [directly downloaded from our website](https://axavier.org/UnitCommitment.jl/0.3/instances/). ```{warning} The instances included in UC.jl are still under development and may change in the future. If you use these instances in your research, for reproducibility, you should specify what version of UC.jl they came from. diff --git a/instances/test/case14-flex.json.gz b/instances/test/case14-flex.json.gz deleted file mode 100644 index 8e88af333f8008fd8f0c2ac52be098e7be6a1b53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1852 zcmV-C2gCRuiwFov&ah$t17l%xWid1@W^846E^2dcZUEg{OK;mo5I)Dhf)H|W0cE?p zv(H|N^oasZ5yS?12y&oh+9p7e0!bxtgZ%dn?&Oq|QplaE&&#`2e$UFRPTQ)#%C*}2d-v?8Z6~z2P>bdM!0WoY z+^*Uj0j;X0O;+0u$m!jpZ*kRSk|>4m3U+Vy9Z$jYyZNS5pj`K^_3j;?^i`a-Y29u& z$z@igx6Qp_-YOJcCNL)4E!I4)v$GDaWbZ!p?r)s>Y&YkRGH>&=NSZcnw+{=v=r-3A z*i;{~`eFC-apBL)C)U;D*46W@i$INECea{pGqB1*!|v>9osc^n00K~vhiC;vws{T9 zws3D-^I+4xDR0vCCc!C1zRuf+oyC9?2)WDZLpdq=0Af<^X4|q9zRJsdy9wu`^V zxFdx+jfce2k9T5eUfd>K0AAmAOYelsZBZPQZ@R5Dv?T4L;joAHjeMU+vLe6EFY+R9 zZ@Uv*)N1jLc4ioNW|-~F0L#R=WtXewIoL)P2!M;vbJZN_nX#dG_C*njNy?i;(k8Fza(&+U)( z`9lu>4T_c>-*EU}ZrFXb4bR@F+$EH+$UgR1AMPUS5xxt8@cmh(myfChZKMl=$~>L- zc5kSAX=EJAYQG$g7-5`Nniv70qt})g(IUza{oVi_u@^+4It*1Q)DGIga9t&xP*Fmp zhLlhM#0Fy&#sp%3_?CQ{^OpBNN`7oSzzdX*&?V;4f_X?>lwkK=h}+4+h&z*?x&q~b2OII=z^2p1ICB!*XhMyRlP<|bX8Oz_B$bv z!&d0mHFhLfxw<9f4I%&A7pX%xZBJ}{XHO#BX4=!T?5Qv+>?zJ zO=Txx$L^-5^QVBB+>WE3u9{P*c{xQX4oO8a9vreNud&F2c4o}Er_1I5R^Le^uL6aB zi$-y4DKHQEfSDVSOEs1Wr_1IfYF@QR5dEtIG9_xC41fR&sEvxW!Dzw{l<7j)XsZ<~OFL1KSlWT5ov0fu?S`eD$nPxemZhCY!z}HNrJYEZEbX49ok(gd?SZA8$UQ9W zk)@sD)Vy$#JpD(9D=%Ita>~=si&%<8^7Qj!mZD8O{k*uM_zh1#FR~~m!qd--Es8Pl z^z)*ND(yV|y!fJOFt4DD$Jbt|d|l_O>_wB6P2T43v!tlf%U;RcGzb2zkf0^+vvQm5 z-Kq|5VSmZiY591wZuf3o_u$?CgGUchO#nK--DDl2t0McD*XerG2ljGZZOit+H{3`= qlr;4B*v@L|&R%= v"0.3" || _migrate_to_v03(json) + return +end + +function _migrate_to_v03(json) + # Migrate reserves + if json["Reserves"] !== nothing && + json["Reserves"]["Spinning (MW)"] !== nothing + amount = json["Reserves"]["Spinning (MW)"] + json["Reserves"] = DefaultOrderedDict(nothing) + json["Reserves"]["r1"] = DefaultOrderedDict(nothing) + json["Reserves"]["r1"]["Type"] = "spinning" + json["Reserves"]["r1"]["Amount (MW)"] = amount + for (gen_name, gen) in json["Generators"] + if gen["Provides spinning reserves?"] == true + gen["Reserve eligibility"] = ["r1"] + end + end + end +end diff --git a/src/instance/read.jl b/src/instance/read.jl index 90cb169..b50cdd5 100644 --- a/src/instance/read.jl +++ b/src/instance/read.jl @@ -80,6 +80,7 @@ function _read_json(path::String)::OrderedDict end function _from_json(json; repair = true) + _migrate(json) units = Unit[] buses = Bus[] contingencies = Contingency[] diff --git a/test/fixtures/case118-initcond.json.gz b/test/fixtures/case118-initcond.json.gz index fabcbc8f05c9055f83239b4efda7c2f7d639536c..c496914f9b79955ad2f170d29eb1aecd56c8ae8f 100644 GIT binary patch delta 23223 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 uR|kGWnP^MizcEf0xDV`Sq75V%EDKZ-wSR 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/ucjl-0.3.json.gz b/test/fixtures/ucjl-0.3.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..ec337a65324e886a86a843e724f65c0a1ba617b5 GIT binary patch literal 1857 zcmV-H2fp|piwFofn9X7U19f9+Y%MS@GcIa#Z*BnXT1#)+Mi4&Nzd{glNP%R#yR*+; ziu8#BO%cRKdnkIKW!fe{kpdq{-5~$HL)n%sawv}EsLi2D4)*SF`0eb>HxK#4$qYa9 zH%XN&(7!z4mR}3C+*dqc_|Fs>+LY(IAA`qO6b5>eQBA*K7HmFaEj6nk>m@b(1vh{TW{lZh9lPD&MEoy^B1k{`kmu zuk^SJ>LNL-;vhys@nj7-k=argo zUoIW#Fdpgf=_4IrxaJ%Y=@Y#EPQaEC|(Ie|{ zASw8PwlPv5BuP@B;D#gWFBjrX0>tJkA)1{mY!;J_pV)rJ0`3~*)9ftq!aD(BqzC(AsJN(3VBiDK5n0?Flnt%+Tf2BSGJ35J=teh@}`P2Ij04%=%25AH~9NViZT zXo!IW)gKs);lStOzNP^yz&Yxs07KQ9NQ5dV;k+WB!GJMffnypa_r69cJTe3|gOT`N zYY9YAIHwJf=cBMv8O1_6L8(Ke1}Vi!!mB_;#7V7t>m4=T6E2zTdFn&1lgt406JYPs_Giq_gv}LH=1%U8T)t ze=uczn*p4IO#oLe8_&Dp8r}_ zODwJ~^YZ<6pAEx_!Tg6M_Pc4ZxFO^XA^+op)G95Kyun`i*;lvnYJ2qX*gJ9}-1fAm zW!Y0}kmiv+^`t$~3AM$Ti536@#|8QTL?reOFu3sE0S3c3@&GFO=qEu35tLIpqOf*K znMi{sLUK>gh6ma^n6`8jAqHg12vNDHqozRS`>Z~5>!Tld-Y9;#-PomZmi*7K{IB&r_8Z}XJ^-vE`9b{{1w3?!~ZH8Y3KtGh3B3Jh^zxxL^18*fPGs)(8dMX zxw;!MJ5_`BU=N(32YWDEr0s6C+|TY#L~X%I8L_R?Fv5mZY1%u$0ATL`YLKNyNIXP_ zvv_Z?jn}q|Ppr*GP*11MNz}Yr1c8LC&OMzr2eA51B6%4o^jkElww3~U&=;?epM0J>(fC-FF$95xViDi|>fCSKw{uFGxJN~XLnyl#B!mQsI zFNhra>hdyOH0i~rktT-pIqUn71(EAm+BHi%k&#&1fu)_u8!YXHrJdk+mUhe1PS7w* zyJKl5=#r(~v$PYW#?l^G+6nGqX^$-JR87qbC&|-)aJcf~l`2ko`gsvc6_GssyqKlR zCZ2v?Tv7E6Pd_iRs7i#VpBGzH#lX|gi!Lg)^YruLi^{>ggfbpqTdDF*l`Ybjbz0O} zlf6r4d6``FQs%1O@#o+~S@JF|+H`BGI+((KpDvSPGg-G=Q`aqccVD9S5LE=Avzt}g vA*xqdQDE}#<9f9$+hQ{sra+xumsN9_ 0) # All units should have unknown initial conditions diff --git a/test/transform/slice_test.jl b/test/transform/slice_test.jl index b736d16..9985144 100644 --- a/test/transform/slice_test.jl +++ b/test/transform/slice_test.jl @@ -5,7 +5,7 @@ using UnitCommitment, LinearAlgebra, Cbc, JuMP, JSON, GZip @testset "slice" begin - instance = UnitCommitment.read_benchmark("test/case14") + instance = UnitCommitment.read("$FIXTURES/case14.json.gz") modified = UnitCommitment.slice(instance, 1:2) # Should update all time-dependent fields diff --git a/test/usage.jl b/test/usage.jl index 0cbf799..4b941f4 100644 --- a/test/usage.jl +++ b/test/usage.jl @@ -5,7 +5,7 @@ using UnitCommitment, LinearAlgebra, Cbc, JuMP, JSON @testset "usage" begin - instance = UnitCommitment.read_benchmark("test/case14") + instance = UnitCommitment.read("$FIXTURES/case14.json.gz") for line in instance.lines, t in 1:4 line.normal_flow_limit[t] = 10.0 end diff --git a/test/validation/repair_test.jl b/test/validation/repair_test.jl index 70e8751..d7e5663 100644 --- a/test/validation/repair_test.jl +++ b/test/validation/repair_test.jl @@ -4,11 +4,9 @@ using UnitCommitment, JSON, GZip, DataStructures -basedir = @__DIR__ - function parse_case14() return JSON.parse( - GZip.gzopen("$basedir/../../instances/test/case14.json.gz"), + GZip.gzopen("$FIXTURES/case14.json.gz"), dicttype = () -> DefaultOrderedDict(nothing), ) end