-
Notifications
You must be signed in to change notification settings - Fork 100
TVPB Design
Design specification for Support for Three Zone Systems and Transit Virtual Path Building (TVPB)
There are two example data sets for testing:
- ActivitySim TM1 test example with a few small revisions. This data set is used to develop the functionality, but it is too small to be useful for performance testing. The 25 zone test example are downtown San Francisco zones and they are converted to 25 MAZs. Each TAZ is also converted to a TAP numbered 10000+. MAZs 1,2,3,4 are small and adjacent and assigned to TAZ 2 and TAP 10002. MAZs 13,14,15 are small and adjacent and assigned to TAZ 14 and TAP 10014. TAZs 1,3,4,13,15 are removed from the final data set. TAPs 10001,10003,10004,10013,10015 are removed from the final data set. See the Jupyter notebook for the data transformation steps.
- ActivitySim TM1 example with TM1 households reassigned to TM2 zones, TM1 land use reassigned to TM2 zones, and the use of TM2 three zone system network LOS data instead of TM1 skims. This data set is full scale so it can be used for performance testing. It uses TM1 population and land use since the existing submodels expression files work with these data sets. See MTC TVPB test data for the data specification.
In both cases, submodel expression files need to be reconfigured to support the three zone system approach to network LOS. To begin, the tour mode choice expression file was revised as explained below. This allows for testing TVPB for tour mode choice.
The user specifies a new file
# transit virtual path builder (tvpb.yaml)
DEMOGRAPHIC_SEGMENTS:
high_income:
CONSTANTS:
c_ivt_high_income: -0.028
c_cost_high_income: -0.00112
low_income:
CONSTANTS:
c_ivt_low_income: -0.028
c_cost_low_income: -0.00112
MAZ_TAP_MODES:
walk:
maz_taps_file: walk_maz_taps.csv
SPEC: tvpb_walk_maz_tap.csv
CHOOSER_COLUMNS:
- walk_time
drive:
maz_taps_file: drive_maz_taps.csv
SPEC: tvpb_drive_maz_tap.csv
CHOOSER_COLUMNS:
- drive_time
- DIST
TAP_TAP_SETS:
skims: tap_skims.omx
tap_tap_sets:
- fastest
- cheapest
- shortest
PREPROCESSOR:
SPEC: tvpb_tap_tap_annotate_choosers_preprocessor.csv
DF: df
TVPB_SETTINGS:
PATH_SETS:
WTW:
access: walk
egress: walk
max_best_paths_across_tap_sets: 3
max_paths_for_logsum_per_tap_set: 1
path_nesting_coefficient: 0.24
DTW:
access: drive
egress: walk
max_best_paths_across_tap_sets: 1
max_paths_for_logsum_per_tap_set: 1
path_nesting_coefficient: 0.24
WTD:
access: walk
egress: drive
max_best_paths_across_tap_sets: 1
max_paths_for_logsum_per_tap_set: 1
path_nesting_coefficient: 0.24
CONSTANTS:
c_wait: 1.5
c_walk: 1.7
c_drive: 1.5
c_auto_operating_cost_per_mile: 18.29
C_UNAVAILABLE: -999
-
tour mode choice expression file and trip mode choice expression file usage
-
los.get_tvpb_logsum_odt(DEMOGRAPHIC_SEGMENT, PATH_SETS), for example los.get_tvpb_logsum_odt("high_income", "WTW")
-
returns logsum of max_best_paths for all paths across all skims sets (consistent with the max_paths_for_logsum) for mode utility
-
if mode selected, also return the path id '<access_tap>-<tap_to_tap_set>-<egress_tap>', for example '1000-fastest-1010'
-
for walk in tour mode choice - los.get_tvpb_logsum_odt(DEMOGRAPHIC_SEGMENT, WTW) + los.get_tvpb_logsum_dot(DEMOGRAPHIC_SEGMENT, WTW)
-
for drive in tour mode choice - los.get_tvpb_logsum_odt(DEMOGRAPHIC_SEGMENT, DTW) + los.get_tvpb_logsum_dot(DEMOGRAPHIC_SEGMENT, WTD)
-
for walk in trip mode choice - los.get_tvpb_logsum_odt(DEMOGRAPHIC_SEGMENT, WTW)
-
for drive in trip mode choice - los.get_tvpb_logsum_odt(DEMOGRAPHIC_SEGMENT, DTW)
-
go ahead and get it working with relculating the best paths each time and then we can figure out what and when to pre-calculate, cache, etc.
-
note users should trim the set of taps for each maz to remove maz-tap pairs that serve the same transit lines
-
for example, transit line 5 serves MAZ 100 via TAP 1000 and TAP 1010 and TAP 1000 is closer to MAZ 100. Make
-
sure to remove the MAZ 100 to TAP 1010 entry from the MAZ to TAP file to avoid unnecessary calculations.