You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
UnitCommitment.jl/0.3/api/index.html

88 lines
30 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!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 &amp; 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 &amp; 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(&quot;/path/to/input.json.gz&quot;)</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(&quot;matpower/case3375wp/2017-02-01&quot;)</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&#39;s disabled by default.</li></ul><p><strong>Examples</strong></p><pre><code class="language-julia hljs"># Read benchmark instance
instance = UnitCommitment.read_benchmark(&quot;matpower/case118/2017-02-01&quot;)
# 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(&quot;/tmp/output.json&quot;, 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(&quot;matpower/case118/2017-02-01&quot;)
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(&quot;matpower/case118/2017-02-01&quot;)
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 &lt;: 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., &amp; 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., &amp; 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., &amp; 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., &amp; 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., &amp; 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., &amp; 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, &quot;Real-Time Markets for Flexiramp: A Stochastic
Unit Commitment-Based Analysis,&quot; 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., &amp; 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>&quot;Learning to solve large-scale security-constrained unit commitment problems.&quot;</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>