|
|
<!DOCTYPE html>
|
|
|
<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>API Reference · UnitCommitment.jl</title><script data-outdated-warner src="../assets/warner.js"></script><link href="https://cdnjs.cloudflare.com/ajax/libs/lato-font/3.0.0/css/lato-font.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/juliamono/0.045/juliamono.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.24/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script><link href="../assets/custom.css" rel="stylesheet" type="text/css"/></head><body><div id="documenter"><nav class="docs-sidebar"><div class="docs-package-name"><span class="docs-autofit"><a href="../">UnitCommitment.jl</a></span></div><form class="docs-search" action="../search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Home</a></li><li><a class="tocitem" href="../usage/">Usage</a></li><li><a class="tocitem" href="../format/">Data Format</a></li><li><a class="tocitem" href="../instances/">Instances</a></li><li><a class="tocitem" href="../model/">JuMP Model</a></li><li class="is-active"><a class="tocitem" href>API Reference</a><ul class="internal"><li><a class="tocitem" href="#Read-data,-build-model-and-optimize"><span>Read data, build model & optimize</span></a></li><li><a class="tocitem" href="#Modify-instance"><span>Modify instance</span></a></li><li><a class="tocitem" href="#Formulations"><span>Formulations</span></a></li><li><a class="tocitem" href="#Solution-Methods"><span>Solution Methods</span></a></li><li><a class="tocitem" href="#Randomization-Methods"><span>Randomization Methods</span></a></li></ul></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>API Reference</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>API Reference</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/dev/docs/src/api.md" title="Edit on GitHub"><span class="docs-icon fab"></span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="API-Reference"><a class="docs-heading-anchor" href="#API-Reference">API Reference</a><a id="API-Reference-1"></a><a class="docs-heading-anchor-permalink" href="#API-Reference" title="Permalink"></a></h1><h2 id="Read-data,-build-model-and-optimize"><a class="docs-heading-anchor" href="#Read-data,-build-model-and-optimize">Read data, build model & optimize</a><a id="Read-data,-build-model-and-optimize-1"></a><a class="docs-heading-anchor-permalink" href="#Read-data,-build-model-and-optimize" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.read" href="#UnitCommitment.read"><code>UnitCommitment.read</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia hljs">read(path::AbstractString)::UnitCommitmentInstance</code></pre><p>Read instance from a file. The file may be gzipped.</p><p><strong>Example</strong></p><pre><code class="language-julia hljs">instance = UnitCommitment.read("/path/to/input.json.gz")</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/instance/read.jl#L46-L56">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.read_benchmark" href="#UnitCommitment.read_benchmark"><code>UnitCommitment.read_benchmark</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia hljs">read_benchmark(name::AbstractString)::UnitCommitmentInstance</code></pre><p>Read one of the benchmark instances included in the package. See <a href="../instances/">Instances</a> for the entire list of benchmark instances available.</p><p><strong>Example</strong></p><pre><code class="language-julia hljs">instance = UnitCommitment.read_benchmark("matpower/case3375wp/2017-02-01")</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/instance/read.jl#L13-L23">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.build_model" href="#UnitCommitment.build_model"><code>UnitCommitment.build_model</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia hljs">function build_model(;
|
|
|
instance::UnitCommitmentInstance,
|
|
|
optimizer = nothing,
|
|
|
formulation = Formulation(),
|
|
|
variable_names::Bool = false,
|
|
|
)::JuMP.Model</code></pre><p>Build the JuMP model corresponding to the given unit commitment instance.</p><p><strong>Arguments</strong></p><ul><li><code>instance</code>: the instance.</li><li><code>optimizer</code>: the optimizer factory that should be attached to this model (e.g. Cbc.Optimizer). If not provided, no optimizer will be attached.</li><li><code>formulation</code>: the MIP formulation to use. By default, uses a formulation that combines modeling components from different publications that provides good performance across a wide variety of instances. An alternative formulation may also be provided.</li><li><code>variable_names</code>: if true, set variable and constraint names. Important if the model is going to be exported to an MPS file. For large models, this can take significant time, so it's disabled by default.</li></ul><p><strong>Examples</strong></p><pre><code class="language-julia hljs"># Read benchmark instance
|
|
|
instance = UnitCommitment.read_benchmark("matpower/case118/2017-02-01")
|
|
|
|
|
|
# Construct model (using state-of-the-art defaults)
|
|
|
model = UnitCommitment.build_model(
|
|
|
instance = instance,
|
|
|
optimizer = Cbc.Optimizer,
|
|
|
)
|
|
|
|
|
|
# Construct model (using customized formulation)
|
|
|
model = UnitCommitment.build_model(
|
|
|
instance = instance,
|
|
|
optimizer = Cbc.Optimizer,
|
|
|
formulation = Formulation(
|
|
|
pwl_costs = KnuOstWat2018.PwlCosts(),
|
|
|
ramping = MorLatRam2013.Ramping(),
|
|
|
startup_costs = MorLatRam2013.StartupCosts(),
|
|
|
transmission = ShiftFactorsFormulation(
|
|
|
isf_cutoff = 0.005,
|
|
|
lodf_cutoff = 0.001,
|
|
|
),
|
|
|
),
|
|
|
)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/model/build.jl#L8-L65">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.optimize!" href="#UnitCommitment.optimize!"><code>UnitCommitment.optimize!</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia hljs">optimize!(model::JuMP.Model)::Nothing</code></pre><p>Solve the given unit commitment model. Unlike <code>JuMP.optimize!</code>, this uses more advanced methods to accelerate the solution process and to enforce transmission and N-1 security constraints.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/solution/optimize.jl#L5-L11">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.solution" href="#UnitCommitment.solution"><code>UnitCommitment.solution</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia hljs">solution(model::JuMP.Model)::OrderedDict</code></pre><p>Extracts the optimal solution from the UC.jl model. The model must be solved beforehand.</p><p><strong>Example</strong></p><pre><code class="language-julia hljs">UnitCommitment.optimize!(model)
|
|
|
solution = UnitCommitment.solution(model)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/solution/solution.jl#L5-L16">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.validate" href="#UnitCommitment.validate"><code>UnitCommitment.validate</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia hljs">validate(instance, solution)::Bool</code></pre><p>Verifies that the given solution is feasible for the problem. If feasible, silently returns true. In infeasible, returns false and prints the validation errors to the screen.</p><p>This function is implemented independently from the optimization model in <code>model.jl</code>, and therefore can be used to verify that the model is indeed producing valid solutions. It can also be used to verify the solutions produced by other optimization packages.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/validation/validate.jl#L15-L26">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.write" href="#UnitCommitment.write"><code>UnitCommitment.write</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia hljs">write(filename::AbstractString, solution::AbstractDict)::Nothing</code></pre><p>Write the given solution to a JSON file.</p><p><strong>Example</strong></p><pre><code class="language-julia hljs">solution = UnitCommitment.solution(model)
|
|
|
UnitCommitment.write("/tmp/output.json", solution)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/solution/write.jl#L5-L16">source</a></section></article><h2 id="Modify-instance"><a class="docs-heading-anchor" href="#Modify-instance">Modify instance</a><a id="Modify-instance-1"></a><a class="docs-heading-anchor-permalink" href="#Modify-instance" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.slice" href="#UnitCommitment.slice"><code>UnitCommitment.slice</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia hljs">slice(instance, range)</code></pre><p>Creates a new instance, with only a subset of the time periods. This function does not modify the provided instance. The initial conditions are also not modified.</p><p><strong>Example</strong></p><pre><code class="language-julia hljs"># Build a 2-hour UC instance
|
|
|
instance = UnitCommitment.read_benchmark("matpower/case118/2017-02-01")
|
|
|
modified = UnitCommitment.slice(instance, 1:2)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/transform/slice.jl#L5-L20">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.randomize!-Tuple{UnitCommitmentInstance}" href="#UnitCommitment.randomize!-Tuple{UnitCommitmentInstance}"><code>UnitCommitment.randomize!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia hljs">function randomize!(
|
|
|
instance::UnitCommitmentInstance;
|
|
|
method = UnitCommitment.XavQiuAhm2021.Randomization();
|
|
|
rng = MersenneTwister(),
|
|
|
)::Nothing</code></pre><p>Randomizes instance parameters according to the provided randomization method.</p><p><strong>Example</strong></p><pre><code class="language-julia hljs">instance = UnitCommitment.read_benchmark("matpower/case118/2017-02-01")
|
|
|
UnitCommitment.randomize!(instance)
|
|
|
model = UnitCommitment.build_model(; instance)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/transform/randomize/XavQiuAhm2021.jl#L215-L232">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.generate_initial_conditions!" href="#UnitCommitment.generate_initial_conditions!"><code>UnitCommitment.generate_initial_conditions!</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia hljs">generate_initial_conditions!(instance, optimizer)</code></pre><p>Generates feasible initial conditions for the given instance, by constructing and solving a single-period mixed-integer optimization problem, using the given optimizer. The instance is modified in-place.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/transform/initcond.jl#L7-L13">source</a></section></article><h2 id="Formulations"><a class="docs-heading-anchor" href="#Formulations">Formulations</a><a id="Formulations-1"></a><a class="docs-heading-anchor-permalink" href="#Formulations" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.Formulation" href="#UnitCommitment.Formulation"><code>UnitCommitment.Formulation</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia hljs">struct Formulation
|
|
|
prod_vars::ProductionVarsFormulation
|
|
|
pwl_costs::PiecewiseLinearCostsFormulation
|
|
|
ramping::RampingFormulation
|
|
|
startup_costs::StartupCostsFormulation
|
|
|
status_vars::StatusVarsFormulation
|
|
|
transmission::TransmissionFormulation
|
|
|
end</code></pre><p>Struct provided to <code>build_model</code> that holds various formulation components.</p><p><strong>Fields</strong></p><ul><li><code>prod_vars</code>: Formulation for the production decision variables</li><li><code>pwl_costs</code>: Formulation for the piecewise linear costs</li><li><code>ramping</code>: Formulation for ramping constraints</li><li><code>startup_costs</code>: Formulation for time-dependent start-up costs</li><li><code>status_vars</code>: Formulation for the status variables (e.g. <code>is_on</code>, <code>is_off</code>)</li><li><code>transmission</code>: Formulation for transmission and N-1 security constraints</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/model/formulations/base/structs.jl#L12-L32">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.ShiftFactorsFormulation" href="#UnitCommitment.ShiftFactorsFormulation"><code>UnitCommitment.ShiftFactorsFormulation</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia hljs">struct ShiftFactorsFormulation <: TransmissionFormulation
|
|
|
isf_cutoff::Float64 = 0.005
|
|
|
lodf_cutoff::Float64 = 0.001
|
|
|
precomputed_isf=nothing
|
|
|
precomputed_lodf=nothing
|
|
|
end</code></pre><p>Transmission formulation based on Injection Shift Factors (ISF) and Line Outage Distribution Factors (LODF). Constraints are enforced in a lazy way.</p><p><strong>Arguments</strong></p><ul><li><code>precomputed_isf</code>: the injection shift factors matrix. If not provided, it will be computed.</li><li><code>precomputed_lodf</code>: the line outage distribution factors matrix. If not provided, it will be computed.</li><li><code>isf_cutoff</code>: the cutoff that should be applied to the ISF matrix. Entries with magnitude smaller than this value will be set to zero.</li><li><code>lodf_cutoff</code>: the cutoff that should be applied to the LODF matrix. Entries with magnitude smaller than this value will be set to zero.</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/model/formulations/base/structs.jl#L60-L84">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.ArrCon2000" href="#UnitCommitment.ArrCon2000"><code>UnitCommitment.ArrCon2000</code></a> — <span class="docstring-category">Module</span></header><section><div><p>Formulation described in:</p><pre><code class="nohighlight hljs">Arroyo, J. M., & Conejo, A. J. (2000). Optimal response of a thermal unit
|
|
|
to an electricity spot market. IEEE Transactions on power systems, 15(3),
|
|
|
1098-1104. DOI: https://doi.org/10.1109/59.871739</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/model/formulations/ArrCon2000/structs.jl#L5-L11">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.CarArr2006" href="#UnitCommitment.CarArr2006"><code>UnitCommitment.CarArr2006</code></a> — <span class="docstring-category">Module</span></header><section><div><p>Formulation described in:</p><pre><code class="nohighlight hljs">Carrión, M., & Arroyo, J. M. (2006). A computationally efficient
|
|
|
mixed-integer linear formulation for the thermal unit commitment problem.
|
|
|
IEEE Transactions on power systems, 21(3), 1371-1378.
|
|
|
DOI: https://doi.org/10.1109/TPWRS.2006.876672</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/model/formulations/CarArr2006/structs.jl#L5-L12">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.DamKucRajAta2016" href="#UnitCommitment.DamKucRajAta2016"><code>UnitCommitment.DamKucRajAta2016</code></a> — <span class="docstring-category">Module</span></header><section><div><p>Formulation described in:</p><pre><code class="nohighlight hljs">Damcı-Kurt, P., Küçükyavuz, S., Rajan, D., & Atamtürk, A. (2016). A polyhedral
|
|
|
study of production ramping. Mathematical Programming, 158(1), 175-205.
|
|
|
DOI: https://doi.org/10.1007/s10107-015-0919-9</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/model/formulations/DamKucRajAta2016/structs.jl#L5-L11">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.Gar1962" href="#UnitCommitment.Gar1962"><code>UnitCommitment.Gar1962</code></a> — <span class="docstring-category">Module</span></header><section><div><p>Formulation described in:</p><pre><code class="nohighlight hljs">Garver, L. L. (1962). Power generation scheduling by integer
|
|
|
programming-development of theory. Transactions of the American Institute
|
|
|
of Electrical Engineers. Part III: Power Apparatus and Systems, 81(3), 730-734.
|
|
|
DOI: https://doi.org/10.1109/AIEEPAS.1962.4501405</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/model/formulations/Gar1962/structs.jl#L5-L13">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.KnuOstWat2018" href="#UnitCommitment.KnuOstWat2018"><code>UnitCommitment.KnuOstWat2018</code></a> — <span class="docstring-category">Module</span></header><section><div><p>Formulation described in:</p><pre><code class="nohighlight hljs">Knueven, B., Ostrowski, J., & Watson, J. P. (2018). Exploiting identical
|
|
|
generators in unit commitment. IEEE Transactions on Power Systems, 33(4),
|
|
|
4496-4507. DOI: https://doi.org/10.1109/TPWRS.2017.2783850</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/model/formulations/KnuOstWat2018/structs.jl#L5-L11">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.MorLatRam2013" href="#UnitCommitment.MorLatRam2013"><code>UnitCommitment.MorLatRam2013</code></a> — <span class="docstring-category">Module</span></header><section><div><p>Formulation described in:</p><pre><code class="nohighlight hljs">Morales-España, G., Latorre, J. M., & Ramos, A. (2013). Tight and compact
|
|
|
MILP formulation for the thermal unit commitment problem. IEEE Transactions
|
|
|
on Power Systems, 28(4), 4897-4908. DOI: https://doi.org/10.1109/TPWRS.2013.2251373</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/model/formulations/MorLatRam2013/structs.jl#L5-L11">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.PanGua2016" href="#UnitCommitment.PanGua2016"><code>UnitCommitment.PanGua2016</code></a> — <span class="docstring-category">Module</span></header><section><div><p>Formulation described in:</p><pre><code class="nohighlight hljs">Pan, K., & Guan, Y. (2016). Strong formulations for multistage stochastic
|
|
|
self-scheduling unit commitment. Operations Research, 64(6), 1482-1498.
|
|
|
DOI: https://doi.org/10.1287/opre.2016.1520</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/model/formulations/PanGua2016/structs.jl#L5-L11">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.WanHob2016" href="#UnitCommitment.WanHob2016"><code>UnitCommitment.WanHob2016</code></a> — <span class="docstring-category">Module</span></header><section><div><p>Formulation described in:</p><pre><code class="nohighlight hljs">B. Wang and B. F. Hobbs, "Real-Time Markets for Flexiramp: A Stochastic
|
|
|
Unit Commitment-Based Analysis," in IEEE Transactions on Power Systems,
|
|
|
vol. 31, no. 2, pp. 846-860, March 2016, doi: 10.1109/TPWRS.2015.2411268.</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/model/formulations/WanHob2016/structs.jl#L5-L11">source</a></section></article><h2 id="Solution-Methods"><a class="docs-heading-anchor" href="#Solution-Methods">Solution Methods</a><a id="Solution-Methods-1"></a><a class="docs-heading-anchor-permalink" href="#Solution-Methods" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.XavQiuWanThi2019.Method" href="#UnitCommitment.XavQiuWanThi2019.Method"><code>UnitCommitment.XavQiuWanThi2019.Method</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia hljs">mutable struct Method
|
|
|
time_limit::Float64
|
|
|
gap_limit::Float64
|
|
|
two_phase_gap::Bool
|
|
|
max_violations_per_line::Int
|
|
|
max_violations_per_period::Int
|
|
|
end</code></pre><p>Lazy constraint solution method described in:</p><pre><code class="nohighlight hljs">Xavier, A. S., Qiu, F., Wang, F., & Thimmapuram, P. R. (2019). Transmission
|
|
|
constraint filtering in large-scale security-constrained unit commitment.
|
|
|
IEEE Transactions on Power Systems, 34(3), 2457-2460.
|
|
|
DOI: https://doi.org/10.1109/TPWRS.2019.2892620</code></pre><p><strong>Fields</strong></p><ul><li><code>time_limit</code>: the time limit over the entire optimization procedure.</li><li><code>gap_limit</code>: the desired relative optimality gap. Only used when <code>two_phase_gap=true</code>.</li><li><code>two_phase_gap</code>: if true, solve the problem with large gap tolerance first, then reduce the gap tolerance when no further violated constraints are found.</li><li><code>max_violations_per_line</code>: maximum number of violated transmission constraints to add to the formulation per transmission line.</li><li><code>max_violations_per_period</code>: maximum number of violated transmission constraints to add to the formulation per time period.</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/solution/methods/XavQiuWanThi2019/structs.jl#L7-L40">source</a></section></article><h2 id="Randomization-Methods"><a class="docs-heading-anchor" href="#Randomization-Methods">Randomization Methods</a><a id="Randomization-Methods-1"></a><a class="docs-heading-anchor-permalink" href="#Randomization-Methods" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="UnitCommitment.XavQiuAhm2021.Randomization" href="#UnitCommitment.XavQiuAhm2021.Randomization"><code>UnitCommitment.XavQiuAhm2021.Randomization</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia hljs">struct Randomization
|
|
|
cost = Uniform(0.95, 1.05)
|
|
|
load_profile_mu = [...]
|
|
|
load_profile_sigma = [...]
|
|
|
load_share = Uniform(0.90, 1.10)
|
|
|
peak_load = Uniform(0.6 * 0.925, 0.6 * 1.075)
|
|
|
randomize_costs = true
|
|
|
randomize_load_profile = true
|
|
|
randomize_load_share = true
|
|
|
end</code></pre><p>Randomization method that changes: (1) production and startup costs, (2) share of load coming from each bus, (3) peak system load, and (4) temporal load profile, as follows:</p><ol><li><p><strong>Production and startup costs:</strong> For each unit <code>u</code>, the vectors <code>u.min_power_cost</code> and <code>u.cost_segments</code> are multiplied by a constant <code>α[u]</code> sampled from the provided <code>cost</code> distribution. If <code>randomize_costs</code> is false, skips this step.</p></li><li><p><strong>Load share:</strong> For each bus <code>b</code> and time <code>t</code>, the value <code>b.load[t]</code> is multiplied by <code>(β[b] * b.load[t]) / sum(β[b2] * b2.load[t] for b2 in buses)</code>, where <code>β[b]</code> is sampled from the provided <code>load_share</code> distribution. If <code>randomize_load_share</code> is false, skips this step.</p></li><li><p><strong>Peak system load and temporal load profile:</strong> Sets the peak load to <code>ρ * C</code>, where <code>ρ</code> is sampled from <code>peak_load</code> and <code>C</code> is the maximum system capacity, at any time. Also scales the loads of all buses, so that <code>system_load[t+1]</code> becomes equal to <code>system_load[t] * γ[t]</code>, where <code>γ[t]</code> is sampled from <code>Normal(load_profile_mu[t], load_profile_sigma[t])</code>.</p><p>The system load for the first time period is set so that the peak load matches <code>ρ * C</code>. If <code>load_profile_sigma</code> and <code>load_profile_mu</code> have fewer elements than <code>instance.time</code>, wraps around. If <code>randomize_load_profile</code> is false, skips this step.</p></li></ol><p>The default parameters were obtained based on an analysis of publicly available bid and hourly data from PJM, corresponding to the month of January, 2017. For more details, see Section 4.2 of the paper.</p><p><strong>References</strong></p><ul><li><strong>Xavier, Álinson S., Feng Qiu, and Shabbir Ahmed.</strong> <em>"Learning to solve large-scale security-constrained unit commitment problems."</em> INFORMS Journal on Computing 33.2 (2021): 739-756. DOI: 10.1287/ijoc.2020.0976</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/ANL-CEEESA/UnitCommitment.jl/blob/5fef01cd997456191424847a95ccf1d8ec060b5d/src/transform/randomize/XavQiuAhm2021.jl#L10-L58">source</a></section></article></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../model/">« JuMP Model</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.21 on <span class="colophon-date" title="Sunday 17 July 2022 15:54">Sunday 17 July 2022</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|