mirror of
https://github.com/ANL-CEEESA/UnitCommitment.jl.git
synced 2025-12-06 00:08:52 -06:00
Rename 'production' to 'thermal production'
This commit is contained in:
@@ -18,9 +18,9 @@ function read_egret_solution(path::String)::OrderedDict
|
|||||||
|
|
||||||
solution = OrderedDict()
|
solution = OrderedDict()
|
||||||
is_on = solution["Is on"] = OrderedDict()
|
is_on = solution["Is on"] = OrderedDict()
|
||||||
production = solution["Production (MW)"] = OrderedDict()
|
production = solution["Thermal production (MW)"] = OrderedDict()
|
||||||
reserve = solution["Reserve (MW)"] = OrderedDict()
|
reserve = solution["Reserve (MW)"] = OrderedDict()
|
||||||
production_cost = solution["Production cost (\$)"] = OrderedDict()
|
production_cost = solution["Thermal production cost (\$)"] = OrderedDict()
|
||||||
startup_cost = solution["Startup cost (\$)"] = OrderedDict()
|
startup_cost = solution["Startup cost (\$)"] = OrderedDict()
|
||||||
|
|
||||||
for (gen_name, gen_dict) in egret["elements"]["generator"]
|
for (gen_name, gen_dict) in egret["elements"]["generator"]
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ solution. Useful for computing LMPs.
|
|||||||
"""
|
"""
|
||||||
function fix!(model::JuMP.Model, solution::AbstractDict)::Nothing
|
function fix!(model::JuMP.Model, solution::AbstractDict)::Nothing
|
||||||
instance, T = model[:instance], model[:instance].time
|
instance, T = model[:instance], model[:instance].time
|
||||||
"Production (MW)" ∈ keys(solution) ? solution = Dict("s1" => solution) :
|
"Thermal production (MW)" ∈ keys(solution) ?
|
||||||
nothing
|
solution = Dict("s1" => solution) : nothing
|
||||||
is_on = model[:is_on]
|
is_on = model[:is_on]
|
||||||
prod_above = model[:prod_above]
|
prod_above = model[:prod_above]
|
||||||
reserve = model[:reserve]
|
reserve = model[:reserve]
|
||||||
@@ -20,7 +20,7 @@ function fix!(model::JuMP.Model, solution::AbstractDict)::Nothing
|
|||||||
for t in 1:T
|
for t in 1:T
|
||||||
is_on_value = round(solution[sc.name]["Is on"][g.name][t])
|
is_on_value = round(solution[sc.name]["Is on"][g.name][t])
|
||||||
prod_value = round(
|
prod_value = round(
|
||||||
solution[sc.name]["Production (MW)"][g.name][t],
|
solution[sc.name]["Thermal production (MW)"][g.name][t],
|
||||||
digits = 5,
|
digits = 5,
|
||||||
)
|
)
|
||||||
JuMP.fix(is_on[g.name, t], is_on_value, force = true)
|
JuMP.fix(is_on[g.name, t], is_on_value, force = true)
|
||||||
|
|||||||
@@ -66,10 +66,10 @@ function solution(model::JuMP.Model)::OrderedDict
|
|||||||
for sc in instance.scenarios
|
for sc in instance.scenarios
|
||||||
sol[sc.name] = OrderedDict()
|
sol[sc.name] = OrderedDict()
|
||||||
if !isempty(sc.thermal_units)
|
if !isempty(sc.thermal_units)
|
||||||
sol[sc.name]["Production (MW)"] = OrderedDict(
|
sol[sc.name]["Thermal production (MW)"] = OrderedDict(
|
||||||
g.name => production(g, sc) for g in sc.thermal_units
|
g.name => production(g, sc) for g in sc.thermal_units
|
||||||
)
|
)
|
||||||
sol[sc.name]["Production cost (\$)"] = OrderedDict(
|
sol[sc.name]["Thermal production cost (\$)"] = OrderedDict(
|
||||||
g.name => production_cost(g, sc) for g in sc.thermal_units
|
g.name => production_cost(g, sc) for g in sc.thermal_units
|
||||||
)
|
)
|
||||||
sol[sc.name]["Startup cost (\$)"] = OrderedDict(
|
sol[sc.name]["Startup cost (\$)"] = OrderedDict(
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ function validate(
|
|||||||
instance::UnitCommitmentInstance,
|
instance::UnitCommitmentInstance,
|
||||||
solution::Union{Dict,OrderedDict},
|
solution::Union{Dict,OrderedDict},
|
||||||
)::Bool
|
)::Bool
|
||||||
"Production (MW)" ∈ keys(solution) ? solution = Dict("s1" => solution) :
|
"Thermal production (MW)" ∈ keys(solution) ?
|
||||||
nothing
|
solution = Dict("s1" => solution) : nothing
|
||||||
err_count = 0
|
err_count = 0
|
||||||
err_count += _validate_units(instance, solution)
|
err_count += _validate_units(instance, solution)
|
||||||
err_count += _validate_reserve_and_demand(instance, solution)
|
err_count += _validate_reserve_and_demand(instance, solution)
|
||||||
@@ -46,7 +46,7 @@ function _validate_units(instance::UnitCommitmentInstance, solution; tol = 0.01)
|
|||||||
err_count = 0
|
err_count = 0
|
||||||
for sc in instance.scenarios
|
for sc in instance.scenarios
|
||||||
for unit in sc.thermal_units
|
for unit in sc.thermal_units
|
||||||
production = solution[sc.name]["Production (MW)"][unit.name]
|
production = solution[sc.name]["Thermal production (MW)"][unit.name]
|
||||||
reserve = [0.0 for _ in 1:instance.time]
|
reserve = [0.0 for _ in 1:instance.time]
|
||||||
spinning_reserves =
|
spinning_reserves =
|
||||||
[r for r in unit.reserves if r.type == "spinning"]
|
[r for r in unit.reserves if r.type == "spinning"]
|
||||||
@@ -57,7 +57,7 @@ function _validate_units(instance::UnitCommitmentInstance, solution; tol = 0.01)
|
|||||||
)
|
)
|
||||||
end
|
end
|
||||||
actual_production_cost =
|
actual_production_cost =
|
||||||
solution[sc.name]["Production cost (\$)"][unit.name]
|
solution[sc.name]["Thermal production cost (\$)"][unit.name]
|
||||||
actual_startup_cost =
|
actual_startup_cost =
|
||||||
solution[sc.name]["Startup cost (\$)"][unit.name]
|
solution[sc.name]["Startup cost (\$)"][unit.name]
|
||||||
is_on = bin(solution[sc.name]["Is on"][unit.name])
|
is_on = bin(solution[sc.name]["Is on"][unit.name])
|
||||||
@@ -323,7 +323,7 @@ function _validate_reserve_and_demand(instance, solution, tol = 0.01)
|
|||||||
)
|
)
|
||||||
end
|
end
|
||||||
production = sum(
|
production = sum(
|
||||||
solution[sc.name]["Production (MW)"][g.name][t] for
|
solution[sc.name]["Thermal production (MW)"][g.name][t] for
|
||||||
g in sc.thermal_units
|
g in sc.thermal_units
|
||||||
)
|
)
|
||||||
if "Load curtail (MW)" in keys(solution)
|
if "Load curtail (MW)" in keys(solution)
|
||||||
|
|||||||
@@ -7,12 +7,13 @@ using UnitCommitment
|
|||||||
@testset "read_egret_solution" begin
|
@testset "read_egret_solution" begin
|
||||||
solution =
|
solution =
|
||||||
UnitCommitment.read_egret_solution("$FIXTURES/egret_output.json.gz")
|
UnitCommitment.read_egret_solution("$FIXTURES/egret_output.json.gz")
|
||||||
for attr in ["Is on", "Production (MW)", "Production cost (\$)"]
|
for attr in
|
||||||
|
["Is on", "Thermal production (MW)", "Thermal production cost (\$)"]
|
||||||
@test attr in keys(solution)
|
@test attr in keys(solution)
|
||||||
@test "115_STEAM_1" in keys(solution[attr])
|
@test "115_STEAM_1" in keys(solution[attr])
|
||||||
@test length(solution[attr]["115_STEAM_1"]) == 48
|
@test length(solution[attr]["115_STEAM_1"]) == 48
|
||||||
end
|
end
|
||||||
@test solution["Production cost (\$)"]["315_CT_6"][15:20] ==
|
@test solution["Thermal production cost (\$)"]["315_CT_6"][15:20] ==
|
||||||
[0.0, 0.0, 884.44, 1470.71, 1470.71, 884.44]
|
[0.0, 0.0, 884.44, 1470.71, 1470.71, 884.44]
|
||||||
@test solution["Startup cost (\$)"]["315_CT_6"][15:20] ==
|
@test solution["Startup cost (\$)"]["315_CT_6"][15:20] ==
|
||||||
[0.0, 0.0, 5665.23, 0.0, 0.0, 0.0]
|
[0.0, 0.0, 5665.23, 0.0, 0.0, 0.0]
|
||||||
|
|||||||
Reference in New Issue
Block a user