parent
2f90c48d60
commit
063b602d1a
@ -0,0 +1,61 @@
|
|||||||
|
# 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
|
Loading…
Reference in new issue