Skip to content

🧹 Chore: Better Understand Transit Access Connectors #199

@i-am-sijia

Description

@i-am-sijia

This issue explains: What is included in the EMME transit network; How transit access connectors are created; How the transit access information is passed into mode choice, and How transit access information is formed in transit assignment and skimming.

EMME transit network and transit connectors

The step that creates the TAZ-level EMME transit network from the standard network is in Lasso emme.py, it calls prepare_table_for_taz_transit_network() that does the following things:

  • Create transit walk, drive, and transfer connectors
  • Create PNR nodes, links, and dummy buses for capacity constraints
  • Create EMME-format transit line record from standard transit
  • Assembles the universe of links, nodes, and transit lines required to export the EMME transit network

TAZ transit walk connectors

Connect TAZ nodes to all transit stops within a user defined walk buffer distance (currently set to 0.75 miles).

TAZ transit drive connectors

Use the same TAZ drive centroid connectors from the highway network. Connect TAZ to the drive network.

PNR nodes and connectors

  1. PNR station nodes are created using an external PNR station input csv. PNR nodes are create as drive_access = 2. Note: drive_access was originally a binary with 0 - no, 1- yes, Yue added 2, 3 when she coded PNR and KNR.
  2. Create PNR dummy bus links (drive_access = 2) between the PNR node and the nearest light rail, heavy rail, commuter rail, and ferry stop nodes, within a user defined walk buffer (currently set to 0.75 miles). This is the underlying link of the PNR dummy buses.
  3. Create PNR access links between the PNR node and the nearest drive node.

KNR nodes and connectors

  1. KNR connections are created for express bus stations outside of downtown SF, and for all the light rail, heavy rail, commuter rail, and ferry stops.
  2. Offset those stop nodes to create the KNR nodes. KNR nodes are created as drive_access = 3
  3. Create KNR dummy links (drive_access = 3) between the KNR node and the corresponding stop nodes.
  4. Create KNR access links between the KNR node and the nearest drive node.

Transfer connectors

MAZ transit access for mode choice

Mode choices needs transit access information from origin MAZ to transit, and from transit to destination MAZ. For example, in CT-RAMP's BestTransitPathUtility.xls

Image

There are two options to estimate MAZ transit access time:

  • Option 1. Use TAZ transit skims. We can replace @mgraStopsWalkTime with TAZ transit skims, we do currently have WACC and WEGR in the transit skims.

Image

  • Option 2. Calculate MAZ transit walk time using explicit MAZ geographies and TAZ scale transit boardings. See details below. This is currently used by CT-RAMP.

A new algorithm was developed during the TAP removal task to calculate MAZ transit walk time using explicit MAZ geographies and TAZ scale transit boardings. The algorithm is coded in lasso, tap_analysis branch: mtc.estimate_maz_walk_time()

  1. For each MAZ, find transit stops within 0.5 miles
  2. For each of those transit stop, calculate the walk time along the pedestrian network from MAZ to each transit stop, assume a walk speed of 3 miles/hr.
  3. Translate the walk time into a walk impedance using a linear spline function
  4. Obtain the share of demand allocated to each transit stop from each origin TAZ from the TAZ-scale assignment (i.e., the volume on each walk access connector) in the previous iteration of the model.
  5. Use the product of (i) the TAZ-scale assignment boarding share and (ii) the ratio of the walk time and walk impedance, as weights in a weighted average of walk time to compute the MAZ-specific walk access time.
  6. Repeat steps 4 and 5 in the egress direction. The resulting walk access and egress times, by time of day and transit path, are the walk times that will be shown to the mode choice models.

A stable set of MAZ walk access and egress files can be found on Box. They have not been updated since their creation. Ideally they should be updated within model run global iterations, but that hasn't been implemented.

TAZ transit access for path building and assignment

There are two options for estimating TAZ transit access time:

  • Option 1. Use the direct walk time on each TAZ walk connector generated in lasso, as explained above.
  • Option 2. For each TAZ, use the weighted average walk access time between MAZs and each transit stop (i.e., the outcome from the MAZ-scale algorithm) as the walk access time between the TAZ and each transit stop. The weight in this calculation is the MAZ-scale transit demand (for the origin end of trips) from the previous model iteration. The algorithm for this calculation is coded in lasso, tap_analysis branch, mtc.estimate_transit_taz_connectors()

Currently Option 1 is used. For Option 2, a set of stable TAZ estimated access time exists. The infrastructure to implement Option 2 was tested in the beginning of tm2py development, but it hasn't been used since then.

Progress:

  • Sufficiently defined
  • Approach decided
  • Implemented

Considerations

@DavidOry @yueshuaing @lmz @Ennazus

Metadata

Metadata

Assignees

No one assigned

    Labels

    choreoverhead: doesn't add additional functionality, change performance, or refactor code

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions