mirror of
https://github.com/ANL-CEEESA/UnitCommitment.jl.git
synced 2025-12-06 00:08:52 -06:00
enforce_transmission: Add constraint refs to model
This commit is contained in:
@@ -26,59 +26,67 @@ function _enforce_transmission(;
|
|||||||
isf::Matrix{Float64},
|
isf::Matrix{Float64},
|
||||||
lodf::Matrix{Float64},
|
lodf::Matrix{Float64},
|
||||||
)::Nothing
|
)::Nothing
|
||||||
instance = model[:instance]
|
|
||||||
limit::Float64 = 0.0
|
limit::Float64 = 0.0
|
||||||
overflow = model[:overflow]
|
overflow = model[:overflow]
|
||||||
net_injection = model[:net_injection]
|
net_injection = model[:net_injection]
|
||||||
|
lm = violation.monitored_line
|
||||||
|
lc = violation.outage_line
|
||||||
|
t = violation.time
|
||||||
|
eq_flow_ub = _init(model, :eq_flow_ub)
|
||||||
|
eq_flow_lb = _init(model, :eq_flow_lb)
|
||||||
|
eq_flow_def = _init(model, :eq_flow_def)
|
||||||
|
eq_idx = (
|
||||||
|
sc.name,
|
||||||
|
lm.name,
|
||||||
|
lc === nothing ? "Base" : lc.name,
|
||||||
|
t,
|
||||||
|
)
|
||||||
|
|
||||||
if violation.outage_line === nothing
|
if lc === nothing
|
||||||
limit = violation.monitored_line.normal_flow_limit[violation.time]
|
limit = lm.normal_flow_limit[t]
|
||||||
@info @sprintf(
|
@info @sprintf(
|
||||||
" %8.3f MW overflow in %-5s time %3d (pre-contingency, scenario %s)",
|
" %8.3f MW overflow in %-5s time %3d (pre-contingency, scenario %s)",
|
||||||
violation.amount,
|
violation.amount,
|
||||||
violation.monitored_line.name,
|
lm.name,
|
||||||
violation.time,
|
t,
|
||||||
sc.name,
|
sc.name,
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
limit = violation.monitored_line.emergency_flow_limit[violation.time]
|
limit = lm.emergency_flow_limit[t]
|
||||||
@info @sprintf(
|
@info @sprintf(
|
||||||
" %8.3f MW overflow in %-5s time %3d (outage: line %s, scenario %s)",
|
" %8.3f MW overflow in %-5s time %3d (outage: line %s, scenario %s)",
|
||||||
violation.amount,
|
violation.amount,
|
||||||
violation.monitored_line.name,
|
lm.name,
|
||||||
violation.time,
|
t,
|
||||||
violation.outage_line.name,
|
lc.name,
|
||||||
sc.name,
|
sc.name,
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
fm = violation.monitored_line.name
|
v = overflow[sc.name, lm.name, t]
|
||||||
t = violation.time
|
flow = @variable(model, base_name = "flow[$eq_idx]")
|
||||||
flow = @variable(model, base_name = "flow[$fm,$t]")
|
eq_flow_ub[eq_idx] = @constraint(model, flow <= limit + v)
|
||||||
|
eq_flow_lb[eq_idx] = @constraint(model, -flow <= limit + v)
|
||||||
|
|
||||||
v = overflow[sc.name, violation.monitored_line.name, violation.time]
|
if lc === nothing
|
||||||
@constraint(model, flow <= limit + v)
|
eq_flow_def[eq_idx] = @constraint(
|
||||||
@constraint(model, -flow <= limit + v)
|
|
||||||
|
|
||||||
if violation.outage_line === nothing
|
|
||||||
@constraint(
|
|
||||||
model,
|
model,
|
||||||
flow == sum(
|
flow == sum(
|
||||||
net_injection[sc.name, b.name, violation.time] *
|
net_injection[sc.name, b.name, t] *
|
||||||
isf[violation.monitored_line.offset, b.offset] for
|
isf[lm.offset, b.offset] for
|
||||||
b in sc.buses if b.offset > 0
|
b in sc.buses if b.offset > 0
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
@constraint(
|
eq_flow_def[eq_idx] = @constraint(
|
||||||
model,
|
model,
|
||||||
flow == sum(
|
flow == sum(
|
||||||
net_injection[sc.name, b.name, violation.time] * (
|
net_injection[sc.name, b.name, t] * (
|
||||||
isf[violation.monitored_line.offset, b.offset] + (
|
isf[lm.offset, b.offset] + (
|
||||||
lodf[
|
lodf[
|
||||||
violation.monitored_line.offset,
|
lm.offset,
|
||||||
violation.outage_line.offset,
|
lc.offset,
|
||||||
] * isf[violation.outage_line.offset, b.offset]
|
] * isf[lc.offset, b.offset]
|
||||||
)
|
)
|
||||||
) for b in sc.buses if b.offset > 0
|
) for b in sc.buses if b.offset > 0
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user