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.
99 lines
2.7 KiB
99 lines
2.7 KiB
# UnitCommitment.jl: Optimization Package for Security-Constrained Unit Commitment
|
|
# Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved.
|
|
# Released under the modified BSD license. See COPYING.md for more details.
|
|
|
|
using UnitCommitment
|
|
using JuMP
|
|
using Cbc
|
|
using JSON
|
|
import UnitCommitment:
|
|
ArrCon2000,
|
|
CarArr2006,
|
|
DamKucRajAta2016,
|
|
Formulation,
|
|
Gar1962,
|
|
KnuOstWat2018,
|
|
MorLatRam2013,
|
|
PanGua2016,
|
|
XavQiuWanThi2019
|
|
|
|
if ENABLE_LARGE_TESTS
|
|
using Gurobi
|
|
end
|
|
|
|
function _small_test(formulation::Formulation; dump::Bool = false)::Nothing
|
|
instance = UnitCommitment.read_benchmark("test/case14")
|
|
model = UnitCommitment.build_model(
|
|
instance = instance,
|
|
formulation = formulation,
|
|
optimizer = Cbc.Optimizer,
|
|
variable_names = true,
|
|
)
|
|
UnitCommitment.optimize!(model)
|
|
solution = UnitCommitment.solution(model)
|
|
if dump
|
|
open("/tmp/ucjl.json", "w") do f
|
|
return write(f, JSON.json(solution, 2))
|
|
end
|
|
write_to_file(model, "/tmp/ucjl.lp")
|
|
end
|
|
@test UnitCommitment.validate(instance, solution)
|
|
return
|
|
end
|
|
|
|
function _large_test(formulation::Formulation)::Nothing
|
|
instance =
|
|
UnitCommitment.read_benchmark("pglib-uc/ca/Scenario400_reserves_1")
|
|
model = UnitCommitment.build_model(
|
|
instance = instance,
|
|
formulation = formulation,
|
|
optimizer = Gurobi.Optimizer,
|
|
)
|
|
UnitCommitment.optimize!(
|
|
model,
|
|
XavQiuWanThi2019.Method(two_phase_gap = false, gap_limit = 0.1),
|
|
)
|
|
solution = UnitCommitment.solution(model)
|
|
@test UnitCommitment.validate(instance, solution)
|
|
return
|
|
end
|
|
|
|
function _test(formulation::Formulation; dump::Bool = false)::Nothing
|
|
_small_test(formulation; dump)
|
|
if ENABLE_LARGE_TESTS
|
|
_large_test(formulation)
|
|
end
|
|
end
|
|
|
|
@testset "formulations" begin
|
|
@testset "default" begin
|
|
_test(Formulation())
|
|
end
|
|
@testset "ArrCon2000" begin
|
|
_test(Formulation(ramping = ArrCon2000.Ramping()))
|
|
end
|
|
@testset "DamKucRajAta2016" begin
|
|
_test(Formulation(ramping = DamKucRajAta2016.Ramping()))
|
|
end
|
|
@testset "MorLatRam2013" begin
|
|
_test(
|
|
Formulation(
|
|
ramping = MorLatRam2013.Ramping(),
|
|
startup_costs = MorLatRam2013.StartupCosts(),
|
|
),
|
|
)
|
|
end
|
|
@testset "PanGua2016" begin
|
|
_test(Formulation(ramping = PanGua2016.Ramping()))
|
|
end
|
|
@testset "Gar1962" begin
|
|
_test(Formulation(pwl_costs = Gar1962.PwlCosts()))
|
|
end
|
|
@testset "CarArr2006" begin
|
|
_test(Formulation(pwl_costs = CarArr2006.PwlCosts()))
|
|
end
|
|
@testset "KnuOstWat2018" begin
|
|
_test(Formulation(pwl_costs = KnuOstWat2018.PwlCosts()))
|
|
end
|
|
end
|