Minor changes to README.md; rename LICENSE.md

pull/1/head
Alinson S. Xavier 5 years ago
parent b2480ef356
commit a070359b5d

@ -3,24 +3,30 @@
# UnitCommitment.jl # UnitCommitment.jl
**UnitCommitment.jl** is an optimization package for the Security-Constrained Unit Commitment Problem (SCUC), a fundamental optimization problem in power systems which is used, for example, to clear the day-ahead electricity markets. The problem asks for the most cost-effective power generation schedule under a number of physical, operational and economic constraints. **UnitCommitment.jl** (UC.jl) is an optimization package for the Security-Constrained Unit Commitment Problem (SCUC), a fundamental optimization problem in power systems used, for example, to clear the day-ahead electricity markets. The package provides benchmark instances for the problem and JuMP implementations of state-of-the-art mixed-integer programming formulations.
### Package Components ### Package Components
* **Data Format:** The package proposes an extensible and fully-documented JSON-based data specification format for SCUC, developed in collaboration with Independent System Operators (ISOs), which describes the most important aspects of the problem. * **Data Format:** The package proposes an extensible and fully-documented JSON-based data specification format for SCUC, developed in collaboration with Independent System Operators (ISOs), which describes the most important aspects of the problem. The format supports all the most common generator characteristics (including ramping, piecewise-linear production cost curves and time-dependent startup costs), as well as operating reserves, price-sensitive loads, transmission networks and contingencies.
* **Benchmark Instances:** The package provides a diverse collection of large-scale benchmark instances collected from the literature and extended to make them more challenging and realistic, based on publicly available data. * **Benchmark Instances:** The package provides a diverse collection of large-scale benchmark instances collected from the literature and extended to make them more challenging and realistic.
* **Model Implementation**: The package provides a Julia/JuMP implementation of state-of-the-art formulations and solution methods for SCUC. Our goal is to keep this implementation up-to-date, as new methods are proposed in the literature. * **Model Implementation**: The package provides a Julia/JuMP implementation of state-of-the-art formulations and solution methods for SCUC. Our goal is to keep this implementation up-to-date, as new methods are proposed in the literature.
* **Benchmark Tools:** The package provides automated benchmark scripts to accurately evaluate the performance impact of proposed code changes. * **Benchmark Tools:** The package provides automated benchmark scripts to accurately evaluate the performance impact of proposed code changes.
### Documentation ### Documentation
* [Installation Guide](https://axavier.org/projects/UnitCommitment.jl/install/) * [Usage](https://axavier.org/projects/UnitCommitment.jl/usage/)
* [Data Format Specification](https://axavier.org/projects/UnitCommitment.jl/format/) * [Data Format](https://axavier.org/projects/UnitCommitment.jl/format/)
### Authors ### Authors
* **Alinson Santos Xavier,** Argonne National Laboratory * **Alinson Santos Xavier** (Argonne National Laboratory)
* **Feng Qiu,** Argonne National Laboratory * **Feng Qiu** (Argonne National Laboratory)
### Collaborators ### Acknowledgments
* **Yonghong Chen,** Midcontinent Independent System Operator
* **Feng Pan,** Pacific Northwest National Laboratory * We would like to thank **Aleksandr M. Kazachkov** (University of Florida), **Yonghong Chen** (Midcontinent Independent System Operator), **Feng Pan** (Pacific Northwest National Laboratory) for valuable feedback on early versions of this package.
* Based upon work supported by **Laboratory Directed Research and Development** (LDRD) funding from Argonne National Laboratory, provided by the Director, Office of Science, of the U.S. Department of Energy under Contract No. DE-AC02-06CH11357.
### License
Released under the modified BSD license. See `LICENSE.md` for more details.

@ -5,8 +5,8 @@ repo_url: https://github.com/
edit_uri: edit/master/src/docs/ edit_uri: edit/master/src/docs/
nav: nav:
- Home: index.md - Home: index.md
- Install: install.md - Usage: usage.md
- Data: format.md - Format: format.md
plugins: plugins:
- search - search
markdown_extensions: markdown_extensions:

@ -1,23 +1,29 @@
# UnitCommitment.jl # UnitCommitment.jl
**UnitCommitment.jl** is an optimization package for the Security-Constrained Unit Commitment Problem (SCUC), a fundamental optimization problem in power systems which is used, for example, to clear the day-ahead electricity markets. The problem asks for the most cost-effective power generation schedule under a number of physical, operational and economic constraints. **UnitCommitment.jl** (UC.jl) is an optimization package for the Security-Constrained Unit Commitment Problem (SCUC), a fundamental optimization problem in power systems used, for example, to clear the day-ahead electricity markets. The package provides benchmark instances for the problem and JuMP implementations of state-of-the-art mixed-integer programming formulations.
### Package Components ### Package Components
* **Data Format:** The package proposes an extensible and fully-documented JSON-based data specification format for SCUC, developed in collaboration with Independent System Operators (ISOs), which describes the most important aspects of the problem. * **Data Format:** The package proposes an extensible and fully-documented JSON-based data specification format for SCUC, developed in collaboration with Independent System Operators (ISOs), which describes the most important aspects of the problem. The format supports all the most common generator characteristics (including ramping, piecewise-linear production cost curves and time-dependent startup costs), as well as operating reserves, price-sensitive loads, transmission networks and contingencies.
* **Benchmark Instances:** The package provides a diverse collection of large-scale benchmark instances collected from the literature and extended to make them more challenging and realistic, based on publicly available data from ISOs. * **Benchmark Instances:** The package provides a diverse collection of large-scale benchmark instances collected from the literature and extended to make them more challenging and realistic.
* **Model Implementation**: The package provides a Julia/JuMP implementation of state-of-the-art formulations and solution methods for SCUC. Our goal is to keep this implementation up-to-date, as new methods are proposed in the literature. * **Model Implementation**: The package provides a Julia/JuMP implementation of state-of-the-art formulations and solution methods for SCUC. Our goal is to keep this implementation up-to-date, as new methods are proposed in the literature.
* **Benchmark Tools:** The package provides automated benchmark scripts to accurately evaluate the performance impact of proposed code changes. * **Benchmark Tools:** The package provides automated benchmark scripts to accurately evaluate the performance impact of proposed code changes.
### Contents ### Documentation
* [Installation Guide](install.md) * [Usage](usage.md)
* [Data Format Specification](format.md) * [Data Format](format.md)
### Authors ### Authors
* **Alinson Santos Xavier,** Argonne National Laboratory * **Alinson Santos Xavier** (Argonne National Laboratory)
* **Feng Qiu,** Argonne National Laboratory * **Feng Qiu** (Argonne National Laboratory)
### Collaborators ### Acknowledgments
* **Yonghong Chen,** Midcontinent Independent System Operator
* **Feng Pan,** Pacific Northwest National Laboratory * We would like to thank **Aleksandr M. Kazachkov** (University of Florida), **Yonghong Chen** (Midcontinent Independent System Operator), **Feng Pan** (Pacific Northwest National Laboratory) for valuable feedback on early versions of this package.
* Based upon work supported by **Laboratory Directed Research and Development** (LDRD) funding from Argonne National Laboratory, provided by the Director, Office of Science, of the U.S. Department of Energy under Contract No. DE-AC02-06CH11357.
### License
Released under the modified BSD license. See `LICENSE.md` for more details.

@ -1,21 +0,0 @@
# Installation Guide
This package was tested and developed with [Julia 1.4](https://julialang.org/). To install Julia, please
follow the [installation guide on their website](https://julialang.org/downloads/platform.html).
To install `UnitCommitment.jl`, run the Julia interpreter, type `]` to open the
package manager, then type:
```text
pkg> add https://github.com/ANL-CEEESA/UnitCommitment.jl.git
```
To test that the package has been correctly installed, run:
```text
pkg> test UnitCommitment
```
If all tests pass, the package should now be ready to be used by any Julia script on the machine. To try it out in the julia interpreter hit `backspace` to return to the regular interpreter, and type the following command:
```julia
using UnitCommitment
```

@ -1,81 +0,0 @@
Benchmark Solver
================
Solving an instance of the Unit Commitment problem typically involves more
than simply building a Mixed-Integer Linear Programming and handing it over to the
solver. Since the number of transmission and N-1 security constraints can
easily exceed hundreds of millions for large instances of the problem, it is often
necessary to iterate between MILP optimization and contingency screening, so
that only necessary transmission constraints are added to the MILP.
`UnitCommitment.jl` includes a fast implementation of the contingency
screening method described in
[[1]](https://doi.org/10.1109/TPWRS.2019.2892620), which is able to
efficiently handle even ISO-scale instances of the problem. The method makes
use of Injection Shift Factors (ISFs) and Line Outage Distribution Factors
(LODFs) to model DC power flows and N-1 contingencies. If Julia is configured
to use multiple threads (through the environment variable `JULIA_NUM_THREADS`)
then multiple contingency scenarios are evaluated in parallel.
Usage
-----
To solve one of the benchmark instances using the included benchmark solver, use the method `UnitCommitment.solve`
as shown in the example below.
julia> UnitCommitment.solve("ieee_rts/case118")
[ Info: Loading instance: ieee_rts/case118
[ Info: 54 units
[ Info: 118 buses
[ Info: 186 lines
[ Info: Scaling problem (0.6 demands, 1.0 limits)...
[ Info: Using Cbc as MILP solver (0.001 gap, 4 threads)
[ Info: Computing sensitivity factors (0.001 ISF cutoff, 0.0001 LODF cutoff)...
[ Info: Building MILP model (24 hours, 0.01 reserve)...
[ Info: Optimizing...
[ Info: Optimal value: 4.033106e+06
[ Info: Solved in 8.73 seconds
With default settings, the solver does not consider any transmission or
security constraints, and the peak load is automatically set to 60% of the
installed capacity of the system. These, and many other settings, can be
configured using keyword arguments. See the reference section below for more
details. Sample usage:
julia> UnitCommitment.solve("ieee_rts/case118", demand_scale=0.7, security=true)
[ Info: Loading instance: ieee_rts/case118
[ Info: 54 units
[ Info: 118 buses
[ Info: 186 lines
[ Info: Scaling problem (0.7 demands, 1.0 limits)...
[ Info: Using Cbc as MILP solver (0.001 gap, 4 threads)
[ Info: Computing sensitivity factors (0.001 ISF cutoff, 0.0001 LODF cutoff)...
[ Info: Building MILP model (24 hours, 0.01 reserve)...
[ Info: Optimizing...
[ Info: Verifying flow constraints...
[ Info: Optimal value: 4.888740e+06
[ Info: Solved in 4.50 seconds
When transmission or N-1 security constraints are activated, the solver uses an
iterative method to lazily enforce them. See [this
paper](https://doi.org/10.1109/TPWRS.2019.2892620) for a detailed description
of the method. Injection Shift Factors (ISF) and Line Outage Distribution
Factors (LODF) are used for the computation of DC power flows.
!!! note
Many of the benchmark instances were not originally designed for N-1
security-constrained studies, and may become infeasible if these constraints
are enforced. To avoid infeasibilities, the transmission limits can be
increased through the keyword argument `limit_scale`.
By default, the MILP is solved using [Cbc, the COIN-OR Branch and Cut
solver](https://github.com/coin-or/Cbc). If `UnitCommitment` is loaded after
either [CPLEX](https://github.com/JuliaOpt/CPLEX.jl) or
[SCIP](https://github.com/SCIP-Interfaces/SCIP.jl), then these solvers will be
used instead. A detailed solver log can be displayed by setting `verbose=true`.
## Reference
```@docs
UnitCommitment.solve
```
Loading…
Cancel
Save