From 179f064058c17c87f270854cc3dccd46aa8674b3 Mon Sep 17 00:00:00 2001 From: Abel Soares Siqueira Date: Tue, 30 Apr 2024 13:58:11 +0200 Subject: [PATCH] Update filter usage to be more efficient (#618) --- src/constraints/consumer.jl | 2 +- src/constraints/conversion.jl | 2 +- src/constraints/hub.jl | 2 +- src/constraints/transport.jl | 2 +- src/create-model.jl | 17 ++++++++++++----- src/io.jl | 17 ++++++++++------- 6 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/constraints/consumer.jl b/src/constraints/consumer.jl index 27659e61..3df8fc68 100644 --- a/src/constraints/consumer.jl +++ b/src/constraints/consumer.jl @@ -22,7 +22,7 @@ function add_consumer_constraints!( ) # - Balance constraint (using the lowest temporal resolution) - df = filter(row -> row.asset ∈ Ac, dataframes[:highest_in_out]; view = true) + df = filter(:asset => ∈(Ac), dataframes[:highest_in_out]; view = true) model[:consumer_balance] = [ @constraint( model, diff --git a/src/constraints/conversion.jl b/src/constraints/conversion.jl index 4db7c60b..8653b338 100644 --- a/src/constraints/conversion.jl +++ b/src/constraints/conversion.jl @@ -20,7 +20,7 @@ function add_conversion_constraints!( ) # - Balance constraint (using the lowest temporal resolution) - df = filter(row -> row.asset ∈ Acv, dataframes[:lowest]; view = true) + df = filter(:asset => ∈(Acv), dataframes[:lowest]; view = true) model[:conversion_balance] = [ @constraint( model, diff --git a/src/constraints/hub.jl b/src/constraints/hub.jl index a5afaa4b..9f2ec56e 100644 --- a/src/constraints/hub.jl +++ b/src/constraints/hub.jl @@ -20,7 +20,7 @@ function add_hub_constraints!( ) # - Balance constraint (using the lowest temporal resolution) - df = filter(row -> row.asset ∈ Ah, dataframes[:highest_in_out]; view = true) + df = filter(:asset => ∈(Ah), dataframes[:highest_in_out]; view = true) model[:hub_balance] = [ @constraint( model, diff --git a/src/constraints/transport.jl b/src/constraints/transport.jl index b8d40a99..2aa197f7 100644 --- a/src/constraints/transport.jl +++ b/src/constraints/transport.jl @@ -70,7 +70,7 @@ function add_transport_constraints!(model, graph, df_flows, flow, Ft, flows_inve ] ## Constraints that define bounds for a transport flow Ft - df = filter(row -> (row.from, row.to) ∈ Ft, df_flows) + df = filter([:from, :to] => (from, to) -> (from, to) ∈ Ft, df_flows; view = true) # - Max transport flow limit model[:max_transport_flow_limit] = [ diff --git a/src/create-model.jl b/src/create-model.jl index 61119669..9ffb585d 100644 --- a/src/create-model.jl +++ b/src/create-model.jl @@ -194,15 +194,22 @@ function add_expression_terms_inter_rp_constraints!( # Incoming, outgoing flows, and profile aggregation for row_inter in eachrow(df_inter) - sub_df_map = filter(row -> row.period in row_inter.periods_block, df_map) + sub_df_map = filter(:period => in(row_inter.periods_block), df_map; view = true) for row_map in eachrow(sub_df_map) - sub_df_flows = - filter(row -> row.to == row_inter.asset && row.rp == row_map.rep_period, df_flows) + sub_df_flows = filter( + [:to, :rp] => (to, rp) -> to == row_inter.asset && rp == row_map.rep_period, + df_flows; + view = true, + ) row_inter.incoming_flow += LinearAlgebra.dot(sub_df_flows.flow, sub_df_flows.efficiency) * row_map.weight - sub_df_flows = - filter(row -> row.from == row_inter.asset && row.rp == row_map.rep_period, df_flows) + sub_df_flows = filter( + [:from, :rp] => + (from, rp) -> from == row_inter.asset && rp == row_map.rep_period, + df_flows; + view = true, + ) row_inter.outgoing_flow += LinearAlgebra.dot(sub_df_flows.flow, sub_df_flows.efficiency) * row_map.weight row_inter.inflows_profile_aggregation += diff --git a/src/io.jl b/src/io.jl index 9bc7e8fb..96645c5c 100644 --- a/src/io.jl +++ b/src/io.jl @@ -240,8 +240,9 @@ function create_internal_structures(table_tree::TableTree) for asset_profile_row in eachrow(table_tree.profiles.assets["rep-periods"]) # row = asset, profile_type, profile_name gp = DataFrames.groupby( # 3. group by RP filter( - row -> row.profile_name == asset_profile_row.profile_name, # 2. Filter profile_name - table_tree.profiles.data["rep-periods"][asset_profile_row.profile_type], # 1. Get the profile of given type + :profile_name => ==(asset_profile_row.profile_name), # 2. Filter profile_name + table_tree.profiles.data["rep-periods"][asset_profile_row.profile_type]; # 1. Get the profile of given type + view = true, ), :rep_period, ) @@ -256,10 +257,11 @@ function create_internal_structures(table_tree::TableTree) for flow_profile_row in eachrow(table_tree.profiles.flows) gp = DataFrames.groupby( filter( - row -> row.profile_name == flow_profile_row.profile_name, - table_tree.profiles.data["rep-periods"][flow_profile_row.profile_type], + :profile_name => ==(flow_profile_row.profile_name), + table_tree.profiles.data["rep-periods"][flow_profile_row.profile_type]; + view = true, ), - :rep_period, + :rep_period; ) for ((rp,), df) in pairs(gp) graph[flow_profile_row.from_asset, flow_profile_row.to_asset].rep_periods_profiles[( @@ -271,8 +273,9 @@ function create_internal_structures(table_tree::TableTree) for asset_profile_row in eachrow(table_tree.profiles.assets["timeframe"]) # row = asset, profile_type, profile_name df = filter( - row -> row.profile_name == asset_profile_row.profile_name, # 2. Filter profile_name - table_tree.profiles.data["timeframe"][asset_profile_row.profile_type], # 1. Get the profile of given type + :profile_name => ==(asset_profile_row.profile_name), # 2. Filter profile_name + table_tree.profiles.data["timeframe"][asset_profile_row.profile_type]; # 1. Get the profile of given type + view = true, ) graph[asset_profile_row.asset].timeframe_profiles[asset_profile_row.profile_type] = df.value end