Skip to content

TVPB Design

Ben Stabler edited this page Aug 6, 2020 · 27 revisions

Design specification for Support for Three Zone Systems and Transit Virtual Path Building (TVPB)

Example Data

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.

Transit Virtual Path Builder

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

revised tour mode choice model

  • 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.

Clone this wiki locally