Update 0.3 docs

docs
Alinson S. Xavier 3 years ago
parent e662657f5a
commit f666bfb110

@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 1d31fbd69bd2269dee001a3267a81abf
config: 4069571e79540a904b3ab7fdcf0bdc55
tags: d77d1c0d9ca2f4c8421862c7c5a0d620

@ -24,7 +24,7 @@ Instances are specified by JSON files containing the following main sections:
* Reserves
* Contingencies
Each section is described in detail below. For a complete example, see [case14](https://github.com/ANL-CEEESA/UnitCommitment.jl/tree/dev/instances/matpower/case14).
Each section is described in detail below.
### Parameters

@ -21,6 +21,7 @@
### Authors
* **Alinson S. Xavier** (Argonne National Laboratory)
* **Aleksandr M. Kazachkov** (University of Florida)
* **Ogün Yurdakul** (Technische Universität Berlin)
* **Feng Qiu** (Argonne National Laboratory)
### Acknowledgments
@ -35,7 +36,7 @@
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, 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).
* **Alinson S. Xavier, Aleksandr M. Kazachkov, Ogün Yurdakul, 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 use the instances, we additionally request that you cite the original sources, as described in the [instances page](instances.md).

@ -33,7 +33,7 @@ Because most MATPOWER test cases were originally designed for power flow studies
* **Contingencies** were set to include all N-1 transmission line contingencies that do not generate islands or isolated buses. More specifically, there is one contingency for each transmission line, as long as that transmission line is not a bridge in the network graph.
For each MATPOWER test case, UC.jl provides two variations (`2017-02-01` and `2017-08-01`) corresponding respectively to a winter and to a summer test case.
For each MATPOWER test case, UC.jl provides 364 variations (`2017-01-01` to `2017-12-30`) corresponding different days of the year.
### MATPOWER/UW-PSTCA
@ -41,11 +41,11 @@ A variety of smaller IEEE test cases, [compiled by University of Washington](htt
| Name | Buses | Generators | Lines | Contingencies | References |
|------|-------|------------|-------|---------------|--------|
| `matpower/case14/2017-02-01` | 14 | 5 | 20 | 19 | [MTPWR, PSTCA]
| `matpower/case30/2017-02-01` | 30 | 6 | 41 | 38 | [MTPWR, PSTCA]
| `matpower/case57/2017-02-01` | 57 | 7 | 80 | 79 | [MTPWR, PSTCA]
| `matpower/case118/2017-02-01` | 118 | 54 | 186 | 177 | [MTPWR, PSTCA]
| `matpower/case300/2017-02-01` | 300 | 69 | 411 | 320 | [MTPWR, PSTCA]
| `matpower/case14/2017-01-01` | 14 | 5 | 20 | 19 | [MTPWR, PSTCA]
| `matpower/case30/2017-01-01` | 30 | 6 | 41 | 38 | [MTPWR, PSTCA]
| `matpower/case57/2017-01-01` | 57 | 7 | 80 | 79 | [MTPWR, PSTCA]
| `matpower/case118/2017-01-01` | 118 | 54 | 186 | 177 | [MTPWR, PSTCA]
| `matpower/case300/2017-01-01` | 300 | 69 | 411 | 320 | [MTPWR, PSTCA]
### MATPOWER/Polish
@ -54,14 +54,14 @@ Test cases based on the Polish 400, 220 and 110 kV networks, originally provided
| Name | Buses | Generators | Lines | Contingencies | References |
|------|-------|------------|-------|---------------|--------|
| `matpower/case2383wp/2017-02-01` | 2383 | 323 | 2896 | 2240 | [MTPWR]
| `matpower/case2736sp/2017-02-01` | 2736 | 289 | 3504 | 3159 | [MTPWR]
| `matpower/case2737sop/2017-02-01` | 2737 | 267 | 3506 | 3161 | [MTPWR]
| `matpower/case2746wop/2017-02-01` | 2746 | 443 | 3514 | 3155 | [MTPWR]
| `matpower/case2746wp/2017-02-01` | 2746 | 457 | 3514 | 3156 | [MTPWR]
| `matpower/case3012wp/2017-02-01` | 3012 | 496 | 3572 | 2854 | [MTPWR]
| `matpower/case3120sp/2017-02-01` | 3120 | 483 | 3693 | 2950 | [MTPWR]
| `matpower/case3375wp/2017-02-01` | 3374 | 590 | 4161 | 3245 | [MTPWR]
| `matpower/case2383wp/2017-01-01` | 2383 | 323 | 2896 | 2240 | [MTPWR]
| `matpower/case2736sp/2017-01-01` | 2736 | 289 | 3504 | 3159 | [MTPWR]
| `matpower/case2737sop/2017-01-01` | 2737 | 267 | 3506 | 3161 | [MTPWR]
| `matpower/case2746wop/2017-01-01` | 2746 | 443 | 3514 | 3155 | [MTPWR]
| `matpower/case2746wp/2017-01-01` | 2746 | 457 | 3514 | 3156 | [MTPWR]
| `matpower/case3012wp/2017-01-01` | 3012 | 496 | 3572 | 2854 | [MTPWR]
| `matpower/case3120sp/2017-01-01` | 3120 | 483 | 3693 | 2950 | [MTPWR]
| `matpower/case3375wp/2017-01-01` | 3374 | 590 | 4161 | 3245 | [MTPWR]
### MATPOWER/PEGASE
@ -69,11 +69,11 @@ Test cases from the [Pan European Grid Advanced Simulation and State Estimation
| Name | Buses | Generators | Lines | Contingencies | References |
|------|-------|------------|-------|---------------|--------|
| `matpower/case89pegase/2017-02-01` | 89 | 12 | 210 | 192 | [JoFlMa16, FlPaCa13, MTPWR]
| `matpower/case1354pegase/2017-02-01` | 1354 | 260 | 1991 | 1288 | [JoFlMa16, FlPaCa13, MTPWR]
| `matpower/case2869pegase/2017-02-01` | 2869 | 510 | 4582 | 3579 | [JoFlMa16, FlPaCa13, MTPWR]
| `matpower/case9241pegase/2017-02-01` | 9241 | 1445 | 16049 | 13932 | [JoFlMa16, FlPaCa13, MTPWR]
| `matpower/case13659pegase/2017-02-01` | 13659 | 4092 | 20467 | 13932 | [JoFlMa16, FlPaCa13, MTPWR]
| `matpower/case89pegase/2017-01-01` | 89 | 12 | 210 | 192 | [JoFlMa16, FlPaCa13, MTPWR]
| `matpower/case1354pegase/2017-01-01` | 1354 | 260 | 1991 | 1288 | [JoFlMa16, FlPaCa13, MTPWR]
| `matpower/case2869pegase/2017-01-01` | 2869 | 510 | 4582 | 3579 | [JoFlMa16, FlPaCa13, MTPWR]
| `matpower/case9241pegase/2017-01-01` | 9241 | 1445 | 16049 | 13932 | [JoFlMa16, FlPaCa13, MTPWR]
| `matpower/case13659pegase/2017-01-01` | 13659 | 4092 | 20467 | 13932 | [JoFlMa16, FlPaCa13, MTPWR]
### MATPOWER/RTE
@ -81,14 +81,14 @@ Test cases from the R&D Division at [Reseau de Transport d'Electricite](https://
| Name | Buses | Generators | Lines | Contingencies | References |
|------|-------|------------|-------|---------------|--------|
| `matpower/case1888rte/2017-02-01` | 1888 | 296 | 2531 | 1484 | [MTPWR, JoFlMa16]
| `matpower/case1951rte/2017-02-01` | 1951 | 390 | 2596 | 1497 | [MTPWR, JoFlMa16]
| `matpower/case2848rte/2017-02-01` | 2848 | 544 | 3776 | 2242 | [MTPWR, JoFlMa16]
| `matpower/case2868rte/2017-02-01` | 2868 | 596 | 3808 | 2260 | [MTPWR, JoFlMa16]
| `matpower/case6468rte/2017-02-01` | 6468 | 1262 | 9000 | 6094 | [MTPWR, JoFlMa16]
| `matpower/case6470rte/2017-02-01` | 6470 | 1306 | 9005 | 6085 | [MTPWR, JoFlMa16]
| `matpower/case6495rte/2017-02-01` | 6495 | 1352 | 9019 | 6060 | [MTPWR, JoFlMa16]
| `matpower/case6515rte/2017-02-01` | 6515 | 1368 | 9037 | 6063 | [MTPWR, JoFlMa16]
| `matpower/case1888rte/2017-01-01` | 1888 | 296 | 2531 | 1484 | [MTPWR, JoFlMa16]
| `matpower/case1951rte/2017-01-01` | 1951 | 390 | 2596 | 1497 | [MTPWR, JoFlMa16]
| `matpower/case2848rte/2017-01-01` | 2848 | 544 | 3776 | 2242 | [MTPWR, JoFlMa16]
| `matpower/case2868rte/2017-01-01` | 2868 | 596 | 3808 | 2260 | [MTPWR, JoFlMa16]
| `matpower/case6468rte/2017-01-01` | 6468 | 1262 | 9000 | 6094 | [MTPWR, JoFlMa16]
| `matpower/case6470rte/2017-01-01` | 6470 | 1306 | 9005 | 6085 | [MTPWR, JoFlMa16]
| `matpower/case6495rte/2017-01-01` | 6495 | 1352 | 9019 | 6060 | [MTPWR, JoFlMa16]
| `matpower/case6515rte/2017-01-01` | 6515 | 1368 | 9037 | 6063 | [MTPWR, JoFlMa16]
PGLIB-UC Instances
@ -288,7 +288,7 @@ Tejada19
References
----------
* [UCJL] **Alinson S. Xavier, Aleksandr M. Kazachkov, 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)
* [UCJL] **Alinson S. Xavier, Aleksandr M. Kazachkov, Ogün Yurdakul, 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)
* [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)

@ -12,10 +12,10 @@ Usage
Installation
------------
UnitCommitment.jl was tested and developed with [Julia 1.6](https://julialang.org/). To install Julia, please follow the [installation guide on the official Julia website](https://julialang.org/downloads/platform.html). To install UnitCommitment.jl, run the Julia interpreter, type `]` to open the package manager, then type:
UnitCommitment.jl was tested and developed with [Julia 1.7](https://julialang.org/). To install Julia, please follow the [installation guide on the official Julia website](https://julialang.org/downloads/). To install UnitCommitment.jl, run the Julia interpreter, type `]` to open the package manager, then type:
```text
pkg> add UnitCommitment@0.2
pkg> add UnitCommitment@0.3
```
To test that the package has been correctly installed, run:

@ -54,7 +54,7 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left:
.highlight .nt { color: #204a87; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #000000 } /* Name.Variable */
.highlight .ow { color: #204a87; font-weight: bold } /* Operator.Word */
.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */
.highlight .w { color: #f8f8f8 } /* Text.Whitespace */
.highlight .mb { color: #0000cf; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */

@ -145,19 +145,6 @@
<!-- Source interaction buttons -->
<div class="dropdown-buttons-trigger">
<button id="dropdown-buttons-trigger" class="btn btn-secondary topbarbtn"
aria-label="Connect with source repository"><i class="fab fa-github"></i></button>
<div class="dropdown-buttons sourcebuttons">
<a class="repository-button"
href="https://github.com/ANL-CEEESA/UnitCommitment.jl/"><button type="button" class="btn btn-secondary topbarbtn"
data-toggle="tooltip" data-placement="left" title="Source repository"><i
class="fab fa-github"></i>repository</button></a>
</div>
</div>
<!-- Full screen (wrap in <a> to have style consistency -->
<a class="full-screen-button"><button type="button" class="btn btn-secondary topbarbtn" data-toggle="tooltip"
@ -334,7 +321,7 @@
<li><p>Reserves</p></li>
<li><p>Contingencies</p></li>
</ul>
<p>Each section is described in detail below. For a complete example, see <a class="reference external" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/tree/dev/instances/matpower/case14">case14</a>.</p>
<p>Each section is described in detail below.</p>
<div class="section" id="parameters">
<h3>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline"></a></h3>
<p>This section describes system-wide parameters, such as power balance penalty, and optimization parameters, such as the length of the planning horizon and the time.</p>
@ -366,12 +353,12 @@
</table>
<div class="section" id="example">
<h4>Example<a class="headerlink" href="#example" title="Permalink to this headline"></a></h4>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
<span class="nt">&quot;Parameters&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;Time horizon (h)&quot;</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span>
<span class="nt">&quot;Power balance penalty ($/MW)&quot;</span><span class="p">:</span> <span class="mf">1000.0</span><span class="p">,</span>
<span class="p">}</span>
<span class="p">}</span>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Parameters&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Time horizon (h)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Power balance penalty ($/MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">1000.0</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</pre></div>
</div>
</div>
@ -397,21 +384,21 @@
</table>
<div class="section" id="id1">
<h4>Example<a class="headerlink" href="#id1" title="Permalink to this headline"></a></h4>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
<span class="nt">&quot;Buses&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;b1&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;Load (MW)&quot;</span><span class="p">:</span> <span class="mf">0.0</span>
<span class="p">},</span>
<span class="nt">&quot;b2&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;Load (MW)&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="mf">26.01527</span><span class="p">,</span>
<span class="mf">24.46212</span><span class="p">,</span>
<span class="mf">23.29725</span><span class="p">,</span>
<span class="mf">22.90897</span>
<span class="p">]</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Buses&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;b1&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Load (MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">0.0</span><span class="w"></span>
<span class="w"> </span><span class="p">},</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;b2&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Load (MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"></span>
<span class="w"> </span><span class="mf">26.01527</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="mf">24.46212</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="mf">23.29725</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="mf">22.90897</span><span class="w"></span>
<span class="w"> </span><span class="p">]</span><span class="w"></span>
<span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</pre></div>
</div>
</div>
@ -516,32 +503,32 @@ Note that this curve also specifies the production limits. Specifically, the fir
</div>
<div class="section" id="id2">
<h4>Example<a class="headerlink" href="#id2" title="Permalink to this headline"></a></h4>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
<span class="nt">&quot;Generators&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;gen1&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;Bus&quot;</span><span class="p">:</span> <span class="s2">&quot;b1&quot;</span><span class="p">,</span>
<span class="nt">&quot;Production cost curve (MW)&quot;</span><span class="p">:</span> <span class="p">[</span><span class="mf">100.0</span><span class="p">,</span> <span class="mf">110.0</span><span class="p">,</span> <span class="mf">130.0</span><span class="p">,</span> <span class="mf">135.0</span><span class="p">],</span>
<span class="nt">&quot;Production cost curve ($)&quot;</span><span class="p">:</span> <span class="p">[</span><span class="mf">1400.0</span><span class="p">,</span> <span class="mf">1600.0</span><span class="p">,</span> <span class="mf">2200.0</span><span class="p">,</span> <span class="mf">2400.0</span><span class="p">],</span>
<span class="nt">&quot;Startup costs ($)&quot;</span><span class="p">:</span> <span class="p">[</span><span class="mf">300.0</span><span class="p">,</span> <span class="mf">400.0</span><span class="p">],</span>
<span class="nt">&quot;Startup delays (h)&quot;</span><span class="p">:</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">],</span>
<span class="nt">&quot;Ramp up limit (MW)&quot;</span><span class="p">:</span> <span class="mf">232.68</span><span class="p">,</span>
<span class="nt">&quot;Ramp down limit (MW)&quot;</span><span class="p">:</span> <span class="mf">232.68</span><span class="p">,</span>
<span class="nt">&quot;Startup limit (MW)&quot;</span><span class="p">:</span> <span class="mf">232.68</span><span class="p">,</span>
<span class="nt">&quot;Shutdown limit (MW)&quot;</span><span class="p">:</span> <span class="mf">232.68</span><span class="p">,</span>
<span class="nt">&quot;Minimum downtime (h)&quot;</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span>
<span class="nt">&quot;Minimum uptime (h)&quot;</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span>
<span class="nt">&quot;Initial status (h)&quot;</span><span class="p">:</span> <span class="mi">12</span><span class="p">,</span>
<span class="nt">&quot;Must run?&quot;</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
<span class="nt">&quot;Reserve eligibility&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;r1&quot;</span><span class="p">],</span>
<span class="p">},</span>
<span class="nt">&quot;gen2&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;Bus&quot;</span><span class="p">:</span> <span class="s2">&quot;b5&quot;</span><span class="p">,</span>
<span class="nt">&quot;Production cost curve (MW)&quot;</span><span class="p">:</span> <span class="p">[</span><span class="mf">0.0</span><span class="p">,</span> <span class="p">[</span><span class="mf">10.0</span><span class="p">,</span> <span class="mf">8.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">3.0</span><span class="p">]],</span>
<span class="nt">&quot;Production cost curve ($)&quot;</span><span class="p">:</span> <span class="p">[</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">],</span>
<span class="nt">&quot;Reserve eligibility&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;r1&quot;</span><span class="p">,</span> <span class="s2">&quot;r2&quot;</span><span class="p">],</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Generators&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;gen1&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Bus&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;b1&quot;</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Production cost curve (MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mf">100.0</span><span class="p">,</span><span class="w"> </span><span class="mf">110.0</span><span class="p">,</span><span class="w"> </span><span class="mf">130.0</span><span class="p">,</span><span class="w"> </span><span class="mf">135.0</span><span class="p">],</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Production cost curve ($)&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mf">1400.0</span><span class="p">,</span><span class="w"> </span><span class="mf">1600.0</span><span class="p">,</span><span class="w"> </span><span class="mf">2200.0</span><span class="p">,</span><span class="w"> </span><span class="mf">2400.0</span><span class="p">],</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Startup costs ($)&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mf">300.0</span><span class="p">,</span><span class="w"> </span><span class="mf">400.0</span><span class="p">],</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Startup delays (h)&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">],</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Ramp up limit (MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">232.68</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Ramp down limit (MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">232.68</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Startup limit (MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">232.68</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Shutdown limit (MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">232.68</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Minimum downtime (h)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Minimum uptime (h)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Initial status (h)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">12</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Must run?&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Reserve eligibility&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;r1&quot;</span><span class="p">],</span><span class="w"></span>
<span class="w"> </span><span class="p">},</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;gen2&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Bus&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;b5&quot;</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Production cost curve (MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mf">0.0</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="mf">10.0</span><span class="p">,</span><span class="w"> </span><span class="mf">8.0</span><span class="p">,</span><span class="w"> </span><span class="mf">0.0</span><span class="p">,</span><span class="w"> </span><span class="mf">3.0</span><span class="p">]],</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Production cost curve ($)&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mf">0.0</span><span class="p">,</span><span class="w"> </span><span class="mf">0.0</span><span class="p">],</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Reserve eligibility&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;r1&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;r2&quot;</span><span class="p">],</span><span class="w"></span>
<span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</pre></div>
</div>
</div>
@ -577,15 +564,15 @@ Note that this curve also specifies the production limits. Specifically, the fir
</table>
<div class="section" id="id3">
<h4>Example<a class="headerlink" href="#id3" title="Permalink to this headline"></a></h4>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
<span class="nt">&quot;Price-sensitive loads&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;p1&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;Bus&quot;</span><span class="p">:</span> <span class="s2">&quot;b3&quot;</span><span class="p">,</span>
<span class="nt">&quot;Revenue ($/MW)&quot;</span><span class="p">:</span> <span class="mf">23.0</span><span class="p">,</span>
<span class="nt">&quot;Demand (MW)&quot;</span><span class="p">:</span> <span class="mf">50.0</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Price-sensitive loads&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;p1&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Bus&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;b3&quot;</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Revenue ($/MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">23.0</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Demand (MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">50.0</span><span class="w"></span>
<span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</pre></div>
</div>
</div>
@ -641,19 +628,19 @@ Note that this curve also specifies the production limits. Specifically, the fir
</table>
<div class="section" id="id4">
<h4>Example<a class="headerlink" href="#id4" title="Permalink to this headline"></a></h4>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
<span class="nt">&quot;Transmission lines&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;l1&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;Source bus&quot;</span><span class="p">:</span> <span class="s2">&quot;b1&quot;</span><span class="p">,</span>
<span class="nt">&quot;Target bus&quot;</span><span class="p">:</span> <span class="s2">&quot;b2&quot;</span><span class="p">,</span>
<span class="nt">&quot;Reactance (ohms)&quot;</span><span class="p">:</span> <span class="mf">0.05917</span><span class="p">,</span>
<span class="nt">&quot;Susceptance (S)&quot;</span><span class="p">:</span> <span class="mf">29.49686</span><span class="p">,</span>
<span class="nt">&quot;Normal flow limit (MW)&quot;</span><span class="p">:</span> <span class="mf">15000.0</span><span class="p">,</span>
<span class="nt">&quot;Emergency flow limit (MW)&quot;</span><span class="p">:</span> <span class="mf">20000.0</span><span class="p">,</span>
<span class="nt">&quot;Flow limit penalty ($/MW)&quot;</span><span class="p">:</span> <span class="mf">5000.0</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Transmission lines&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;l1&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Source bus&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;b1&quot;</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Target bus&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;b2&quot;</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Reactance (ohms)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">0.05917</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Susceptance (S)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">29.49686</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Normal flow limit (MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">15000.0</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Emergency flow limit (MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">20000.0</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Flow limit penalty ($/MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">5000.0</span><span class="w"></span>
<span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</pre></div>
</div>
</div>
@ -689,29 +676,29 @@ Note that this curve also specifies the production limits. Specifically, the fir
</table>
<div class="section" id="example-1">
<h4>Example 1<a class="headerlink" href="#example-1" title="Permalink to this headline"></a></h4>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
<span class="nt">&quot;Reserves&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;r1&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;Type&quot;</span><span class="p">:</span> <span class="s2">&quot;spinning&quot;</span><span class="p">,</span>
<span class="nt">&quot;Amount (MW)&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="mf">57.30552</span><span class="p">,</span>
<span class="mf">53.88429</span><span class="p">,</span>
<span class="mf">51.31838</span><span class="p">,</span>
<span class="mf">50.46307</span>
<span class="p">],</span>
<span class="nt">&quot;Shortfall penalty ($/MW)&quot;</span><span class="p">:</span> <span class="mf">5.0</span>
<span class="p">},</span>
<span class="nt">&quot;r2&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;Type&quot;</span><span class="p">:</span> <span class="s2">&quot;flexiramp&quot;</span><span class="p">,</span>
<span class="nt">&quot;Amount (MW)&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="mf">20.31042</span><span class="p">,</span>
<span class="mf">23.65273</span><span class="p">,</span>
<span class="mf">27.41784</span><span class="p">,</span>
<span class="mf">25.34057</span>
<span class="p">],</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Reserves&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;r1&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;spinning&quot;</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Amount (MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"></span>
<span class="w"> </span><span class="mf">57.30552</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="mf">53.88429</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="mf">51.31838</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="mf">50.46307</span><span class="w"></span>
<span class="w"> </span><span class="p">],</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Shortfall penalty ($/MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">5.0</span><span class="w"></span>
<span class="w"> </span><span class="p">},</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;r2&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;flexiramp&quot;</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Amount (MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"></span>
<span class="w"> </span><span class="mf">20.31042</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="mf">23.65273</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="mf">27.41784</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="mf">25.34057</span><span class="w"></span>
<span class="w"> </span><span class="p">],</span><span class="w"></span>
<span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</pre></div>
</div>
</div>
@ -739,17 +726,17 @@ Note that this curve also specifies the production limits. Specifically, the fir
</table>
<div class="section" id="id5">
<h4>Example<a class="headerlink" href="#id5" title="Permalink to this headline"></a></h4>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
<span class="nt">&quot;Contingencies&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;c1&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;Affected lines&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;l1&quot;</span><span class="p">,</span> <span class="s2">&quot;l2&quot;</span><span class="p">,</span> <span class="s2">&quot;l3&quot;</span><span class="p">],</span>
<span class="nt">&quot;Affected generators&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;g1&quot;</span><span class="p">]</span>
<span class="p">},</span>
<span class="nt">&quot;c2&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;Affected lines&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;l4&quot;</span><span class="p">]</span>
<span class="p">},</span>
<span class="p">}</span>
<span class="p">}</span>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Contingencies&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;c1&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Affected lines&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;l1&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;l2&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;l3&quot;</span><span class="p">],</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Affected generators&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;g1&quot;</span><span class="p">]</span><span class="w"></span>
<span class="w"> </span><span class="p">},</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;c2&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Affected lines&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;l4&quot;</span><span class="p">]</span><span class="w"></span>
<span class="w"> </span><span class="p">},</span><span class="w"></span>
<span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</pre></div>
</div>
</div>
@ -759,10 +746,10 @@ Note that this curve also specifies the production limits. Specifically, the fir
<div class="section" id="time-series-parameters">
<h4>Time series parameters<a class="headerlink" href="#time-series-parameters" title="Permalink to this headline"></a></h4>
<p>Many numerical properties in the JSON file can be specified either as a single floating point number if they are time-independent, or as an array containing exactly <code class="docutils literal notranslate"><span class="pre">T</span></code> elements, if they are time-dependent, where <code class="docutils literal notranslate"><span class="pre">T</span></code> is the number of time steps in the planning horizon. For example, both formats below are valid when <code class="docutils literal notranslate"><span class="pre">T=3</span></code>:</p>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
<span class="nt">&quot;Load (MW)&quot;</span><span class="p">:</span> <span class="mf">800.0</span><span class="p">,</span>
<span class="nt">&quot;Load (MW)&quot;</span><span class="p">:</span> <span class="p">[</span><span class="mf">800.0</span><span class="p">,</span> <span class="mf">850.0</span><span class="p">,</span> <span class="mf">730.0</span><span class="p">]</span>
<span class="p">}</span>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Load (MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="mf">800.0</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">&quot;Load (MW)&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mf">800.0</span><span class="p">,</span><span class="w"> </span><span class="mf">850.0</span><span class="p">,</span><span class="w"> </span><span class="mf">730.0</span><span class="p">]</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</pre></div>
</div>
<p>The value <code class="docutils literal notranslate"><span class="pre">T</span></code> depends on both <code class="docutils literal notranslate"><span class="pre">Time</span> <span class="pre">horizon</span> <span class="pre">(h)</span></code> and <code class="docutils literal notranslate"><span class="pre">Time</span> <span class="pre">step</span> <span class="pre">(min)</span></code>, as the table below illustrates.</p>
@ -835,7 +822,7 @@ Note that this curve also specifies the production limits. Specifically, the fir
<div class="container">
<p>
&copy; Copyright 2020-2021, UChicago Argonne, LLC.<br/>
&copy; Copyright 2020-2022, UChicago Argonne, LLC.<br/>
</p>
</div>
</footer>

@ -126,19 +126,6 @@
<!-- Source interaction buttons -->
<div class="dropdown-buttons-trigger">
<button id="dropdown-buttons-trigger" class="btn btn-secondary topbarbtn"
aria-label="Connect with source repository"><i class="fab fa-github"></i></button>
<div class="dropdown-buttons sourcebuttons">
<a class="repository-button"
href="https://github.com/ANL-CEEESA/UnitCommitment.jl/"><button type="button" class="btn btn-secondary topbarbtn"
data-toggle="tooltip" data-placement="left" title="Source repository"><i
class="fab fa-github"></i>repository</button></a>
</div>
</div>
<!-- Full screen (wrap in <a> to have style consistency -->
<a class="full-screen-button"><button type="button" class="btn btn-secondary topbarbtn" data-toggle="tooltip"
@ -183,7 +170,7 @@
<div class="container">
<p>
&copy; Copyright 2020-2021, UChicago Argonne, LLC.<br/>
&copy; Copyright 2020-2022, UChicago Argonne, LLC.<br/>
</p>
</div>
</footer>

@ -144,19 +144,6 @@
<!-- Source interaction buttons -->
<div class="dropdown-buttons-trigger">
<button id="dropdown-buttons-trigger" class="btn btn-secondary topbarbtn"
aria-label="Connect with source repository"><i class="fab fa-github"></i></button>
<div class="dropdown-buttons sourcebuttons">
<a class="repository-button"
href="https://github.com/ANL-CEEESA/UnitCommitment.jl/"><button type="button" class="btn btn-secondary topbarbtn"
data-toggle="tooltip" data-placement="left" title="Source repository"><i
class="fab fa-github"></i>repository</button></a>
</div>
</div>
<!-- Full screen (wrap in <a> to have style consistency -->
<a class="full-screen-button"><button type="button" class="btn btn-secondary topbarbtn" data-toggle="tooltip"
@ -235,6 +222,7 @@
<ul class="simple">
<li><p><strong>Alinson S. Xavier</strong> (Argonne National Laboratory)</p></li>
<li><p><strong>Aleksandr M. Kazachkov</strong> (University of Florida)</p></li>
<li><p><strong>Ogün Yurdakul</strong> (Technische Universität Berlin)</p></li>
<li><p><strong>Feng Qiu</strong> (Argonne National Laboratory)</p></li>
</ul>
</div>
@ -250,7 +238,7 @@
<h3>Citing<a class="headerlink" href="#citing" title="Permalink to this headline"></a></h3>
<p>If you use UnitCommitment.jl in your research (instances, models or algorithms), we kindly request that you cite the package as follows:</p>
<ul class="simple">
<li><p><strong>Alinson S. Xavier, Aleksandr M. Kazachkov, Feng Qiu</strong>, “UnitCommitment.jl: A Julia/JuMP Optimization Package for Security-Constrained Unit Commitment”. Zenodo (2020). <a class="reference external" href="https://doi.org/10.5281/zenodo.4269874">DOI: 10.5281/zenodo.4269874</a>.</p></li>
<li><p><strong>Alinson S. Xavier, Aleksandr M. Kazachkov, Ogün Yurdakul, Feng Qiu</strong>, “UnitCommitment.jl: A Julia/JuMP Optimization Package for Security-Constrained Unit Commitment”. Zenodo (2020). <a class="reference external" href="https://doi.org/10.5281/zenodo.4269874">DOI: 10.5281/zenodo.4269874</a>.</p></li>
</ul>
<p>If you use the instances, we additionally request that you cite the original sources, as described in the <a class="reference internal" href="instances/"><span class="doc std std-doc">instances page</span></a>.</p>
</div>
@ -337,7 +325,7 @@ POSSIBILITY OF SUCH DAMAGE.
<div class="container">
<p>
&copy; Copyright 2020-2021, UChicago Argonne, LLC.<br/>
&copy; Copyright 2020-2022, UChicago Argonne, LLC.<br/>
</p>
</div>
</footer>

@ -145,19 +145,6 @@
<!-- Source interaction buttons -->
<div class="dropdown-buttons-trigger">
<button id="dropdown-buttons-trigger" class="btn btn-secondary topbarbtn"
aria-label="Connect with source repository"><i class="fab fa-github"></i></button>
<div class="dropdown-buttons sourcebuttons">
<a class="repository-button"
href="https://github.com/ANL-CEEESA/UnitCommitment.jl/"><button type="button" class="btn btn-secondary topbarbtn"
data-toggle="tooltip" data-placement="left" title="Source repository"><i
class="fab fa-github"></i>repository</button></a>
</div>
</div>
<!-- Full screen (wrap in <a> to have style consistency -->
<a class="full-screen-button"><button type="button" class="btn btn-secondary topbarbtn" data-toggle="tooltip"
@ -285,7 +272,7 @@
<li><p><strong>Minimum reserves</strong> were set to a fixed proportion of the total demand.</p></li>
<li><p><strong>Contingencies</strong> were set to include all N-1 transmission line contingencies that do not generate islands or isolated buses. More specifically, there is one contingency for each transmission line, as long as that transmission line is not a bridge in the network graph.</p></li>
</ul>
<p>For each MATPOWER test case, UC.jl provides two variations (<code class="docutils literal notranslate"><span class="pre">2017-02-01</span></code> and <code class="docutils literal notranslate"><span class="pre">2017-08-01</span></code>) corresponding respectively to a winter and to a summer test case.</p>
<p>For each MATPOWER test case, UC.jl provides 364 variations (<code class="docutils literal notranslate"><span class="pre">2017-01-01</span></code> to <code class="docutils literal notranslate"><span class="pre">2017-12-30</span></code>) corresponding different days of the year.</p>
<div class="section" id="matpower-uw-pstca">
<h3>MATPOWER/UW-PSTCA<a class="headerlink" href="#matpower-uw-pstca" title="Permalink to this headline"></a></h3>
<p>A variety of smaller IEEE test cases, <a class="reference external" href="http://labs.ece.uw.edu/pstca/">compiled by University of Washington</a>, corresponding mostly to small portions of the American Electric Power System in the 1960s.</p>
@ -300,35 +287,35 @@
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case14/2017-02-01</span></code></p></td>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case14/2017-01-01</span></code></p></td>
<td><p>14</p></td>
<td><p>5</p></td>
<td><p>20</p></td>
<td><p>19</p></td>
<td><p>[MTPWR, PSTCA]</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case30/2017-02-01</span></code></p></td>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case30/2017-01-01</span></code></p></td>
<td><p>30</p></td>
<td><p>6</p></td>
<td><p>41</p></td>
<td><p>38</p></td>
<td><p>[MTPWR, PSTCA]</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case57/2017-02-01</span></code></p></td>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case57/2017-01-01</span></code></p></td>
<td><p>57</p></td>
<td><p>7</p></td>
<td><p>80</p></td>
<td><p>79</p></td>
<td><p>[MTPWR, PSTCA]</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case118/2017-02-01</span></code></p></td>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case118/2017-01-01</span></code></p></td>
<td><p>118</p></td>
<td><p>54</p></td>
<td><p>186</p></td>
<td><p>177</p></td>
<td><p>[MTPWR, PSTCA]</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case300/2017-02-01</span></code></p></td>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case300/2017-01-01</span></code></p></td>
<td><p>300</p></td>
<td><p>69</p></td>
<td><p>411</p></td>
@ -352,56 +339,56 @@
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case2383wp/2017-02-01</span></code></p></td>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case2383wp/2017-01-01</span></code></p></td>
<td><p>2383</p></td>
<td><p>323</p></td>
<td><p>2896</p></td>
<td><p>2240</p></td>
<td><p>[MTPWR]</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case2736sp/2017-02-01</span></code></p></td>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case2736sp/2017-01-01</span></code></p></td>
<td><p>2736</p></td>
<td><p>289</p></td>
<td><p>3504</p></td>
<td><p>3159</p></td>
<td><p>[MTPWR]</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case2737sop/2017-02-01</span></code></p></td>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case2737sop/2017-01-01</span></code></p></td>
<td><p>2737</p></td>
<td><p>267</p></td>
<td><p>3506</p></td>
<td><p>3161</p></td>
<td><p>[MTPWR]</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case2746wop/2017-02-01</span></code></p></td>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case2746wop/2017-01-01</span></code></p></td>
<td><p>2746</p></td>
<td><p>443</p></td>
<td><p>3514</p></td>
<td><p>3155</p></td>
<td><p>[MTPWR]</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case2746wp/2017-02-01</span></code></p></td>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case2746wp/2017-01-01</span></code></p></td>
<td><p>2746</p></td>
<td><p>457</p></td>
<td><p>3514</p></td>
<td><p>3156</p></td>
<td><p>[MTPWR]</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case3012wp/2017-02-01</span></code></p></td>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case3012wp/2017-01-01</span></code></p></td>
<td><p>3012</p></td>
<td><p>496</p></td>
<td><p>3572</p></td>
<td><p>2854</p></td>
<td><p>[MTPWR]</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case3120sp/2017-02-01</span></code></p></td>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case3120sp/2017-01-01</span></code></p></td>
<td><p>3120</p></td>
<td><p>483</p></td>
<td><p>3693</p></td>
<td><p>2950</p></td>
<td><p>[MTPWR]</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case3375wp/2017-02-01</span></code></p></td>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case3375wp/2017-01-01</span></code></p></td>
<td><p>3374</p></td>
<td><p>590</p></td>
<td><p>4161</p></td>
@ -425,35 +412,35 @@
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case89pegase/2017-02-01</span></code></p></td>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case89pegase/2017-01-01</span></code></p></td>
<td><p>89</p></td>
<td><p>12</p></td>
<td><p>210</p></td>
<td><p>192</p></td>
<td><p>[JoFlMa16, FlPaCa13, MTPWR]</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case1354pegase/2017-02-01</span></code></p></td>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case1354pegase/2017-01-01</span></code></p></td>
<td><p>1354</p></td>
<td><p>260</p></td>
<td><p>1991</p></td>
<td><p>1288</p></td>
<td><p>[JoFlMa16, FlPaCa13, MTPWR]</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case2869pegase/2017-02-01</span></code></p></td>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case2869pegase/2017-01-01</span></code></p></td>
<td><p>2869</p></td>
<td><p>510</p></td>
<td><p>4582</p></td>
<td><p>3579</p></td>
<td><p>[JoFlMa16, FlPaCa13, MTPWR]</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case9241pegase/2017-02-01</span></code></p></td>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case9241pegase/2017-01-01</span></code></p></td>
<td><p>9241</p></td>
<td><p>1445</p></td>
<td><p>16049</p></td>
<td><p>13932</p></td>
<td><p>[JoFlMa16, FlPaCa13, MTPWR]</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case13659pegase/2017-02-01</span></code></p></td>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case13659pegase/2017-01-01</span></code></p></td>
<td><p>13659</p></td>
<td><p>4092</p></td>
<td><p>20467</p></td>
@ -477,56 +464,56 @@
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case1888rte/2017-02-01</span></code></p></td>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case1888rte/2017-01-01</span></code></p></td>
<td><p>1888</p></td>
<td><p>296</p></td>
<td><p>2531</p></td>
<td><p>1484</p></td>
<td><p>[MTPWR, JoFlMa16]</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case1951rte/2017-02-01</span></code></p></td>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case1951rte/2017-01-01</span></code></p></td>
<td><p>1951</p></td>
<td><p>390</p></td>
<td><p>2596</p></td>
<td><p>1497</p></td>
<td><p>[MTPWR, JoFlMa16]</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case2848rte/2017-02-01</span></code></p></td>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case2848rte/2017-01-01</span></code></p></td>
<td><p>2848</p></td>
<td><p>544</p></td>
<td><p>3776</p></td>
<td><p>2242</p></td>
<td><p>[MTPWR, JoFlMa16]</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case2868rte/2017-02-01</span></code></p></td>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case2868rte/2017-01-01</span></code></p></td>
<td><p>2868</p></td>
<td><p>596</p></td>
<td><p>3808</p></td>
<td><p>2260</p></td>
<td><p>[MTPWR, JoFlMa16]</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case6468rte/2017-02-01</span></code></p></td>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case6468rte/2017-01-01</span></code></p></td>
<td><p>6468</p></td>
<td><p>1262</p></td>
<td><p>9000</p></td>
<td><p>6094</p></td>
<td><p>[MTPWR, JoFlMa16]</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case6470rte/2017-02-01</span></code></p></td>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case6470rte/2017-01-01</span></code></p></td>
<td><p>6470</p></td>
<td><p>1306</p></td>
<td><p>9005</p></td>
<td><p>6085</p></td>
<td><p>[MTPWR, JoFlMa16]</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case6495rte/2017-02-01</span></code></p></td>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case6495rte/2017-01-01</span></code></p></td>
<td><p>6495</p></td>
<td><p>1352</p></td>
<td><p>9019</p></td>
<td><p>6060</p></td>
<td><p>[MTPWR, JoFlMa16]</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case6515rte/2017-02-01</span></code></p></td>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">matpower/case6515rte/2017-01-01</span></code></p></td>
<td><p>6515</p></td>
<td><p>1368</p></td>
<td><p>9037</p></td>
@ -1751,7 +1738,7 @@
<div class="section" id="references">
<h2><span class="sectnum">3.5.</span> References<a class="headerlink" href="#references" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>[UCJL] <strong>Alinson S. Xavier, Aleksandr M. Kazachkov, Feng Qiu.</strong> “UnitCommitment.jl: A Julia/JuMP Optimization Package for Security-Constrained Unit Commitment”. Zenodo (2020). <a class="reference external" href="https://doi.org/10.5281/zenodo.4269874">DOI: 10.5281/zenodo.4269874</a></p></li>
<li><p>[UCJL] <strong>Alinson S. Xavier, Aleksandr M. Kazachkov, Ogün Yurdakul, Feng Qiu.</strong> “UnitCommitment.jl: A Julia/JuMP Optimization Package for Security-Constrained Unit Commitment”. Zenodo (2020). <a class="reference external" href="https://doi.org/10.5281/zenodo.4269874">DOI: 10.5281/zenodo.4269874</a></p></li>
<li><p>[KnOsWa20] <strong>Bernard Knueven, James Ostrowski and Jean-Paul Watson.</strong> “On Mixed-Integer Programming Formulations for the Unit Commitment Problem”. INFORMS Journal on Computing (2020). <a class="reference external" href="https://doi.org/10.1287/ijoc.2019.0944">DOI: 10.1287/ijoc.2019.0944</a></p></li>
<li><p>[KrHiOn12] <strong>Eric Krall, Michael Higgins and Richard P. ONeill.</strong> “RTO unit commitment test system.” Federal Energy Regulatory Commission. Available at: <a class="reference external" href="https://www.ferc.gov/industries-data/electric/power-sales-and-markets/increasing-efficiency-through-improved-software-1">https://www.ferc.gov/industries-data/electric/power-sales-and-markets/increasing-efficiency-through-improved-software-1</a> (Accessed: Nov 14, 2020)</p></li>
<li><p>[BaBlEh19] <strong>Clayton Barrows, Aaron Bloom, Ali Ehlen, Jussi Ikaheimo, Jennie Jorgenson, Dheepak Krishnamurthy, Jessica Lau et al.</strong> “The IEEE Reliability Test System: A Proposed 2019 Update.” IEEE Transactions on Power Systems (2019). <a class="reference external" href="https://doi.org/10.1109/TPWRS.2019.2925557">DOI: 10.1109/TPWRS.2019.2925557</a></p></li>
@ -1788,7 +1775,7 @@ actions”, Power Systems, IEEE Trans. on, (28)4:4909-4917, 2013.
<div class="container">
<p>
&copy; Copyright 2020-2021, UChicago Argonne, LLC.<br/>
&copy; Copyright 2020-2022, UChicago Argonne, LLC.<br/>
</p>
</div>
</footer>

@ -146,19 +146,6 @@
<!-- Source interaction buttons -->
<div class="dropdown-buttons-trigger">
<button id="dropdown-buttons-trigger" class="btn btn-secondary topbarbtn"
aria-label="Connect with source repository"><i class="fab fa-github"></i></button>
<div class="dropdown-buttons sourcebuttons">
<a class="repository-button"
href="https://github.com/ANL-CEEESA/UnitCommitment.jl/"><button type="button" class="btn btn-secondary topbarbtn"
data-toggle="tooltip" data-placement="left" title="Source repository"><i
class="fab fa-github"></i>repository</button></a>
</div>
</div>
<!-- Full screen (wrap in <a> to have style consistency -->
<a class="full-screen-button"><button type="button" class="btn btn-secondary topbarbtn" data-toggle="tooltip"
@ -453,124 +440,124 @@
<div class="section" id="accessing-decision-variables">
<h3>Accessing decision variables<a class="headerlink" href="#accessing-decision-variables" title="Permalink to this headline"></a></h3>
<p>After building a model using <code class="docutils literal notranslate"><span class="pre">UnitCommitment.build_model</span></code>, it is possible to obtain a reference to the decision variables by calling <code class="docutils literal notranslate"><span class="pre">model[:varname][index]</span></code>. For example, <code class="docutils literal notranslate"><span class="pre">model[:is_on][&quot;g1&quot;,1]</span></code> returns a direct reference to the JuMP variable indicating whether generator named “g1” is on at time 1. The script below illustrates how to build a model, solve it and display the solution without using the function <code class="docutils literal notranslate"><span class="pre">UnitCommitment.solution</span></code>.</p>
<div class="highlight-julia notranslate"><div class="highlight"><pre><span></span><span class="k">using</span> <span class="n">Cbc</span>
<span class="k">using</span> <span class="n">Printf</span>
<span class="k">using</span> <span class="n">JuMP</span>
<span class="k">using</span> <span class="n">UnitCommitment</span>
<span class="c"># Load benchmark instance</span>
<span class="n">instance</span> <span class="o">=</span> <span class="n">UnitCommitment</span><span class="o">.</span><span class="n">read_benchmark</span><span class="p">(</span><span class="s">&quot;matpower/case118/2017-02-01&quot;</span><span class="p">)</span>
<span class="c"># Build JuMP model</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">UnitCommitment</span><span class="o">.</span><span class="n">build_model</span><span class="p">(</span>
<span class="n">instance</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
<span class="n">optimizer</span><span class="o">=</span><span class="n">Cbc</span><span class="o">.</span><span class="n">Optimizer</span><span class="p">,</span>
<span class="p">)</span>
<span class="c"># Solve the model</span>
<span class="n">UnitCommitment</span><span class="o">.</span><span class="n">optimize!</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
<span class="c"># Display commitment status</span>
<span class="k">for</span> <span class="n">g</span> <span class="kp">in</span> <span class="n">instance</span><span class="o">.</span><span class="n">units</span>
<span class="k">for</span> <span class="n">t</span> <span class="kp">in</span> <span class="mi">1</span><span class="o">:</span><span class="n">instance</span><span class="o">.</span><span class="n">time</span>
<span class="nd">@printf</span><span class="p">(</span>
<span class="s">&quot;</span><span class="si">%-10s</span><span class="s"> </span><span class="si">%5d</span><span class="s"> </span><span class="si">%5.1f</span><span class="s"> </span><span class="si">%5.1f</span><span class="s"> </span><span class="si">%5.1f</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span>
<span class="n">g</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
<span class="n">t</span><span class="p">,</span>
<span class="n">value</span><span class="p">(</span><span class="n">model</span><span class="p">[</span><span class="o">:</span><span class="n">is_on</span><span class="p">][</span><span class="n">g</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">t</span><span class="p">]),</span>
<span class="n">value</span><span class="p">(</span><span class="n">model</span><span class="p">[</span><span class="o">:</span><span class="n">switch_on</span><span class="p">][</span><span class="n">g</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">t</span><span class="p">]),</span>
<span class="n">value</span><span class="p">(</span><span class="n">model</span><span class="p">[</span><span class="o">:</span><span class="n">switch_off</span><span class="p">][</span><span class="n">g</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">t</span><span class="p">]),</span>
<span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span>
<div class="highlight-julia notranslate"><div class="highlight"><pre><span></span><span class="k">using</span><span class="w"> </span><span class="n">Cbc</span><span class="w"></span>
<span class="k">using</span><span class="w"> </span><span class="n">Printf</span><span class="w"></span>
<span class="k">using</span><span class="w"> </span><span class="n">JuMP</span><span class="w"></span>
<span class="k">using</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="w"></span>
<span class="c"># Load benchmark instance</span><span class="w"></span>
<span class="n">instance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="o">.</span><span class="n">read_benchmark</span><span class="p">(</span><span class="s">&quot;matpower/case118/2017-02-01&quot;</span><span class="p">)</span><span class="w"></span>
<span class="c"># Build JuMP model</span><span class="w"></span>
<span class="n">model</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="o">.</span><span class="n">build_model</span><span class="p">(</span><span class="w"></span>
<span class="w"> </span><span class="n">instance</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">optimizer</span><span class="o">=</span><span class="n">Cbc</span><span class="o">.</span><span class="n">Optimizer</span><span class="p">,</span><span class="w"></span>
<span class="p">)</span><span class="w"></span>
<span class="c"># Solve the model</span><span class="w"></span>
<span class="n">UnitCommitment</span><span class="o">.</span><span class="n">optimize!</span><span class="p">(</span><span class="n">model</span><span class="p">)</span><span class="w"></span>
<span class="c"># Display commitment status</span><span class="w"></span>
<span class="k">for</span><span class="w"> </span><span class="n">g</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">instance</span><span class="o">.</span><span class="n">units</span><span class="w"></span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">1</span><span class="o">:</span><span class="n">instance</span><span class="o">.</span><span class="n">time</span><span class="w"></span>
<span class="w"> </span><span class="nd">@printf</span><span class="p">(</span><span class="w"></span>
<span class="w"> </span><span class="s">&quot;</span><span class="si">%-10s</span><span class="s"> </span><span class="si">%5d</span><span class="s"> </span><span class="si">%5.1f</span><span class="s"> </span><span class="si">%5.1f</span><span class="s"> </span><span class="si">%5.1f</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">g</span><span class="o">.</span><span class="n">name</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">t</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">value</span><span class="p">(</span><span class="n">model</span><span class="p">[</span><span class="ss">:is_on</span><span class="p">][</span><span class="n">g</span><span class="o">.</span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="n">t</span><span class="p">]),</span><span class="w"></span>
<span class="w"> </span><span class="n">value</span><span class="p">(</span><span class="n">model</span><span class="p">[</span><span class="ss">:switch_on</span><span class="p">][</span><span class="n">g</span><span class="o">.</span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="n">t</span><span class="p">]),</span><span class="w"></span>
<span class="w"> </span><span class="n">value</span><span class="p">(</span><span class="n">model</span><span class="p">[</span><span class="ss">:switch_off</span><span class="p">][</span><span class="n">g</span><span class="o">.</span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="n">t</span><span class="p">]),</span><span class="w"></span>
<span class="w"> </span><span class="p">)</span><span class="w"></span>
<span class="w"> </span><span class="k">end</span><span class="w"></span>
<span class="k">end</span><span class="w"></span>
</pre></div>
</div>
</div>
<div class="section" id="fixing-variables-modifying-objective-function-and-adding-constraints">
<h3>Fixing variables, modifying objective function and adding constraints<a class="headerlink" href="#fixing-variables-modifying-objective-function-and-adding-constraints" title="Permalink to this headline"></a></h3>
<p>Since we now have a direct reference to the JuMP decision variables, it is possible to fix variables, change the coefficients in the objective function, or even add new constraints to the model before solving it. The script below shows how can this be accomplished. For more information on modifying an existing model, <a class="reference external" href="https://jump.dev/JuMP.jl/stable/manual/variables/">see the JuMP documentation</a>.</p>
<div class="highlight-julia notranslate"><div class="highlight"><pre><span></span><span class="k">using</span> <span class="n">Cbc</span>
<span class="k">using</span> <span class="n">JuMP</span>
<span class="k">using</span> <span class="n">UnitCommitment</span>
<span class="c"># Load benchmark instance</span>
<span class="n">instance</span> <span class="o">=</span> <span class="n">UnitCommitment</span><span class="o">.</span><span class="n">read_benchmark</span><span class="p">(</span><span class="s">&quot;matpower/case118/2017-02-01&quot;</span><span class="p">)</span>
<span class="c"># Construct JuMP model</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">UnitCommitment</span><span class="o">.</span><span class="n">build_model</span><span class="p">(</span>
<span class="n">instance</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
<span class="n">optimizer</span><span class="o">=</span><span class="n">Cbc</span><span class="o">.</span><span class="n">Optimizer</span><span class="p">,</span>
<span class="p">)</span>
<span class="c"># Fix a decision variable to 1.0</span>
<span class="n">JuMP</span><span class="o">.</span><span class="n">fix</span><span class="p">(</span>
<span class="n">model</span><span class="p">[</span><span class="o">:</span><span class="n">is_on</span><span class="p">][</span><span class="s">&quot;g1&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">],</span>
<span class="mf">1.0</span><span class="p">,</span>
<span class="n">force</span><span class="o">=</span><span class="kc">true</span><span class="p">,</span>
<span class="p">)</span>
<span class="c"># Change the objective function</span>
<span class="n">JuMP</span><span class="o">.</span><span class="n">set_objective_coefficient</span><span class="p">(</span>
<span class="n">model</span><span class="p">,</span>
<span class="n">model</span><span class="p">[</span><span class="o">:</span><span class="n">switch_on</span><span class="p">][</span><span class="s">&quot;g2&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">],</span>
<span class="mf">1000.0</span><span class="p">,</span>
<span class="p">)</span>
<span class="c"># Create a new constraint</span>
<span class="nd">@constraint</span><span class="p">(</span>
<span class="n">model</span><span class="p">,</span>
<span class="n">model</span><span class="p">[</span><span class="o">:</span><span class="n">is_on</span><span class="p">][</span><span class="s">&quot;g3&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">model</span><span class="p">[</span><span class="o">:</span><span class="n">is_on</span><span class="p">][</span><span class="s">&quot;g4&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">]</span> <span class="o">&lt;=</span> <span class="mi">1</span><span class="p">,</span>
<span class="p">)</span>
<span class="c"># Solve the model</span>
<span class="n">UnitCommitment</span><span class="o">.</span><span class="n">optimize!</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
<div class="highlight-julia notranslate"><div class="highlight"><pre><span></span><span class="k">using</span><span class="w"> </span><span class="n">Cbc</span><span class="w"></span>
<span class="k">using</span><span class="w"> </span><span class="n">JuMP</span><span class="w"></span>
<span class="k">using</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="w"></span>
<span class="c"># Load benchmark instance</span><span class="w"></span>
<span class="n">instance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="o">.</span><span class="n">read_benchmark</span><span class="p">(</span><span class="s">&quot;matpower/case118/2017-02-01&quot;</span><span class="p">)</span><span class="w"></span>
<span class="c"># Construct JuMP model</span><span class="w"></span>
<span class="n">model</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="o">.</span><span class="n">build_model</span><span class="p">(</span><span class="w"></span>
<span class="w"> </span><span class="n">instance</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">optimizer</span><span class="o">=</span><span class="n">Cbc</span><span class="o">.</span><span class="n">Optimizer</span><span class="p">,</span><span class="w"></span>
<span class="p">)</span><span class="w"></span>
<span class="c"># Fix a decision variable to 1.0</span><span class="w"></span>
<span class="n">JuMP</span><span class="o">.</span><span class="n">fix</span><span class="p">(</span><span class="w"></span>
<span class="w"> </span><span class="n">model</span><span class="p">[</span><span class="ss">:is_on</span><span class="p">][</span><span class="s">&quot;g1&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">],</span><span class="w"></span>
<span class="w"> </span><span class="mf">1.0</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">force</span><span class="o">=</span><span class="nb">true</span><span class="p">,</span><span class="w"></span>
<span class="p">)</span><span class="w"></span>
<span class="c"># Change the objective function</span><span class="w"></span>
<span class="n">JuMP</span><span class="o">.</span><span class="n">set_objective_coefficient</span><span class="p">(</span><span class="w"></span>
<span class="w"> </span><span class="n">model</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">model</span><span class="p">[</span><span class="ss">:switch_on</span><span class="p">][</span><span class="s">&quot;g2&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">],</span><span class="w"></span>
<span class="w"> </span><span class="mf">1000.0</span><span class="p">,</span><span class="w"></span>
<span class="p">)</span><span class="w"></span>
<span class="c"># Create a new constraint</span><span class="w"></span>
<span class="nd">@constraint</span><span class="p">(</span><span class="w"></span>
<span class="w"> </span><span class="n">model</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">model</span><span class="p">[</span><span class="ss">:is_on</span><span class="p">][</span><span class="s">&quot;g3&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">model</span><span class="p">[</span><span class="ss">:is_on</span><span class="p">][</span><span class="s">&quot;g4&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">&lt;=</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"></span>
<span class="p">)</span><span class="w"></span>
<span class="c"># Solve the model</span><span class="w"></span>
<span class="n">UnitCommitment</span><span class="o">.</span><span class="n">optimize!</span><span class="p">(</span><span class="n">model</span><span class="p">)</span><span class="w"></span>
</pre></div>
</div>
</div>
<div class="section" id="adding-new-component-to-a-bus">
<h3>Adding new component to a bus<a class="headerlink" href="#adding-new-component-to-a-bus" title="Permalink to this headline"></a></h3>
<p>The following snippet shows how to add a new grid component to a particular bus. For each time step, we create decision variables for the new grid component, add these variables to the objective function, then attach the component to a particular bus by modifying some existing model constraints.</p>
<div class="highlight-julia notranslate"><div class="highlight"><pre><span></span><span class="k">using</span> <span class="n">Cbc</span>
<span class="k">using</span> <span class="n">JuMP</span>
<span class="k">using</span> <span class="n">UnitCommitment</span>
<span class="c"># Load instance and build base model</span>
<span class="n">instance</span> <span class="o">=</span> <span class="n">UnitCommitment</span><span class="o">.</span><span class="n">read_benchmark</span><span class="p">(</span><span class="s">&quot;matpower/case118/2017-02-01&quot;</span><span class="p">)</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">UnitCommitment</span><span class="o">.</span><span class="n">build_model</span><span class="p">(</span>
<span class="n">instance</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
<span class="n">optimizer</span><span class="o">=</span><span class="n">Cbc</span><span class="o">.</span><span class="n">Optimizer</span><span class="p">,</span>
<span class="p">)</span>
<span class="c"># Get the number of time steps in the original instance</span>
<span class="n">T</span> <span class="o">=</span> <span class="n">instance</span><span class="o">.</span><span class="n">time</span>
<span class="c"># Create decision variables for the new grid component.</span>
<span class="c"># In this example, we assume that the new component can</span>
<span class="c"># inject up to 10 MW of power at each time step, so we</span>
<span class="c"># create new continuous variables 0 ≤ x[t] ≤ 10.</span>
<span class="nd">@variable</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="o">:</span><span class="n">T</span><span class="p">],</span> <span class="n">lower_bound</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">upper_bound</span><span class="o">=</span><span class="mf">10.0</span><span class="p">)</span>
<span class="c"># For each time step</span>
<span class="k">for</span> <span class="n">t</span> <span class="kp">in</span> <span class="mi">1</span><span class="o">:</span><span class="n">T</span>
<span class="c"># Add production costs to the objective function.</span>
<span class="c"># In this example, we assume a cost of $5/MW.</span>
<span class="n">set_objective_coefficient</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">x</span><span class="p">[</span><span class="n">t</span><span class="p">],</span> <span class="mf">5.0</span><span class="p">)</span>
<span class="c"># Attach the new component to bus b1, by modifying the</span>
<span class="c"># constraint `eq_net_injection`.</span>
<span class="n">set_normalized_coefficient</span><span class="p">(</span>
<span class="n">model</span><span class="p">[</span><span class="o">:</span><span class="n">eq_net_injection</span><span class="p">][</span><span class="s">&quot;b1&quot;</span><span class="p">,</span> <span class="n">t</span><span class="p">],</span>
<span class="n">x</span><span class="p">[</span><span class="n">t</span><span class="p">],</span>
<span class="mf">1.0</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">end</span>
<span class="c"># Solve the model</span>
<span class="n">UnitCommitment</span><span class="o">.</span><span class="n">optimize!</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
<span class="c"># Show optimal values for the x variables</span>
<span class="nd">@show</span> <span class="n">value</span><span class="o">.</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<div class="highlight-julia notranslate"><div class="highlight"><pre><span></span><span class="k">using</span><span class="w"> </span><span class="n">Cbc</span><span class="w"></span>
<span class="k">using</span><span class="w"> </span><span class="n">JuMP</span><span class="w"></span>
<span class="k">using</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="w"></span>
<span class="c"># Load instance and build base model</span><span class="w"></span>
<span class="n">instance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="o">.</span><span class="n">read_benchmark</span><span class="p">(</span><span class="s">&quot;matpower/case118/2017-02-01&quot;</span><span class="p">)</span><span class="w"></span>
<span class="n">model</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="o">.</span><span class="n">build_model</span><span class="p">(</span><span class="w"></span>
<span class="w"> </span><span class="n">instance</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">optimizer</span><span class="o">=</span><span class="n">Cbc</span><span class="o">.</span><span class="n">Optimizer</span><span class="p">,</span><span class="w"></span>
<span class="p">)</span><span class="w"></span>
<span class="c"># Get the number of time steps in the original instance</span><span class="w"></span>
<span class="n">T</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">instance</span><span class="o">.</span><span class="n">time</span><span class="w"></span>
<span class="c"># Create decision variables for the new grid component.</span><span class="w"></span>
<span class="c"># In this example, we assume that the new component can</span><span class="w"></span>
<span class="c"># inject up to 10 MW of power at each time step, so we</span><span class="w"></span>
<span class="c"># create new continuous variables 0 ≤ x[t] ≤ 10.</span><span class="w"></span>
<span class="nd">@variable</span><span class="p">(</span><span class="n">model</span><span class="p">,</span><span class="w"> </span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="o">:</span><span class="n">T</span><span class="p">],</span><span class="w"> </span><span class="n">lower_bound</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span><span class="w"> </span><span class="n">upper_bound</span><span class="o">=</span><span class="mf">10.0</span><span class="p">)</span><span class="w"></span>
<span class="c"># For each time step</span><span class="w"></span>
<span class="k">for</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">1</span><span class="o">:</span><span class="n">T</span><span class="w"></span>
<span class="w"> </span><span class="c"># Add production costs to the objective function.</span><span class="w"></span>
<span class="w"> </span><span class="c"># In this example, we assume a cost of $5/MW.</span><span class="w"></span>
<span class="w"> </span><span class="n">set_objective_coefficient</span><span class="p">(</span><span class="n">model</span><span class="p">,</span><span class="w"> </span><span class="n">x</span><span class="p">[</span><span class="n">t</span><span class="p">],</span><span class="w"> </span><span class="mf">5.0</span><span class="p">)</span><span class="w"></span>
<span class="w"> </span><span class="c"># Attach the new component to bus b1, by modifying the</span><span class="w"></span>
<span class="w"> </span><span class="c"># constraint `eq_net_injection`.</span><span class="w"></span>
<span class="w"> </span><span class="n">set_normalized_coefficient</span><span class="p">(</span><span class="w"></span>
<span class="w"> </span><span class="n">model</span><span class="p">[</span><span class="ss">:eq_net_injection</span><span class="p">][</span><span class="s">&quot;b1&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">t</span><span class="p">],</span><span class="w"></span>
<span class="w"> </span><span class="n">x</span><span class="p">[</span><span class="n">t</span><span class="p">],</span><span class="w"></span>
<span class="w"> </span><span class="mf">1.0</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="p">)</span><span class="w"></span>
<span class="k">end</span><span class="w"></span>
<span class="c"># Solve the model</span><span class="w"></span>
<span class="n">UnitCommitment</span><span class="o">.</span><span class="n">optimize!</span><span class="p">(</span><span class="n">model</span><span class="p">)</span><span class="w"></span>
<span class="c"># Show optimal values for the x variables</span><span class="w"></span>
<span class="nd">@show</span><span class="w"> </span><span class="n">value</span><span class="o">.</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="w"></span>
</pre></div>
</div>
</div>
@ -599,7 +586,7 @@
<div class="container">
<p>
&copy; Copyright 2020-2021, UChicago Argonne, LLC.<br/>
&copy; Copyright 2020-2022, UChicago Argonne, LLC.<br/>
</p>
</div>
</footer>

@ -132,19 +132,6 @@
<!-- Source interaction buttons -->
<div class="dropdown-buttons-trigger">
<button id="dropdown-buttons-trigger" class="btn btn-secondary topbarbtn"
aria-label="Connect with source repository"><i class="fab fa-github"></i></button>
<div class="dropdown-buttons sourcebuttons">
<a class="repository-button"
href="https://github.com/ANL-CEEESA/UnitCommitment.jl/"><button type="button" class="btn btn-secondary topbarbtn"
data-toggle="tooltip" data-placement="left" title="Source repository"><i
class="fab fa-github"></i>repository</button></a>
</div>
</div>
<!-- Full screen (wrap in <a> to have style consistency -->
<a class="full-screen-button"><button type="button" class="btn btn-secondary topbarbtn" data-toggle="tooltip"
@ -203,7 +190,7 @@
<div class="container">
<p>
&copy; Copyright 2020-2021, UChicago Argonne, LLC.<br/>
&copy; Copyright 2020-2022, UChicago Argonne, LLC.<br/>
</p>
</div>
</footer>

File diff suppressed because one or more lines are too long

@ -145,19 +145,6 @@
<!-- Source interaction buttons -->
<div class="dropdown-buttons-trigger">
<button id="dropdown-buttons-trigger" class="btn btn-secondary topbarbtn"
aria-label="Connect with source repository"><i class="fab fa-github"></i></button>
<div class="dropdown-buttons sourcebuttons">
<a class="repository-button"
href="https://github.com/ANL-CEEESA/UnitCommitment.jl/"><button type="button" class="btn btn-secondary topbarbtn"
data-toggle="tooltip" data-placement="left" title="Source repository"><i
class="fab fa-github"></i>repository</button></a>
</div>
</div>
<!-- Full screen (wrap in <a> to have style consistency -->
<a class="full-screen-button"><button type="button" class="btn btn-secondary topbarbtn" data-toggle="tooltip"
@ -245,8 +232,8 @@
<h1><span class="sectnum">1.</span> Usage<a class="headerlink" href="#usage" title="Permalink to this headline"></a></h1>
<div class="section" id="installation">
<h2><span class="sectnum">1.1.</span> Installation<a class="headerlink" href="#installation" title="Permalink to this headline"></a></h2>
<p>UnitCommitment.jl was tested and developed with <a class="reference external" href="https://julialang.org/">Julia 1.6</a>. To install Julia, please follow the <a class="reference external" href="https://julialang.org/downloads/platform.html">installation guide on the official Julia website</a>. To install UnitCommitment.jl, run the Julia interpreter, type <code class="docutils literal notranslate"><span class="pre">]</span></code> to open the package manager, then type:</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>pkg&gt; add UnitCommitment@0.2
<p>UnitCommitment.jl was tested and developed with <a class="reference external" href="https://julialang.org/">Julia 1.7</a>. To install Julia, please follow the <a class="reference external" href="https://julialang.org/downloads/">installation guide on the official Julia website</a>. To install UnitCommitment.jl, run the Julia interpreter, type <code class="docutils literal notranslate"><span class="pre">]</span></code> to open the package manager, then type:</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>pkg&gt; add UnitCommitment@0.3
</pre></div>
</div>
<p>To test that the package has been correctly installed, run:</p>
@ -261,33 +248,33 @@
<div class="section" id="solving-user-provided-instances">
<h3>Solving user-provided instances<a class="headerlink" href="#solving-user-provided-instances" title="Permalink to this headline"></a></h3>
<p>The first step to use UC.jl is to construct a JSON file describing your unit commitment instance. See <a class="reference internal" href="../format/"><span class="doc std std-doc">Data Format</span></a> for a complete description of the data format UC.jl expects. The next steps, as shown below, are to: (1) read the instance from file; (2) construct the optimization model; (3) run the optimization; and (4) extract the optimal solution.</p>
<div class="highlight-julia notranslate"><div class="highlight"><pre><span></span><span class="k">using</span> <span class="n">Cbc</span>
<span class="k">using</span> <span class="n">JSON</span>
<span class="k">using</span> <span class="n">UnitCommitment</span>
<div class="highlight-julia notranslate"><div class="highlight"><pre><span></span><span class="k">using</span><span class="w"> </span><span class="n">Cbc</span><span class="w"></span>
<span class="k">using</span><span class="w"> </span><span class="n">JSON</span><span class="w"></span>
<span class="k">using</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="w"></span>
<span class="c"># 1. Read instance</span>
<span class="n">instance</span> <span class="o">=</span> <span class="n">UnitCommitment</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="s">&quot;/path/to/input.json&quot;</span><span class="p">)</span>
<span class="c"># 1. Read instance</span><span class="w"></span>
<span class="n">instance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="s">&quot;/path/to/input.json&quot;</span><span class="p">)</span><span class="w"></span>
<span class="c"># 2. Construct optimization model</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">UnitCommitment</span><span class="o">.</span><span class="n">build_model</span><span class="p">(</span>
<span class="n">instance</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
<span class="n">optimizer</span><span class="o">=</span><span class="n">Cbc</span><span class="o">.</span><span class="n">Optimizer</span><span class="p">,</span>
<span class="p">)</span>
<span class="c"># 2. Construct optimization model</span><span class="w"></span>
<span class="n">model</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="o">.</span><span class="n">build_model</span><span class="p">(</span><span class="w"></span>
<span class="w"> </span><span class="n">instance</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">optimizer</span><span class="o">=</span><span class="n">Cbc</span><span class="o">.</span><span class="n">Optimizer</span><span class="p">,</span><span class="w"></span>
<span class="p">)</span><span class="w"></span>
<span class="c"># 3. Solve model</span>
<span class="n">UnitCommitment</span><span class="o">.</span><span class="n">optimize!</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
<span class="c"># 3. Solve model</span><span class="w"></span>
<span class="n">UnitCommitment</span><span class="o">.</span><span class="n">optimize!</span><span class="p">(</span><span class="n">model</span><span class="p">)</span><span class="w"></span>
<span class="c"># 4. Write solution to a file</span>
<span class="n">solution</span> <span class="o">=</span> <span class="n">UnitCommitment</span><span class="o">.</span><span class="n">solution</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
<span class="n">UnitCommitment</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">&quot;/path/to/output.json&quot;</span><span class="p">,</span> <span class="n">solution</span><span class="p">)</span>
<span class="c"># 4. Write solution to a file</span><span class="w"></span>
<span class="n">solution</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="o">.</span><span class="n">solution</span><span class="p">(</span><span class="n">model</span><span class="p">)</span><span class="w"></span>
<span class="n">UnitCommitment</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">&quot;/path/to/output.json&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">solution</span><span class="p">)</span><span class="w"></span>
</pre></div>
</div>
</div>
<div class="section" id="solving-benchmark-instances">
<h3>Solving benchmark instances<a class="headerlink" href="#solving-benchmark-instances" title="Permalink to this headline"></a></h3>
<p>UnitCommitment.jl contains a large number of benchmark instances collected from the literature and converted into a common data format. To solve one of these instances individually, instead of constructing your own, the function <code class="docutils literal notranslate"><span class="pre">read_benchmark</span></code> can be used, as shown below. See <a class="reference internal" href="../instances/"><span class="doc std std-doc">Instances</span></a> for the complete list of available instances.</p>
<div class="highlight-julia notranslate"><div class="highlight"><pre><span></span><span class="k">using</span> <span class="n">UnitCommitment</span>
<span class="n">instance</span> <span class="o">=</span> <span class="n">UnitCommitment</span><span class="o">.</span><span class="n">read_benchmark</span><span class="p">(</span><span class="s">&quot;matpower/case3375wp/2017-02-01&quot;</span><span class="p">)</span>
<div class="highlight-julia notranslate"><div class="highlight"><pre><span></span><span class="k">using</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="w"></span>
<span class="n">instance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="o">.</span><span class="n">read_benchmark</span><span class="p">(</span><span class="s">&quot;matpower/case3375wp/2017-02-01&quot;</span><span class="p">)</span><span class="w"></span>
</pre></div>
</div>
</div>
@ -297,32 +284,32 @@
<div class="section" id="customizing-the-formulation">
<h3>Customizing the formulation<a class="headerlink" href="#customizing-the-formulation" title="Permalink to this headline"></a></h3>
<p>By default, <code class="docutils literal notranslate"><span class="pre">build_model</span></code> uses a formulation that combines modeling components from different publications, and that has been carefully tested, using our own benchmark scripts, to provide good performance across a wide variety of instances. This default formulation is expected to change over time, as new methods are proposed in the literature. You can, however, construct your own formulation, based on the modeling components that you choose, as shown in the next example.</p>
<div class="highlight-julia notranslate"><div class="highlight"><pre><span></span><span class="k">using</span> <span class="n">Cbc</span>
<span class="k">using</span> <span class="n">UnitCommitment</span>
<span class="k">import</span> <span class="n">UnitCommitment</span><span class="o">:</span>
<span class="n">Formulation</span><span class="p">,</span>
<span class="n">KnuOstWat2018</span><span class="p">,</span>
<span class="n">MorLatRam2013</span><span class="p">,</span>
<span class="n">ShiftFactorsFormulation</span>
<span class="n">instance</span> <span class="o">=</span> <span class="n">UnitCommitment</span><span class="o">.</span><span class="n">read_benchmark</span><span class="p">(</span>
<span class="s">&quot;matpower/case118/2017-02-01&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">UnitCommitment</span><span class="o">.</span><span class="n">build_model</span><span class="p">(</span>
<span class="n">instance</span> <span class="o">=</span> <span class="n">instance</span><span class="p">,</span>
<span class="n">optimizer</span> <span class="o">=</span> <span class="n">Cbc</span><span class="o">.</span><span class="n">Optimizer</span><span class="p">,</span>
<span class="n">formulation</span> <span class="o">=</span> <span class="n">Formulation</span><span class="p">(</span>
<span class="n">pwl_costs</span> <span class="o">=</span> <span class="n">KnuOstWat2018</span><span class="o">.</span><span class="n">PwlCosts</span><span class="p">(),</span>
<span class="n">ramping</span> <span class="o">=</span> <span class="n">MorLatRam2013</span><span class="o">.</span><span class="n">Ramping</span><span class="p">(),</span>
<span class="n">startup_costs</span> <span class="o">=</span> <span class="n">MorLatRam2013</span><span class="o">.</span><span class="n">StartupCosts</span><span class="p">(),</span>
<span class="n">transmission</span> <span class="o">=</span> <span class="n">ShiftFactorsFormulation</span><span class="p">(</span>
<span class="n">isf_cutoff</span> <span class="o">=</span> <span class="mf">0.005</span><span class="p">,</span>
<span class="n">lodf_cutoff</span> <span class="o">=</span> <span class="mf">0.001</span><span class="p">,</span>
<span class="p">),</span>
<span class="p">),</span>
<span class="p">)</span>
<div class="highlight-julia notranslate"><div class="highlight"><pre><span></span><span class="k">using</span><span class="w"> </span><span class="n">Cbc</span><span class="w"></span>
<span class="k">using</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="w"></span>
<span class="k">import</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="o">:</span><span class="w"></span>
<span class="w"> </span><span class="n">Formulation</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">KnuOstWat2018</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">MorLatRam2013</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">ShiftFactorsFormulation</span><span class="w"></span>
<span class="n">instance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="o">.</span><span class="n">read_benchmark</span><span class="p">(</span><span class="w"></span>
<span class="w"> </span><span class="s">&quot;matpower/case118/2017-02-01&quot;</span><span class="p">,</span><span class="w"></span>
<span class="p">)</span><span class="w"></span>
<span class="n">model</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="o">.</span><span class="n">build_model</span><span class="p">(</span><span class="w"></span>
<span class="w"> </span><span class="n">instance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">instance</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">optimizer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Cbc</span><span class="o">.</span><span class="n">Optimizer</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">formulation</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Formulation</span><span class="p">(</span><span class="w"></span>
<span class="w"> </span><span class="n">pwl_costs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">KnuOstWat2018</span><span class="o">.</span><span class="n">PwlCosts</span><span class="p">(),</span><span class="w"></span>
<span class="w"> </span><span class="n">ramping</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MorLatRam2013</span><span class="o">.</span><span class="n">Ramping</span><span class="p">(),</span><span class="w"></span>
<span class="w"> </span><span class="n">startup_costs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MorLatRam2013</span><span class="o">.</span><span class="n">StartupCosts</span><span class="p">(),</span><span class="w"></span>
<span class="w"> </span><span class="n">transmission</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ShiftFactorsFormulation</span><span class="p">(</span><span class="w"></span>
<span class="w"> </span><span class="n">isf_cutoff</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0.005</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">lodf_cutoff</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0.001</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="p">),</span><span class="w"></span>
<span class="w"> </span><span class="p">),</span><span class="w"></span>
<span class="p">)</span><span class="w"></span>
</pre></div>
</div>
</div>
@ -330,21 +317,21 @@
<h3>Generating initial conditions<a class="headerlink" href="#generating-initial-conditions" title="Permalink to this headline"></a></h3>
<p>When creating random unit commitment instances for benchmark purposes, it is often hard to compute, in advance, sensible initial conditions for all generators. Setting initial conditions naively (for example, making all generators initially off and producing no power) can easily cause the instance to become infeasible due to excessive ramping. Initial conditions can also make it hard to modify existing instances. For example, increasing the system load without carefully modifying the initial conditions may make the problem infeasible or unrealistically challenging to solve.</p>
<p>To help with this issue, UC.jl provides a utility function which can generate feasible initial conditions by solving a single-period optimization problem, as shown below:</p>
<div class="highlight-julia notranslate"><div class="highlight"><pre><span></span><span class="k">using</span> <span class="n">Cbc</span>
<span class="k">using</span> <span class="n">UnitCommitment</span>
<div class="highlight-julia notranslate"><div class="highlight"><pre><span></span><span class="k">using</span><span class="w"> </span><span class="n">Cbc</span><span class="w"></span>
<span class="k">using</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="w"></span>
<span class="c"># Read original instance</span>
<span class="n">instance</span> <span class="o">=</span> <span class="n">UnitCommitment</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="s">&quot;instance.json&quot;</span><span class="p">)</span>
<span class="c"># Read original instance</span><span class="w"></span>
<span class="n">instance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="s">&quot;instance.json&quot;</span><span class="p">)</span><span class="w"></span>
<span class="c"># Generate initial conditions (in-place)</span>
<span class="n">UnitCommitment</span><span class="o">.</span><span class="n">generate_initial_conditions!</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="n">Cbc</span><span class="o">.</span><span class="n">Optimizer</span><span class="p">)</span>
<span class="c"># Generate initial conditions (in-place)</span><span class="w"></span>
<span class="n">UnitCommitment</span><span class="o">.</span><span class="n">generate_initial_conditions!</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span><span class="w"> </span><span class="n">Cbc</span><span class="o">.</span><span class="n">Optimizer</span><span class="p">)</span><span class="w"></span>
<span class="c"># Construct and solve optimization model</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">UnitCommitment</span><span class="o">.</span><span class="n">build_model</span><span class="p">(</span>
<span class="n">instance</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
<span class="n">optimizer</span><span class="o">=</span><span class="n">Cbc</span><span class="o">.</span><span class="n">Optimizer</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">UnitCommitment</span><span class="o">.</span><span class="n">optimize!</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
<span class="c"># Construct and solve optimization model</span><span class="w"></span>
<span class="n">model</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="o">.</span><span class="n">build_model</span><span class="p">(</span><span class="w"></span>
<span class="w"> </span><span class="n">instance</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="n">optimizer</span><span class="o">=</span><span class="n">Cbc</span><span class="o">.</span><span class="n">Optimizer</span><span class="p">,</span><span class="w"></span>
<span class="p">)</span><span class="w"></span>
<span class="n">UnitCommitment</span><span class="o">.</span><span class="n">optimize!</span><span class="p">(</span><span class="n">model</span><span class="p">)</span><span class="w"></span>
</pre></div>
</div>
<div class="admonition warning">
@ -355,17 +342,17 @@
<div class="section" id="verifying-solutions">
<h3>Verifying solutions<a class="headerlink" href="#verifying-solutions" title="Permalink to this headline"></a></h3>
<p>When developing new formulations, it is very easy to introduce subtle errors in the model that result in incorrect solutions. To help with this, UC.jl includes a utility function that verifies if a given solution is feasible, and, if not, prints all the validation errors it found. The implementation of this function is completely independent from the implementation of the optimization model, and therefore can be used to validate it. The function can also be used to verify solutions produced by other optimization packages, as long as they follow the <a class="reference internal" href="../format/"><span class="doc std std-doc">UC.jl data format</span></a>.</p>
<div class="highlight-julia notranslate"><div class="highlight"><pre><span></span><span class="k">using</span> <span class="n">JSON</span>
<span class="k">using</span> <span class="n">UnitCommitment</span>
<div class="highlight-julia notranslate"><div class="highlight"><pre><span></span><span class="k">using</span><span class="w"> </span><span class="n">JSON</span><span class="w"></span>
<span class="k">using</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="w"></span>
<span class="c"># Read instance</span>
<span class="n">instance</span> <span class="o">=</span> <span class="n">UnitCommitment</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="s">&quot;instance.json&quot;</span><span class="p">)</span>
<span class="c"># Read instance</span><span class="w"></span>
<span class="n">instance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UnitCommitment</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="s">&quot;instance.json&quot;</span><span class="p">)</span><span class="w"></span>
<span class="c"># Read solution (potentially produced by other packages) </span>
<span class="n">solution</span> <span class="o">=</span> <span class="n">JSON</span><span class="o">.</span><span class="n">parsefile</span><span class="p">(</span><span class="s">&quot;solution.json&quot;</span><span class="p">)</span>
<span class="c"># Read solution (potentially produced by other packages) </span><span class="w"></span>
<span class="n">solution</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">JSON</span><span class="o">.</span><span class="n">parsefile</span><span class="p">(</span><span class="s">&quot;solution.json&quot;</span><span class="p">)</span><span class="w"></span>
<span class="c"># Validate solution and print validation errors</span>
<span class="n">UnitCommitment</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="n">solution</span><span class="p">)</span>
<span class="c"># Validate solution and print validation errors</span><span class="w"></span>
<span class="n">UnitCommitment</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span><span class="w"> </span><span class="n">solution</span><span class="p">)</span><span class="w"></span>
</pre></div>
</div>
</div>
@ -389,7 +376,7 @@
<div class="container">
<p>
&copy; Copyright 2020-2021, UChicago Argonne, LLC.<br/>
&copy; Copyright 2020-2022, UChicago Argonne, LLC.<br/>
</p>
</div>
</footer>

Loading…
Cancel
Save