Skip to content

Commit

Permalink
fix: update load_shed and demand flexibility constraints each iteration
Browse files Browse the repository at this point in the history
  • Loading branch information
lanesmith committed Apr 6, 2021
1 parent 6de301e commit e5d1072
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 11 deletions.
19 changes: 17 additions & 2 deletions src/loop.jl
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ function interval_loop(factory_like, model_kwargs::Dict,
interval_start = start_index + (i - 1) * interval
interval_end = interval_start + interval - 1
model_kwargs["start_index"] = interval_start
bus_flex_amt = _make_bus_flexibility_amount(
case, flexibility, interval_start, interval_end
)
flexibility_enabled = (bus_flex_amt != zeros(sets.num_bus, interval))
if i == 1
# Build a model with no initial ramp constraint
if storage_enabled
Expand Down Expand Up @@ -87,8 +91,9 @@ function interval_loop(factory_like, model_kwargs::Dict,
if (("load_shed_enabled" in keys(model_kwargs))
&& (model_kwargs["load_shed_enabled"] == true))
for t in 1:interval, i in 1:length(sets.load_bus_idx)
JuMP.set_upper_bound(voi.load_shed[i, t],
bus_demand[sets.load_bus_idx[i], t])
JuMP.set_normalized_rhs(
voi.load_shed_ub[i, t], bus_demand[sets.load_bus_idx[i], t]
)
end
end
for t in 1:interval, g in 1:sets.num_hydro
Expand Down Expand Up @@ -116,6 +121,16 @@ function interval_loop(factory_like, model_kwargs::Dict,
JuMP.set_normalized_rhs(voi.initial_soc[s], storage_e0[s])
end
end
if flexibility_enabled
for t in 1:interval, i in 1:length(sets.load_bus_idx)
JuMP.set_upper_bound(
voi.load_shift_up[i, t], bus_flex_amt[sets.load_bus_idx[i], t]
)
JuMP.set_upper_bound(
voi.load_shift_dn[i, t], bus_flex_amt[sets.load_bus_idx[i], t]
)
end
end
end

while true
Expand Down
21 changes: 12 additions & 9 deletions src/model.jl
Original file line number Diff line number Diff line change
Expand Up @@ -277,9 +277,11 @@ function _build_model(
theta[sets.bus_idx, hour_idx], (container=Array)
end)
if load_shed_enabled
JuMP.@variable(m,
load_shed[i in 1:sets.num_load_bus, j in 1:interval_length],
container=Array)
JuMP.@variable(
m,
load_shed[i in 1:sets.num_load_bus, j in 1:interval_length] >= 0,
container=Array
)
end
if trans_viol_enabled
JuMP.@variable(m,
Expand Down Expand Up @@ -344,15 +346,15 @@ function _build_model(
JuMP.@constraint(
m,
load_shed_ub[i in 1:sets.num_load_bus, j in 1:interval_length],
0 <= load_shed[i, j]
<= bus_demand[sets.load_bus_idx[i], j] + load_shift_up[i, j]
- load_shift_dn[i, j]
load_shed[i, j] <= bus_demand[sets.load_bus_idx[i], j]
+ load_shift_up[i, j]
- load_shift_dn[i, j]
)
else
JuMP.@constraint(
m,
load_shed_ub[i in 1:sets.num_load_bus, j in 1:interval_length],
0 <= load_shed[i, j] <= bus_demand[sets.load_bus_idx[i], j]
load_shed[i, j] <= bus_demand[sets.load_bus_idx[i], j]
)
end
end
Expand Down Expand Up @@ -523,14 +525,15 @@ function _build_model(
initial_soc = storage_enabled ? initial_soc : nothing
initial_rampup = initial_ramp_enabled ? initial_rampup : nothing
initial_rampdown = initial_ramp_enabled ? initial_rampdown : nothing
load_shed_ub = load_shed_enabled ? load_shed_ub : nothing
voi = VariablesOfInterest(;
# Variables
pg=pg, pf=pf,
load_shed=load_shed, load_shift_up=load_shift_up, load_shift_dn=load_shift_dn,
storage_soc=storage_soc, storage_dis=storage_dis, storage_chg=storage_chg,
# Constraints
branch_min=branch_min, branch_max=branch_max,
powerbalance=powerbalance, initial_soc=initial_soc,
branch_min=branch_min, branch_max=branch_max, powerbalance=powerbalance,
initial_soc=initial_soc, load_shed_ub=load_shed_ub,
initial_rampup=initial_rampup, initial_rampdown=initial_rampdown,
hydro_fixed=hydro_fixed, solar_max=solar_max, wind_max=wind_max)
return (m, voi)
Expand Down
1 change: 1 addition & 0 deletions src/types.jl
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ Base.@kwdef struct VariablesOfInterest
pg::Array{JuMP.VariableRef,2}
pf::Array{JuMP.VariableRef,2}
load_shed::Union{Array{JuMP.VariableRef,2},Nothing}
load_shed_ub::Union{JuMP.Containers.DenseAxisArray,Nothing}
load_shift_up::Union{Array{JuMP.VariableRef,2},Nothing}
load_shift_dn::Union{Array{JuMP.VariableRef,2},Nothing}
powerbalance::Array{JuMP.ConstraintRef,2}
Expand Down

0 comments on commit e5d1072

Please sign in to comment.