Skip to content

Commit

Permalink
fix charge calc, add all cols and write to csv
Browse files Browse the repository at this point in the history
  • Loading branch information
prakaa committed Jul 31, 2024
1 parent 72e7380 commit 1eb63b7
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 17 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
formulation,min_rev_improvements_lkgt5,med_rev_improvements,max_rev_improvement,max_neg_rev_discharge_standard,max_neg_rev_charge_500_standard,max_neg_rev_discharge_apb,max_neg_rev_charge_500_apb
arbitrage_discounted_no_degradation/hyp,0.1445991015030699,0.291237702693409,0.4076671585964029,0.001114444487147587,0.28943078143789214,0.0009053806106194061,0.05221042374504637
arbitrage_throughputpenalty_no_degradation/600000.0,0.13059840125960517,0.44107559482537595,0.7836292288023413,0.01135314258357969,0.36006635513280216,0.006962763887358539,0.05452351938234726
arbitrage_throughputpenalty_no_degradation/800000.0,0.13706614001832815,0.45373874117785984,0.860130227419397,0.0015623148110588928,0.36129979787074185,0.001687379856623454,0.057291445453499935
arbitrage_throughputpenalty_no_degradation/200000.0,0.11432871738825902,0.3226213156035771,0.683313688773886,0.01248551005727752,0.26975355037234633,0.007121915971583968,0.04314123218179427
arbitrage_no_degradation,0.10096500362145246,0.27379020257143993,0.4978681272068267,0.03854378949162245,0.20499280215435836,0.023421797153251253,0.035830828982764774
arbitrage_throughputpenalty_no_degradation/400000.0,0.1173053968329046,0.3718434366142929,0.7419037858184889,0.011516613236363781,0.34779621246503317,0.006874560238074517,0.05341673038601346
arbitrage_discounted_no_degradation/exp,0.12139027359881101,0.2678396036469154,0.38753467396529745,0.0028037920512216205,0.2892076390500374,0.0034191761483650233,0.052496665018914285
54 changes: 37 additions & 17 deletions results/standard_vs_apb_results.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ using DataFrames
using JLD2
using NEMStorageUnderUncertainty
using Statistics
using CSV

const SCENARIO_COLS = [
:formulation, :energy_capacity, :power_capacity, :data_type, :lookahead
Expand All @@ -16,6 +17,8 @@ function merge_summary_data(standard_data_path::String, apb_data_path::String)
all_merged = DataFrame[]
for key in keys(standard_data)
(df_standard, df_apb) = (standard_data[key], apb_data[key])
df_standard.formulation = fill(key, size(df_standard, 1))
df_apb.formulation = fill(key, size(df_apb, 1))
df_standard_forecast = df_standard[df_standard.data_type.=="forecast", :]
df_apb_forecast = df_apb[df_apb.data_type.=="forecast", :]
merged = innerjoin(
Expand All @@ -32,22 +35,32 @@ end
"""
Calculates three metrics
- `rev_improvement`: Improvement in actual-prices-binding scenario
from standard scenario as % of standard revenue
- `neg_rev_discharge_percent`: Negative revenue from discharge in standard scenario
- `neg_rev_discharge_percent_standard`: Negative revenue from discharge in standard scenario
as % of standard revenue
- `neg_rev_charge_500_percent`: Negative revenue from charging in standard scenario
- `neg_rev_charge_500_percent_standard`: Negative revenue from charging in standard scenario
when price ≥ 500 as % of standard revenue
- `neg_rev_discharge_percent_apb`: Negative revenue from discharge in APB scenario
as % of APB revenue
- `neg_rev_charge_500_percent_apb`: Negative revenue from charging in APB scenario
when price ≥ 500 as % of APB revenue
- `rev_improvement`: Improvement in actual-prices-binding scenario
from standard scenario as % of standard revenue
"""
function calculate_metrics(all_merged_data::Array{DataFrame})
all_metrics = DataFrame[]
metric_cols = [
:rev_improvement_percent, :neg_rev_discharge_percent, :neg_rev_charge_500_percent
:rev_improvement,
:neg_rev_discharge_standard,
:neg_rev_charge_500_standard,
:neg_rev_discharge_apb,
:neg_rev_charge_500_apb,
]
for df in all_merged_data
df[:, metric_cols[1]] = @. (df[:, :revenue_apb] - df[:, :revenue_standard]) / (df[:, :revenue_standard]) * 100
df[:, metric_cols[2]] = @. -1 * df[:, :neg_rev_discharge_standard] / (df[:, :revenue_standard]) * 100
df[:, metric_cols[3]] = @. -1 * df[:, :neg_rev_discharge_standard] / (df[:, :revenue_standard]) * 100
df[:, metric_cols[1]] = @. (df[:, :revenue_apb] - df[:, :revenue_standard]) / (df[:, :revenue_standard])
df[:, metric_cols[2]] = @. -1 * df[:, :neg_rev_discharge_standard] / (df[:, :revenue_standard])
df[:, metric_cols[3]] = @. -1 * df[:, :neg_rev_charge_500_standard] / (df[:, :revenue_standard])
df[:, metric_cols[4]] = @. -1 * df[:, :neg_rev_discharge_apb] / (df[:, :revenue_apb])
df[:, metric_cols[5]] = @. -1 * df[:, :neg_rev_charge_500_apb] / (df[:, :revenue_apb])
push!(all_metrics, df[:, cat(SCENARIO_COLS, metric_cols, dims=1)])
end
return all_metrics
Expand All @@ -62,27 +75,34 @@ function summarise_metrics(all_metrics::Array{DataFrame})
min_rev_improvements = Float64[]
med_rev_improvements = Float64[]
max_rev_improvements = Float64[]
max_neg_rev_discharge_percents = Float64[]
max_neg_rev_charge_500_percents = Float64[]
max_neg_rev_discharge_standard = Float64[]
max_neg_rev_charge_500_standard = Float64[]
max_neg_rev_discharge_apb = Float64[]
max_neg_rev_charge_500_apb = Float64[]
for df in all_metrics
filtered_df = _filter_results!(df)
push!(formulations, only(unique(filtered_df.formulation)))
push!(min_rev_improvements, minimum(filtered_df[filtered_df.lookahead.!="5", :rev_improvement_percent]))
push!(med_rev_improvements, median(filtered_df.rev_improvement_percent))
push!(max_rev_improvements, maximum(filtered_df.rev_improvement_percent))
push!(max_neg_rev_discharge_percents, maximum(filtered_df.neg_rev_discharge_percent))
push!(max_neg_rev_charge_500_percents, maximum(filtered_df.neg_rev_charge_500_percent))
push!(min_rev_improvements, minimum(filtered_df[filtered_df.lookahead.!="5", :rev_improvement]))
push!(med_rev_improvements, median(filtered_df.rev_improvement))
push!(max_rev_improvements, maximum(filtered_df.rev_improvement))
push!(max_neg_rev_discharge_standard, maximum(filtered_df.neg_rev_discharge_standard))
push!(max_neg_rev_charge_500_standard, maximum(filtered_df.neg_rev_charge_500_standard))
push!(max_neg_rev_discharge_apb, maximum(filtered_df.neg_rev_discharge_apb))
push!(max_neg_rev_charge_500_apb, maximum(filtered_df.neg_rev_charge_500_apb))
end
return DataFrame(
:formulation => formulations,
:min_rev_improvements_lkgt5 => min_rev_improvements,
:med_rev_improvements => med_rev_improvements,
:max_rev_improvement => max_rev_improvements,
:max_neg_rev_discharge_percent => max_neg_rev_discharge_percents,
:max_neg_rev_charge_500_percent => max_neg_rev_charge_500_percents
:max_neg_rev_discharge_standard => max_neg_rev_discharge_standard,
:max_neg_rev_charge_500_standard => max_neg_rev_charge_500_standard,
:max_neg_rev_discharge_apb => max_neg_rev_discharge_apb,
:max_neg_rev_charge_500_apb => max_neg_rev_charge_500_apb,
)
end

merged = merge_summary_data("results/data/NSW_summary_results.jld2", "results/data/actual-prices-binding/NSW_summary_results_apb.jld2")
metrics = calculate_metrics(merged)
summary = summarise_metrics(metrics)
CSV.write("results/data/actual-prices-binding/rev_and_negrev_standard_vs_apb.csv", summary)

0 comments on commit 1eb63b7

Please sign in to comment.