Skip to content

Commit 1948283

Browse files
committed
Added printing of park and ride facility information to results folder
1 parent 389c911 commit 1948283

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

Scripts/models/park_and_ride_model.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class ParkAndRideFacility:
3333
time: float
3434
used_capacity: float
3535
adjustments: int
36+
shops: int = 0
3637
extra_utility: float = None
3738

3839
class ParkAndRideUtilities(NamedTuple):
@@ -255,6 +256,7 @@ def _calc_extra_utility(self, impedance: Dict[str, Dict[str, Dict[str, np.ndarra
255256

256257
for facility in self._facilities:
257258
dist_mask = impedance['aht']['dist']['walk'][facility.zone_offset,0:self._zone_data.nr_zones] < SHOP_SEARCH_RADIUS
259+
facility.shops = self._zone_data['shops'][dist_mask].sum()
258260
facility.extra_utility = self._zone_data['shops'][dist_mask].sum() * shop_weight
259261

260262
@staticmethod

Scripts/modelsystem.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from assignment.abstract_assignment import AssignmentModel
1111
from assignment.emme_assignment import EmmeAssignmentModel
1212
from assignment.mock_assignment import MockAssignmentModel
13+
from dataclasses import asdict
1314

1415
import utils.log as log
1516
from utils.zone_interval import ArrayAggregator
@@ -167,14 +168,15 @@ def _add_internal_demand(self, previous_iter_impedance, is_last_iteration):
167168
purpose.calc_prob(saved_pnr_impedance[purpose.name])
168169
demand = purpose.calc_demand()
169170
log.debug(f"Park and ride crowding penalty iteration {i+1} modified {modified} facilities.")
170-
if modified < 1:
171+
if modified < 1:
171172
break
173+
log.debug(f"Park and ride demand calculation completed.")
172174

173175
if purpose.dest != "source":
174176
for mode in demand:
175177
self.dtm.add_demand(demand[mode])
176178
self.travel_modes[mode] = True
177-
log.info("Demand calculation completed")
179+
log.info("Demand calculation completed")
178180

179181
# possibly merge with init
180182
def assign_base_demand(self,
@@ -353,6 +355,7 @@ def run_iteration(self, previous_iter_impedance, iteration=None):
353355
self._save_to_omx(impedance[tp], tp)
354356
if iteration=="last":
355357
self.ass_model.aggregate_results(self.resultdata)
358+
self._save_pnr_facility_info()
356359
self._calculate_noise_areas()
357360
self._calculate_accessibility_and_savu_zones()
358361
self.resultdata.print_line("\nMode shares", "result_summary")
@@ -389,6 +392,23 @@ def _save_to_omx(self, impedance, tp):
389392
for ass_class in impedance[mtx_type]:
390393
mtx[ass_class] = impedance[mtx_type][ass_class]
391394

395+
def _save_pnr_facility_info(self):
396+
pnr_data = []
397+
for facility in self.dm.purpose_dict['hw'].park_and_ride_model._facilities:
398+
pnr_data.append({k: str(v) for k, v in asdict(facility).items()})
399+
400+
pnr_results = pandas.DataFrame(pnr_data)
401+
print(pnr_results.head())
402+
pnr_results['used_capacity'] = pnr_results['used_capacity'].astype(float).round().astype(int)
403+
pnr_results['shops'] = pnr_results['shops'].astype(float).round().astype(int)
404+
pnr_results.index = pnr_results['zone_id']
405+
pnr_results.index.name = None
406+
pnr_results = pnr_results[['cost','shops','capacity','used_capacity','time']]
407+
print(pnr_results.head())
408+
for col in pnr_results.columns:
409+
self.resultdata.print_data(pnr_results[col], "pnr_facilities.txt", col)
410+
411+
392412
def _calculate_noise_areas(self):
393413
noise_areas = self.ass_model.calc_noise()
394414
self.resultdata.print_data(noise_areas, "noise_areas.txt", "area")

0 commit comments

Comments
 (0)