eflips-depot 4.14.1__tar.gz → 4.14.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/PKG-INFO +1 -1
  2. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/api/__init__.py +46 -11
  3. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/api/private/consumption.py +18 -22
  4. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/pyproject.toml +1 -1
  5. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/LICENSE.md +0 -0
  6. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/README.md +0 -0
  7. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/__init__.py +0 -0
  8. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/api/defaults/default_settings.json +0 -0
  9. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/api/private/__init__.py +0 -0
  10. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/api/private/depot.py +0 -0
  11. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/api/private/results_to_database.py +0 -0
  12. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/api/private/util.py +0 -0
  13. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/configuration.py +0 -0
  14. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/depot.py +0 -0
  15. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/evaluation.py +0 -0
  16. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/filters.py +0 -0
  17. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/input_epex_power_price.py +0 -0
  18. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/layout_opt/__init__.py +0 -0
  19. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/layout_opt/doc/__init__.py +0 -0
  20. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/layout_opt/doc/direct_details.pdf +0 -0
  21. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/layout_opt/evaluation.py +0 -0
  22. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/layout_opt/opt_tools/__init__.py +0 -0
  23. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/layout_opt/opt_tools/crossover.py +0 -0
  24. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/layout_opt/opt_tools/fitness_c_urfd.py +0 -0
  25. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/layout_opt/opt_tools/fitness_util.py +0 -0
  26. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/layout_opt/opt_tools/init.py +0 -0
  27. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/layout_opt/opt_tools/mutation.py +0 -0
  28. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/layout_opt/optimize_c_urfd.py +0 -0
  29. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/layout_opt/packing.py +0 -0
  30. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/layout_opt/settings.py +0 -0
  31. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/layout_opt/template_creation.py +0 -0
  32. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/layout_opt/util.py +0 -0
  33. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/plots.py +0 -0
  34. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/processes.py +0 -0
  35. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/rating.py +0 -0
  36. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/resources.py +0 -0
  37. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/settings_config.py +0 -0
  38. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/simple_vehicle.py +0 -0
  39. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/simulation.py +0 -0
  40. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/smart_charging.py +0 -0
  41. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/standalone.py +0 -0
  42. {eflips_depot-4.14.1 → eflips_depot-4.14.3}/eflips/depot/validation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eflips-depot
3
- Version: 4.14.1
3
+ Version: 4.14.3
4
4
  Summary: Depot Simulation for eFLIPS
5
5
  License: AGPL-3.0-or-later
6
6
  License-File: LICENSE.md
@@ -1381,10 +1381,11 @@ def auto_generate_depot_inplace(
1381
1381
  for trip in rot.trips:
1382
1382
  for stop_time in trip.stop_times:
1383
1383
  to_delete.append(stop_time)
1384
+ for event in trip.events:
1385
+ to_delete.append(event)
1384
1386
  to_delete.append(trip)
1385
1387
  to_delete.append(rot)
1386
1388
 
1387
- # debugging
1388
1389
  for obj in to_delete:
1389
1390
  session.flush()
1390
1391
  session.delete(obj)
@@ -1392,13 +1393,49 @@ def auto_generate_depot_inplace(
1392
1393
 
1393
1394
  # Consumption simulation for rotations of this depot
1394
1395
 
1395
- consumption_results = generate_consumption_result(scenario)
1396
- simple_consumption_simulation(
1397
- scenario,
1398
- initialize_vehicles=True,
1399
- consumption_result=consumption_results,
1396
+ # if the driving events are already in the database, we do not need to run the consumption simulation again
1397
+ current_driving_trips = (
1398
+ session.query(Event.trip_id)
1399
+ .filter(
1400
+ Event.scenario_id == scenario.id, Event.event_type == EventType.DRIVING
1401
+ )
1402
+ .all()
1403
+ )
1404
+ current_trips = (
1405
+ session.query(Trip.id).filter(Trip.scenario_id == scenario.id).all()
1400
1406
  )
1401
1407
 
1408
+ # if the two lists are identical, we can skip the consumption simulation
1409
+ if set([t[0] for t in current_driving_trips]) != set(
1410
+ [t[0] for t in current_trips]
1411
+ ):
1412
+ logger.info(
1413
+ "Running eflips consumption simulation for depot layout generation since the driving events do not cover all trips"
1414
+ )
1415
+ driving_events_to_delete = (
1416
+ session.query(Event)
1417
+ .filter(
1418
+ Event.scenario_id == scenario.id,
1419
+ Event.event_type == EventType.DRIVING,
1420
+ )
1421
+ .all()
1422
+ )
1423
+ if len(driving_events_to_delete) > 0:
1424
+ logger.info(
1425
+ "Deleting existing driving events before running consumption simulation"
1426
+ )
1427
+ for event in driving_events_to_delete:
1428
+ session.delete(event)
1429
+ session.flush()
1430
+
1431
+ logger.warning("Starting eflips consumption sim")
1432
+ consumption_results = generate_consumption_result(scenario)
1433
+ simple_consumption_simulation(
1434
+ scenario,
1435
+ initialize_vehicles=True,
1436
+ consumption_result=consumption_results,
1437
+ )
1438
+
1402
1439
  logger.info(f"Generating depot layout for station {station.name}")
1403
1440
  vt_capacities_for_station = depot_smallest_possible_size(
1404
1441
  station,
@@ -1460,9 +1497,9 @@ def generate_optimal_depot_layout(
1460
1497
  """
1461
1498
 
1462
1499
  with create_session(scenario, database_url) as (session, scenario):
1463
- # Delete all depot events
1500
+ # Delete all non-Driving events
1464
1501
  session.query(Event).filter(
1465
- Event.scenario_id == scenario.id, Event.area_id.isnot(None)
1502
+ Event.scenario_id == scenario.id, Event.event_type != EventType.DRIVING
1466
1503
  ).delete()
1467
1504
 
1468
1505
  if session.query(Depot).filter(Depot.scenario_id == scenario.id).count() != 0:
@@ -1486,9 +1523,7 @@ def generate_optimal_depot_layout(
1486
1523
  # Delete all vehicles and events, also disconnect the vehicles from the rotations
1487
1524
  rotation_q = session.query(Rotation).filter(Rotation.scenario_id == scenario.id)
1488
1525
  rotation_q.update({"vehicle_id": None})
1489
- session.query(Event).filter(Event.scenario_id == scenario.id).delete()
1490
- session.query(Vehicle).filter(Vehicle.scenario_id == scenario.id).delete()
1491
- session.expire_all()
1526
+
1492
1527
  for depot_wish in depot_config_wishes:
1493
1528
  if depot_wish.auto_generate is False:
1494
1529
  continue
@@ -121,38 +121,29 @@ class ConsumptionInformation:
121
121
  )
122
122
 
123
123
  # Recover the scales along each of the four axes from the datapoints
124
+ incline_col_index = self.consumption_lut.columns.index("incline")
125
+ temperature_col_index = self.consumption_lut.columns.index("t_amb")
126
+ level_of_loading_col_index = self.consumption_lut.columns.index(
127
+ "level_of_loading"
128
+ )
129
+ speed_col_index = self.consumption_lut.columns.index("mean_speed_kmh")
124
130
 
125
131
  incline_scale = sorted(
126
- set(
127
- [
128
- x[self.consumption_lut.columns.index("incline")]
129
- for x in self.consumption_lut.data_points
130
- ]
131
- )
132
+ set([x[incline_col_index] for x in self.consumption_lut.data_points])
132
133
  )
133
134
  temperature_scale = sorted(
134
- set(
135
- [
136
- x[self.consumption_lut.columns.index("t_amb")]
137
- for x in self.consumption_lut.data_points
138
- ]
139
- )
135
+ set([x[temperature_col_index] for x in self.consumption_lut.data_points])
140
136
  )
141
137
  level_of_loading_scale = sorted(
142
138
  set(
143
139
  [
144
- x[self.consumption_lut.columns.index("level_of_loading")]
140
+ x[level_of_loading_col_index]
145
141
  for x in self.consumption_lut.data_points
146
142
  ]
147
143
  )
148
144
  )
149
145
  speed_scale = sorted(
150
- set(
151
- [
152
- x[self.consumption_lut.columns.index("mean_speed_kmh")]
153
- for x in self.consumption_lut.data_points
154
- ]
155
- )
146
+ set([x[speed_col_index] for x in self.consumption_lut.data_points])
156
147
  )
157
148
 
158
149
  # Create the 4d array
@@ -168,9 +159,14 @@ class ConsumptionInformation:
168
159
  # Fill it with NaNs
169
160
  consumption_lut.fill(np.nan)
170
161
 
171
- for i, (incline, temperature, level_of_loading, speed) in enumerate(
172
- self.consumption_lut.data_points
173
- ):
162
+ for (
163
+ i,
164
+ data_point,
165
+ ) in enumerate(self.consumption_lut.data_points):
166
+ incline = data_point[incline_col_index]
167
+ temperature = data_point[temperature_col_index]
168
+ level_of_loading = data_point[level_of_loading_col_index]
169
+ speed = data_point[speed_col_index]
174
170
  consumption_lut[
175
171
  incline_scale.index(incline),
176
172
  temperature_scale.index(temperature),
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "eflips-depot"
3
- version = "4.14.1"
3
+ version = "4.14.3"
4
4
  description = "Depot Simulation for eFLIPS"
5
5
  authors = ["Enrico Lauth <enrico.lauth@tu-berlin.de>",
6
6
  "Ludger Heide <ludger.heide@tu-berlin.de",
File without changes
File without changes