mirror of
https://github.com/ANL-CEEESA/UnitCommitment.jl.git
synced 2025-12-06 00:08:52 -06:00
62 lines
2.1 KiB
Julia
62 lines
2.1 KiB
Julia
# 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.
|
|
|
|
function _add_status_vars!(
|
|
model::JuMP.Model,
|
|
g::Unit,
|
|
formulation_status_vars::Gar1962.StatusVars,
|
|
)::Nothing
|
|
is_on = _init(model, :is_on)
|
|
switch_on = _init(model, :switch_on)
|
|
switch_off = _init(model, :switch_off)
|
|
for t in 1:model[:instance].time
|
|
if g.must_run[t]
|
|
is_on[g.name, t] = 1.0
|
|
switch_on[g.name, t] = (t == 1 ? 1.0 - _is_initially_on(g) : 0.0)
|
|
switch_off[g.name, t] = 0.0
|
|
else
|
|
is_on[g.name, t] = @variable(model, binary = true)
|
|
switch_on[g.name, t] = @variable(model, binary = true)
|
|
switch_off[g.name, t] = @variable(model, binary = true)
|
|
end
|
|
end
|
|
return
|
|
end
|
|
|
|
function _add_status_eqs!(
|
|
model::JuMP.Model,
|
|
g::Unit,
|
|
formulation_status_vars::Gar1962.StatusVars,
|
|
)::Nothing
|
|
eq_binary_link = _init(model, :eq_binary_link)
|
|
eq_switch_on_off = _init(model, :eq_switch_on_off)
|
|
is_on = model[:is_on]
|
|
switch_off = model[:switch_off]
|
|
switch_on = model[:switch_on]
|
|
for t in 1:model[:instance].time
|
|
if !g.must_run[t]
|
|
# Link binary variables
|
|
if t == 1
|
|
eq_binary_link[g.name, t] = @constraint(
|
|
model,
|
|
is_on[g.name, t] - _is_initially_on(g) ==
|
|
switch_on[g.name, t] - switch_off[g.name, t]
|
|
)
|
|
else
|
|
eq_binary_link[g.name, t] = @constraint(
|
|
model,
|
|
is_on[g.name, t] - is_on[g.name, t-1] ==
|
|
switch_on[g.name, t] - switch_off[g.name, t]
|
|
)
|
|
end
|
|
# Cannot switch on and off at the same time
|
|
eq_switch_on_off[g.name, t] = @constraint(
|
|
model,
|
|
switch_on[g.name, t] + switch_off[g.name, t] <= 1
|
|
)
|
|
end
|
|
end
|
|
return
|
|
end
|