Skip to content

Commit

Permalink
Merge pull request #32 from NREL-Sienna/rhjd/add_cycling_ff
Browse files Browse the repository at this point in the history
Add cycling FF and others
  • Loading branch information
jd-lara authored Sep 12, 2024
2 parents 5fa24c5 + bc572a9 commit 7e1e313
Show file tree
Hide file tree
Showing 23 changed files with 1,522 additions and 338 deletions.
25 changes: 20 additions & 5 deletions scripts/centralized_paper/centralized_sim.jl
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ served_fraction_map = Dict(
"Reg_Down" => 0.3,
"Flex_Down" => 0.1,
)

#=
for sys in [sys_rts_da]
services = get_components(VariableReserve, sys)
hy_sys = first(get_components(HybridSystem, sys))
Expand All @@ -89,7 +89,7 @@ for sys in [sys_rts_da]
end
end
end

=#
###############################
###### Create Templates #######
###############################
Expand All @@ -110,8 +110,8 @@ set_device_model!(
template_uc_copperplate,
DeviceModel(
PSY.HybridSystem,
HybridDispatchWithReserves;
#HybridEnergyOnlyDispatch;
#HybridDispatchWithReserves;
HybridEnergyOnlyDispatch;
attributes=Dict{String, Any}(
"reservation" => true,
"storage_reservation" => true,
Expand All @@ -126,7 +126,7 @@ set_device_model!(
##### Run DCP Simulation ######
###############################

mipgap = 2.0e-2
mipgap = 3.0e-2

model = DecisionModel(
template_uc_copperplate,
Expand All @@ -148,6 +148,9 @@ PSI.solve!(model)

res = ProblemResults(model)

cyc_charge = read_aux_variable(res, "CyclingChargeUsage__HybridSystem")
cyc_discharge = read_aux_variable(res, "CyclingDischargeUsage__HybridSystem")

techs = ["STEAM", "CT", "CC", "WIND", "NUCLEAR", "PV", "RTPV", "HYDRO", "HYBRID"]
tot_dict = Dict()
for t in techs
Expand Down Expand Up @@ -641,3 +644,15 @@ aux = cons[PowerSimulations.ConstraintKey{
for (k, v) in obj_jump.terms
println(k, v)
end

exprs = model.internal.container.expressions
for k in keys(exprs)
println(k)
end

exprs[PowerSimulations.ExpressionKey{
HybridSystemsSimulations.DischargeServedReserveUpExpression,
HybridSystem,
}(
"",
)]
61 changes: 48 additions & 13 deletions scripts/cooptimizer_pipeline/step1_prices.jl
Original file line number Diff line number Diff line change
Expand Up @@ -108,16 +108,16 @@ template_uc_copperplate = get_uc_copperplate_template(sys_rts_da)
template_ed_copperplate = get_ed_copperplate_template(sys_rts_rt)

# PTDF Bounded
template_uc_ptdf = get_uc_ptdf_template(sys_rts_da)
template_ed_ptdf = get_ed_ptdf_template(sys_rts_rt)
#template_uc_ptdf = get_uc_ptdf_template(sys_rts_da)
#template_ed_ptdf = get_ed_ptdf_template(sys_rts_rt)

# PTDF Unbounded
template_uc_unbounded_ptdf = get_uc_ptdf_unbounded_template(sys_rts_da)
template_ed_unbounded_ptdf = get_ed_ptdf_unbounded_template(sys_rts_rt)
#template_uc_unbounded_ptdf = get_uc_ptdf_unbounded_template(sys_rts_da)
#template_ed_unbounded_ptdf = get_ed_ptdf_unbounded_template(sys_rts_rt)

# DCP
template_uc_dcp = get_uc_dcp_template()
template_ed_dcp = get_ed_dcp_template()
#template_uc_dcp = get_uc_dcp_template()
#template_ed_dcp = get_ed_dcp_template()

set_device_model!(
template_uc_copperplate,
Expand All @@ -127,7 +127,7 @@ set_device_model!(
attributes=Dict{String, Any}(
"reservation" => true,
"storage_reservation" => true,
"energy_target" => true,
"energy_target" => false,
"cycling" => true,
),
),
Expand All @@ -141,8 +141,8 @@ set_device_model!(
attributes=Dict{String, Any}(
"reservation" => true,
"storage_reservation" => true,
"energy_target" => true,
"cycling" => true,
"energy_target" => false,
"cycling" => false,
),
),
)
Expand Down Expand Up @@ -205,11 +205,25 @@ sequence = SimulationSequence(
component_type=VariableReserve{ReserveUp},
source=ActivePowerReserveVariable,
affected_values=[ActivePowerReserveVariable],
add_slacks=true,
),
LowerBoundFeedforward(
component_type=VariableReserve{ReserveDown},
source=ActivePowerReserveVariable,
affected_values=[ActivePowerReserveVariable],
add_slacks=true,
),
CyclingChargeLimitFeedforward(
component_type=PSY.HybridSystem,
source=HSS.CyclingChargeUsage,
affected_values=[HSS.CyclingChargeLimitParameter],
penalty_cost=0.0,
),
CyclingDischargeLimitFeedforward(
component_type=PSY.HybridSystem,
source=HSS.CyclingDischargeUsage,
affected_values=[HSS.CyclingDischargeLimitParameter],
penalty_cost=0.0,
),
],
),
Expand Down Expand Up @@ -247,13 +261,34 @@ cons[PowerSimulations.ConstraintKey{HybridSystemsSimulations.StateofChargeTarget
execute_status = execute!(sim_dcp; enable_progress_bar=true);

results_dcp = SimulationResults(sim_dcp; ignore_status=true)

results_ed_dcp = get_decision_problem_results(results_dcp, "ED")
results_uc_dcp = get_decision_problem_results(results_dcp, "UC")

aux_var =
read_realized_variable(results_uc_dcp, "CumulativeCyclingDischarge__HybridSystem")[!, 2]
param_cycl =
read_parameter(results_ed_dcp, "CyclingDischargeLimitParameter__HybridSystem")[!, 2]
aux_var = read_realized_variable(results_uc_dcp, "CyclingDischargeUsage__HybridSystem")
discharge_var =
read_realized_variable(results_uc_dcp, "BatteryDischarge__HybridSystem")[!, 2]
reserve_up_ds_var = read_realized_variable(
results_uc_dcp,
"DischargingReserveVariable__VariableReserve__ReserveUp__Reg_Up",
)

p_ds = read_realized_variable(results_ed_dcp, "BatteryDischarge__HybridSystem")
p_rd = read_realized_variable(results_ed_dcp, "CyclingDischargeUsage__HybridSystem")

cum_p_rd = [sum(p_rd[!, 2][(1 + 12(k - 1)):(12 + 12(k - 1))]) for k in 1:48]

param_cycl_ = read_parameter(results_ed_dcp, "CyclingDischargeLimitParameter__HybridSystem")
param_cycl_uc = [v[!, 1][1] for v in values(param_cycl_)]
#=
plot([
scatter(x = aux_var[!,1], y = aux_var[!, 2], line_shape = "hv"),
scatter(x = aux_var[!,1], y = param_cycl_uc, line_shape = "hv"),
scatter(x = aux_var[!, 1], y = cum_p_rd, line_shape = "hv")
]
)
=#
param_cycl_ed = [v[!, 1][1] for v in values(param_ed)]

p_re_param_uc =
read_realized_parameter(results_uc_dcp, "RenewablePowerTimeSeries__HybridSystem")[!, 2]
Expand Down
Loading

0 comments on commit 7e1e313

Please sign in to comment.