mirror of
https://github.com/ANL-CEEESA/UnitCommitment.jl.git
synced 2025-12-06 00:08:52 -06:00
UnitCommitmentInstance: add _by_name fields
This commit is contained in:
@@ -266,15 +266,20 @@ function _from_json(json; repair = true)
|
|||||||
end
|
end
|
||||||
|
|
||||||
instance = UnitCommitmentInstance(
|
instance = UnitCommitmentInstance(
|
||||||
T,
|
buses_by_name = Dict(b.name => b for b in buses),
|
||||||
power_balance_penalty,
|
buses = buses,
|
||||||
shortfall_penalty,
|
contingencies_by_name = Dict(c.name => c for c in contingencies),
|
||||||
units,
|
contingencies = contingencies,
|
||||||
buses,
|
lines_by_name = Dict(l.name => l for l in lines),
|
||||||
lines,
|
lines = lines,
|
||||||
reserves,
|
power_balance_penalty = power_balance_penalty,
|
||||||
contingencies,
|
price_sensitive_loads_by_name = Dict(ps.name => ps for ps in loads),
|
||||||
loads,
|
price_sensitive_loads = loads,
|
||||||
|
reserves = reserves,
|
||||||
|
shortfall_penalty = shortfall_penalty,
|
||||||
|
time = T,
|
||||||
|
units_by_name = Dict(g.name => g for g in units),
|
||||||
|
units = units,
|
||||||
)
|
)
|
||||||
if repair
|
if repair
|
||||||
UnitCommitment.repair!(instance)
|
UnitCommitment.repair!(instance)
|
||||||
|
|||||||
@@ -69,17 +69,21 @@ mutable struct PriceSensitiveLoad
|
|||||||
revenue::Vector{Float64}
|
revenue::Vector{Float64}
|
||||||
end
|
end
|
||||||
|
|
||||||
mutable struct UnitCommitmentInstance
|
Base.@kwdef mutable struct UnitCommitmentInstance
|
||||||
time::Int
|
buses_by_name::Dict{AbstractString,Bus}
|
||||||
power_balance_penalty::Vector{Float64}
|
|
||||||
"Penalty for failing to meet reserve requirement."
|
|
||||||
shortfall_penalty::Vector{Float64}
|
|
||||||
units::Vector{Unit}
|
|
||||||
buses::Vector{Bus}
|
buses::Vector{Bus}
|
||||||
lines::Vector{TransmissionLine}
|
contingencies_by_name::Dict{AbstractString,Contingency}
|
||||||
reserves::Reserves
|
|
||||||
contingencies::Vector{Contingency}
|
contingencies::Vector{Contingency}
|
||||||
|
lines_by_name::Dict{AbstractString,TransmissionLine}
|
||||||
|
lines::Vector{TransmissionLine}
|
||||||
|
power_balance_penalty::Vector{Float64}
|
||||||
|
price_sensitive_loads_by_name::Dict{AbstractString,PriceSensitiveLoad}
|
||||||
price_sensitive_loads::Vector{PriceSensitiveLoad}
|
price_sensitive_loads::Vector{PriceSensitiveLoad}
|
||||||
|
reserves::Reserves
|
||||||
|
shortfall_penalty::Vector{Float64}
|
||||||
|
time::Int
|
||||||
|
units_by_name::Dict{AbstractString,Unit}
|
||||||
|
units::Vector{Unit}
|
||||||
end
|
end
|
||||||
|
|
||||||
function Base.show(io::IO, instance::UnitCommitmentInstance)
|
function Base.show(io::IO, instance::UnitCommitmentInstance)
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ using UnitCommitment, LinearAlgebra, Cbc, JuMP, JSON, GZip
|
|||||||
@test instance.lines[5].normal_flow_limit == [1e8 for t in 1:4]
|
@test instance.lines[5].normal_flow_limit == [1e8 for t in 1:4]
|
||||||
@test instance.lines[5].emergency_flow_limit == [1e8 for t in 1:4]
|
@test instance.lines[5].emergency_flow_limit == [1e8 for t in 1:4]
|
||||||
@test instance.lines[5].flow_limit_penalty == [5e3 for t in 1:4]
|
@test instance.lines[5].flow_limit_penalty == [5e3 for t in 1:4]
|
||||||
|
@test instance.lines_by_name["l5"].name == "l5"
|
||||||
|
|
||||||
@test instance.lines[1].name == "l1"
|
@test instance.lines[1].name == "l1"
|
||||||
@test instance.lines[1].source.name == "b1"
|
@test instance.lines[1].source.name == "b1"
|
||||||
@@ -34,6 +35,7 @@ using UnitCommitment, LinearAlgebra, Cbc, JuMP, JSON, GZip
|
|||||||
|
|
||||||
@test instance.buses[9].name == "b9"
|
@test instance.buses[9].name == "b9"
|
||||||
@test instance.buses[9].load == [35.36638, 33.25495, 31.67138, 31.14353]
|
@test instance.buses[9].load == [35.36638, 33.25495, 31.67138, 31.14353]
|
||||||
|
@test instance.buses_by_name["b9"].name == "b9"
|
||||||
|
|
||||||
unit = instance.units[1]
|
unit = instance.units[1]
|
||||||
@test unit.name == "g1"
|
@test unit.name == "g1"
|
||||||
@@ -62,6 +64,7 @@ using UnitCommitment, LinearAlgebra, Cbc, JuMP, JSON, GZip
|
|||||||
@test unit.startup_categories[1].cost == 1000.0
|
@test unit.startup_categories[1].cost == 1000.0
|
||||||
@test unit.startup_categories[2].cost == 1500.0
|
@test unit.startup_categories[2].cost == 1500.0
|
||||||
@test unit.startup_categories[3].cost == 2000.0
|
@test unit.startup_categories[3].cost == 2000.0
|
||||||
|
@test instance.units_by_name["g1"].name == "g1"
|
||||||
|
|
||||||
unit = instance.units[2]
|
unit = instance.units[2]
|
||||||
@test unit.name == "g2"
|
@test unit.name == "g2"
|
||||||
@@ -92,12 +95,15 @@ using UnitCommitment, LinearAlgebra, Cbc, JuMP, JSON, GZip
|
|||||||
|
|
||||||
@test instance.contingencies[1].lines == [instance.lines[1]]
|
@test instance.contingencies[1].lines == [instance.lines[1]]
|
||||||
@test instance.contingencies[1].units == []
|
@test instance.contingencies[1].units == []
|
||||||
|
@test instance.contingencies[1].name == "c1"
|
||||||
|
@test instance.contingencies_by_name["c1"].name == "c1"
|
||||||
|
|
||||||
load = instance.price_sensitive_loads[1]
|
load = instance.price_sensitive_loads[1]
|
||||||
@test load.name == "ps1"
|
@test load.name == "ps1"
|
||||||
@test load.bus.name == "b3"
|
@test load.bus.name == "b3"
|
||||||
@test load.revenue == [100.0 for t in 1:4]
|
@test load.revenue == [100.0 for t in 1:4]
|
||||||
@test load.demand == [50.0 for t in 1:4]
|
@test load.demand == [50.0 for t in 1:4]
|
||||||
|
@test instance.price_sensitive_loads_by_name["ps1"].name == "ps1"
|
||||||
end
|
end
|
||||||
|
|
||||||
@testset "read_benchmark sub-hourly" begin
|
@testset "read_benchmark sub-hourly" begin
|
||||||
|
|||||||
Reference in New Issue
Block a user