added commitment status to thermal

This commit is contained in:
Jun He
2023-04-22 14:02:03 -04:00
parent b71a1c3d5f
commit baf529a15d
5 changed files with 43 additions and 1 deletions

View File

@@ -282,6 +282,12 @@ function _from_json(json; repair = true)::UnitCommitmentScenario
initial_status *= time_multiplier
end
# Read commitment status
commitment_status = scalar(
dict["Commitment status"],
default = Vector{Union{Bool,Nothing}}(nothing, T),
)
unit = ThermalUnit(
unit_name,
bus,
@@ -302,6 +308,7 @@ function _from_json(json; repair = true)::UnitCommitmentScenario
initial_power,
startup_categories,
unit_reserves,
commitment_status,
)
push!(bus.thermal_units, unit)
for r in unit_reserves

View File

@@ -47,6 +47,7 @@ mutable struct ThermalUnit
initial_power::Union{Float64,Nothing}
startup_categories::Vector{StartupCategory}
reserves::Vector{Reserve}
commitment_status::Vector{Union{Bool,Nothing}}
end
mutable struct TransmissionLine

View File

@@ -61,6 +61,7 @@ function _add_unit_dispatch!(
sc,
)
_add_startup_shutdown_limit_eqs!(model, g, sc)
_add_commitment_status_eqs!(model, g, sc)
return
end
@@ -270,6 +271,26 @@ function _add_min_uptime_downtime_eqs!(
end
end
function _add_commitment_status_eqs!(
model::JuMP.Model,
g::ThermalUnit,
sc::UnitCommitmentScenario,
)::Nothing
is_on = model[:is_on]
T = model[:instance].time
eq_commitment_status = _init(model, :eq_commitment_status)
for t in 1:T
# Fix commitment status
if g.commitment_status[t] !== nothing
eq_commitment_status[sc.name, g.name, t] = @constraint(
model,
is_on[g.name, t] == (g.commitment_status[t] ? 1.0 : 0.0)
)
end
end
return
end
function _add_net_injection_eqs!(
model::JuMP.Model,
g::ThermalUnit,