From 494e5cdb155ca4e0a2947989f39e5c434a4f9abe Mon Sep 17 00:00:00 2001 From: Ni Wang Date: Wed, 25 Oct 2023 15:35:00 +0200 Subject: [PATCH 1/3] Add new columns to the rp file --- test/inputs/Norse/rep-periods-data.csv | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/inputs/Norse/rep-periods-data.csv b/test/inputs/Norse/rep-periods-data.csv index d93ff145..2582a12e 100644 --- a/test/inputs/Norse/rep-periods-data.csv +++ b/test/inputs/Norse/rep-periods-data.csv @@ -1,3 +1,9 @@ +<<<<<<< HEAD ,hours,,hours id,weight,num_time_steps,time_scale 1,52.1423,168,1.0 +======= +,hours,, +id,weight,num_time_steps,time_scale +1,52.1423,168,1 +>>>>>>> 510cc3b (Add new columns to the rp file) From 0f78626c32c92890dc9463433e0799ae28f00447 Mon Sep 17 00:00:00 2001 From: Ni Wang Date: Wed, 25 Oct 2023 16:19:26 +0200 Subject: [PATCH 2/3] Make k dependent of rp --- src/io.jl | 2 +- src/model.jl | 32 ++++++++++++++++---------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/io.jl b/src/io.jl index e5fde32e..b216e0bc 100644 --- a/src/io.jl +++ b/src/io.jl @@ -24,7 +24,7 @@ function create_parameters_and_sets_from_file(input_folder::AbstractString) assets_conversion = assets_data_df[assets_data_df.type.=="conversion", :].name #conversion assets in the energy system assets_investment = assets_data_df[assets_data_df.investable.==true, :].name #assets with investment method in the energy system rep_periods = unique(assets_profiles_df.rep_period_id) #representative periods - time_steps = unique(assets_profiles_df.time_step) #time steps in the RP (e.g., hours) + time_steps = Dict(row.id => 1:row.num_time_steps for row in eachrow(rep_period_df)) #time steps in the RP (e.g., hours), that are dependent on RP # Parameters for system rep_weight = Dict((row.id) => row.weight for row in eachrow(rep_period_df)) #representative period weight [h] diff --git a/src/model.jl b/src/model.jl index 8783ad8f..cce6d953 100644 --- a/src/model.jl +++ b/src/model.jl @@ -26,10 +26,10 @@ function create_model(graph, params, sets; verbose = false, write_lp_file = fals set_attribute(model, "output_flag", verbose) # Variables - @variable(model, flow[F, RP, K]) #flow from asset a to asset aa [MW] + @variable(model, flow[F, rp ∈ RP, K[rp]]) #flow from asset a to asset aa [MW] @variable(model, 0 ≤ assets_investment[Ai], Int) #number of installed asset units [N] @variable(model, 0 ≤ flows_investment[Fi], Int) - @variable(model, 0 ≤ storage_level[As, RP, K]) + @variable(model, 0 ≤ storage_level[As, RP, K[rp]]) # TODO: Fix storage_level[As, RP, 0] = 0 @@ -56,7 +56,7 @@ function create_model(graph, params, sets; verbose = false, write_lp_file = fals model, sum( params.rep_weight[rp] * params.flows_variable_cost[f] * flow[f, rp, k] for - f ∈ F, rp ∈ RP, k ∈ K + f ∈ F, rp ∈ RP, k ∈ K[rp] ) ) @@ -73,7 +73,7 @@ function create_model(graph, params, sets; verbose = false, write_lp_file = fals # - consumer balance equation @constraint( model, - c_consumer_balance[a ∈ Ac, rp ∈ RP, k ∈ K], + c_consumer_balance[a ∈ Ac, rp ∈ RP, k ∈ K[rp]], sum(flow[f, rp, k] for f ∈ F if f[2] == a) - sum(flow[f, rp, k] for f ∈ F if f[1] == a) == get(params.assets_profile, (a, rp, k), 1.0) * params.peak_demand[a] @@ -84,7 +84,7 @@ function create_model(graph, params, sets; verbose = false, write_lp_file = fals # TODO: Fix the initial storage_level @constraint( model, - c_storage_balance[a ∈ As, rp ∈ RP, k ∈ K], + c_storage_balance[a ∈ As, rp ∈ RP, k ∈ K[rp]], storage_level[a, rp, k] == (k ≥ 2 ? storage_level[a, rp, k-1] : 0.0) + sum(flow[f, rp, k] * params.flows_efficiency[f] for f ∈ F if f[2] == a) - @@ -94,7 +94,7 @@ function create_model(graph, params, sets; verbose = false, write_lp_file = fals # - hub balance equation @constraint( model, - c_hub_balance[a ∈ Ah, rp ∈ RP, k ∈ K], + c_hub_balance[a ∈ Ah, rp ∈ RP, k ∈ K[rp]], sum(flow[f, rp, k] for f ∈ F if f[2] == a) == sum(flow[f, rp, k] for f ∈ F if f[1] == a) ) @@ -102,7 +102,7 @@ function create_model(graph, params, sets; verbose = false, write_lp_file = fals # - conversion balance equation @constraint( model, - c_conversion_balance[a ∈ Acv, rp ∈ RP, k ∈ K], + c_conversion_balance[a ∈ Acv, rp ∈ RP, k ∈ K[rp]], sum(flow[f, rp, k] * params.flows_efficiency[f] for f ∈ F if f[2] == a) == sum(flow[f, rp, k] / params.flows_efficiency[f] for f ∈ F if f[1] == a) ) @@ -111,7 +111,7 @@ function create_model(graph, params, sets; verbose = false, write_lp_file = fals # - overall output flows @constraint( model, - c_overall_output_flows[a ∈ Acv∪As∪Ap, rp ∈ RP, k ∈ K], + c_overall_output_flows[a ∈ Acv∪As∪Ap, rp ∈ RP, k ∈ K[rp]], sum(flow[f, rp, k] for f ∈ F if f[1] == a) ≤ get(params.assets_profile, (a, rp, k), 1.0) * ( params.assets_init_capacity[a] + @@ -122,7 +122,7 @@ function create_model(graph, params, sets; verbose = false, write_lp_file = fals # - overall input flows @constraint( model, - c_overall_input_flows[a ∈ As, rp ∈ RP, k ∈ K], + c_overall_input_flows[a ∈ As, rp ∈ RP, k ∈ K[rp]], sum(flow[f, rp, k] for f ∈ F if f[2] == a) ≤ get(params.assets_profile, (a, rp, k), 1.0) * ( params.assets_init_capacity[a] + @@ -137,7 +137,7 @@ function create_model(graph, params, sets; verbose = false, write_lp_file = fals a ∈ A, f ∈ F, rp ∈ RP, - k ∈ K; + k ∈ K[rp]; !(a ∈ Ah ∪ Ac) && f[1] == a && f ∉ Ft, ], flow[f, rp, k] ≤ @@ -150,14 +150,14 @@ function create_model(graph, params, sets; verbose = false, write_lp_file = fals # Constraints that define a lower bound for flows that are not transport assets @constraint( model, - c_lower_bound_asset_flow[f ∈ F, rp ∈ RP, k ∈ K; f ∉ Ft], + c_lower_bound_asset_flow[f ∈ F, rp ∈ RP, k ∈ K[rp]; f ∉ Ft], flow[f, rp, k] ≥ 0 ) # Constraints that define bounds for a transport flow Ft @expression( model, - e_upper_bound_transport_flow[f ∈ F, rp ∈ RP, k ∈ K], + e_upper_bound_transport_flow[f ∈ F, rp ∈ RP, k ∈ K[rp]], get(params.flows_profile, (f, rp, k), 1.0) * ( params.flows_init_capacity[f] + (f ∈ Fi ? (params.flows_export_capacity[f] * flows_investment[f]) : 0.0) @@ -165,12 +165,12 @@ function create_model(graph, params, sets; verbose = false, write_lp_file = fals ) @constraint( model, - c_transport_flow_upper_bound[f ∈ Ft, rp ∈ RP, k ∈ K], + c_transport_flow_upper_bound[f ∈ Ft, rp ∈ RP, k ∈ K[rp]], flow[f, rp, k] ≤ e_upper_bound_transport_flow[f, rp, k] ) @expression( model, - e_lower_bound_transport_flow[f ∈ F, rp ∈ RP, k ∈ K], + e_lower_bound_transport_flow[f ∈ F, rp ∈ RP, k ∈ K[rp]], get(params.flows_profile, (f, rp, k), 1.0) * ( params.flows_init_capacity[f] + (f ∈ Fi ? (params.flows_import_capacity[f] * flows_investment[f]) : 0.0) @@ -178,7 +178,7 @@ function create_model(graph, params, sets; verbose = false, write_lp_file = fals ) @constraint( model, - c_transport_flow_lower_bound[f ∈ Ft, rp ∈ RP, k ∈ K], + c_transport_flow_lower_bound[f ∈ Ft, rp ∈ RP, k ∈ K[rp]], flow[f, rp, k] ≥ -e_lower_bound_transport_flow[f, rp, k] ) @@ -193,7 +193,7 @@ function create_model(graph, params, sets; verbose = false, write_lp_file = fals ) @constraint( model, - upper_bound_for_storage_level[a ∈ As, rp ∈ RP, k ∈ K], + upper_bound_for_storage_level[a ∈ As, rp ∈ RP, k ∈ K[rp]], storage_level[a, rp, k] ≤ params.initial_storage_capacity[a] + (a ∈ Ai ? energy_limit[a] : 0.0) ) From f78e4d76543651fa73f01d6fa55a54ff7fa7ad19 Mon Sep 17 00:00:00 2001 From: Ni Wang Date: Wed, 25 Oct 2023 16:36:11 +0200 Subject: [PATCH 3/3] Fix error by explicit define rp for a variable --- src/model.jl | 2 +- test/inputs/Norse/rep-periods-data.csv | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/model.jl b/src/model.jl index cce6d953..5c155995 100644 --- a/src/model.jl +++ b/src/model.jl @@ -29,7 +29,7 @@ function create_model(graph, params, sets; verbose = false, write_lp_file = fals @variable(model, flow[F, rp ∈ RP, K[rp]]) #flow from asset a to asset aa [MW] @variable(model, 0 ≤ assets_investment[Ai], Int) #number of installed asset units [N] @variable(model, 0 ≤ flows_investment[Fi], Int) - @variable(model, 0 ≤ storage_level[As, RP, K[rp]]) + @variable(model, 0 ≤ storage_level[As, rp ∈ RP, K[rp]]) # TODO: Fix storage_level[As, RP, 0] = 0 diff --git a/test/inputs/Norse/rep-periods-data.csv b/test/inputs/Norse/rep-periods-data.csv index 2582a12e..d93ff145 100644 --- a/test/inputs/Norse/rep-periods-data.csv +++ b/test/inputs/Norse/rep-periods-data.csv @@ -1,9 +1,3 @@ -<<<<<<< HEAD ,hours,,hours id,weight,num_time_steps,time_scale 1,52.1423,168,1.0 -======= -,hours,, -id,weight,num_time_steps,time_scale -1,52.1423,168,1 ->>>>>>> 510cc3b (Add new columns to the rp file)