diff --git a/data/configs/run_bvg_test.cfg b/data/configs/run_bvg_test.cfg new file mode 100644 index 00000000..5dd52b1c --- /dev/null +++ b/data/configs/run_bvg_test.cfg @@ -0,0 +1,134 @@ +# Configs for the eBus Toolbox + +##### INPUT/OUTPUT FILES AND PATHS ##### + +# Input file containing trip information (required) +input_schedule = "./data/bvg_test/export_line100.csv" + +# output path for scenario.json -- called input since its input for spiceev +output_directory = "./data/sim_outputs/" + +# electrified stations (defaults to: data/examples/electrified_stations.json) +electrified_stations = "data/bvg_test/electrified_stations.json" + +# vehicle types (defaults to: ./data/examples/vehicle_types.json) +vehicle_types = "./data/bvg_test/vehicle_types.json" + + +##### SIMULATION HYPERPARAMETERS ##### +# set random seed (for always random: set seed = null) +seed = 1 + +# number of interations for the adjustment of charging types (default:1) +iterations = 5 + +# set length of timestep in minutes (default: 15 minute intervals) +interval = 1 + +# time difference between signal time and actual start time of a vehicle event im min. (default: 10) +signal_time_dif = 10 + + +##### SIMULATION CONDITIONS AND BOUNDARIES ##### + +# maximum number of days to simulate, if not set simulate entire schedule +#days = 10 + +# set minimum allowed state of charge when leaving (default: 0.8) +desired_soc = 1 +save_timeseries = "timeseries.csv" +save_results = "results.json" +save_soc = "soc.csv" + + +# Preferred charging type. Options: depb, oppb (default: depb) +preferred_charging_type = "depb" + +# min charging time at opp station [minutes] (default: 2) +min_charging_time_opps = 0 + +# buffer time at opp station if no specific buffer time is provided +# via the electrified_stations.json [minutes] (default: 1) +# Time specific buffer times can be set via a dict like: +# {"10-22": 5, "else": 2} NOTE: else clause is a MUST! +# The buffer time is deducted off of the planned standing time. +# It may resemble things like delays and/or docking procedures +default_buffer_time_opps = {"7-10": 2, "14-18": 3, "else": 0} + + +##### PHYSICAL SETUP OF ENVIRONMENT ##### + +# minimum fraction of capacity for recharge when leaving the depot. Helps calculating the minimum standing time at depot. Between 0 - 1. (default: 1) +min_recharge_deps_oppb = 1 +min_recharge_deps_depb = 1 + +# max power of grid connectors at depot and opp stations +# default: Sum of max power of all charging stations at this grid connector +gc_power_opps = 100000 +gc_power_deps = 100000 + +# max power of charging station at depot and opp stations +# at depot stations opp and depot busses have distinct charging stations (all default to: 150) +cs_power_opps = 400 +cs_power_deps_depb = 150 +cs_power_deps_oppb = 150 + +# define hours of traffic_jam (options are "stop&go" and "dense") +#rush_hour = {"stop&go": [["07:00", "09:00"], ["15:00", "17:00"]], "dense": [["17:00", "19:00"]]} + +# set stationary batteries [capacity, C-Rate] +# battery with capacity = 75 kWh and C-Rate = 0.5 +#battery = [[50, 1]] + +# 2 batteries with capacity = 50 kWh, C-Rate = 1, grid_connector = "Betriebshof A") +#battery = [[50, 1, "Station-0"]] + +# unlimited battery capacity with constant (dis)charge of 50 kWh +#battery = [[-1, 50]] + + +##### TIMESERIES ##### + +# list of external load timeseries (in this example in same directory as resulting json) and +# grid connector at which the timeseries shall be applied +# e.g. [["timeseries_1_path", "gc_name_1"], ["timeseries_2_path", "gc_name_2"]] +#include_ext_load_csv = [["Building-20210705-20210719.csv", "Betriebshof A"]] + +# options for external load CSV (options are used for all files specified above): +# set CSV column name, timestep duration in sec. (example: 10 min) and factor (example: input in Watt) +#include_ext_csv_option = [["column", "value"], ["step_duration_s", 600], ["factor", 0.001]] + +# local feed in timeseries (in this example in subdirectory "timeseries" - relative to resulting json) and +# grid connector at which the timeseries shall be applied +# e.g. [["timeseries_1_path", "gc_name_1"], ["timeseries_2_path", "gc_name_2"]] +#include_feed_in_csv = [["timeseries/feed_in.csv", "Betriebshof A"]] + +# options for feed in CSV (options are used for all files specified above): +# set CSV column name, timestep duration in sec. (example: 1 hour) and factor (example: input in Watt) +#include_feed_in_csv_option = [["column", "value"], ["step_duration_s", 3600], ["factor", 1]] + +# energy price timeseries in EUR/kWh (in this example in parent directory - relative to resulting json) and +# grid connector at which the timeseries shall be applied +# e.g. [["timeseries_1_path", "gc_name_1"], ["timeseries_2_path", "gc_name_2"]] +#include_price_csv = [["../energy_price.csv", "Betriebshof A"]] + +# options for price CSV (options are used for all files specified above): +# set CSV column name and timestep duration in sec. (example: 6 hours) +#include_price_csv_option = [["column", "value"], ["step_duration_s", 21600]] +# for more options, see https://github.com/rl-institut/spice_ev/wiki/Command-line-options#csv-file-options + + +########### SPICE_EV SIMULATE PARAMETERS ############### + +strategy = distributed +# possible strategies: greedy, balanced, balanced_market, schedule, flex_window +# options: LOAD_STRAT (sub-strategy for some strategies), CONCURRENCY [-], HORIZON [h], PRICE_THRESHOLD [€] +strategy_option = [["CONCURRENCY", 1.0], ["PRICE_THRESHOLD", 0.001], ["ALLOW_NEGATIVE_SOC", 1]] + +# show plots after simulation +visual = false + +# give margin for desired SoC [0.0 - 1.0] +# margin = 0.1 -> simulation will not abort if vehicles reach at least 90% of the desired SoC before leaving. +# margin = 1.0 -> simulation continues with every positive SoC value, but may fail if trips can not be completed. +margin = 1.0 diff --git a/ebus_toolbox/sensitivity_analysis.py b/ebus_toolbox/sensitivity_analysis.py index 88a47320..f7fb9143 100644 --- a/ebus_toolbox/sensitivity_analysis.py +++ b/ebus_toolbox/sensitivity_analysis.py @@ -91,19 +91,23 @@ def get_temperature(): # cs_power_opps, cs_power_deps_depb, cs_power_deps_oppb (Technik) # cs_power_opps -power_opps = np.arange(start=50, stop=350, step=50) -reduced_power = random.choice(power_opps) +def reduced_power(): + "creates list of different values which are smaller then the default power " + power_opps = np.arange(start=50, stop=350, step=50) + reduced_power_opps = random.choice(power_opps) -# cs_power_deps_depb -power_deps_depb = np.arange(start=30, stop=90, step=30) -reduced_power = random.choice(power_deps_depb) + # cs_power_deps_depb + power_deps_depb = np.arange(start=30, stop=90, step=30) + reduced_power_depb = random.choice(power_deps_depb) -# cs_power_deps_depb -power_deps_depb = np.arange(start=30, stop=120, step=30) -reduced_power = random.choice(power_deps_depb) + # cs_power_deps_depb + power_deps_oppb = np.arange(start=30, stop=120, step=30) + reduced_power_oppb = random.choice(power_deps_depb) + + return reduced_power_opps, reduced_power_depb, reduced_power_oppb # 4. network utilization # gc_power_opps, gc_power_deps (Netzauslastung)