Skip to content

MSA Feedback

Binny Mathew Paul edited this page Nov 22, 2019 · 43 revisions

Background

Travel demand models generally follow a sequential process wherein person travel demand is generated and then assigned to a network with fixed capacity. A key challenge associated with the sequential processing is that the congestion generated by assigning demand to the network is also an input to the models used to estimate demand. A generally accepted solution to this problem is to iterate the model system, where network level-of-service from assignment is "fed back" to demand generation. After network assignment, new travel time matrices are generated, the person travel models are re-run and new destination, modes, etc. are chosen and the trips are re-loaded onto the network. This process is repeated until an acceptable level of convergence is achieved. It is insufficient to simply feed back the congested skims, since the model system may oscillate between iterations and never converge. Using warm start assignment methods at each iteration of the model system, in Visum or other assignment package, is not mathematically guaranteed to reach convergence.

MSA Implementation in SOABM

For SOABM, the Method of Successive Averages (MSA) is used to achieve convergence. The MSA method computes a new average solution at every iteration as a function of the number of iterations being carried out. The function is shown below:

New Solution = Previous Solution * (1 - 1/N) + Current Solution * (1/N)

where, N is the iteration count.

For the Visum-based SOABM, MSA feedback was implemented on link times. Link volumes and link times are read-only variables in Visum. Link volumes are computed by the assignment module and the link times are computed using a volume-delay function. Therefore, direct averaging of link volumes or times is not possible in Visum. However, MSA-averaged travel time skims can be computed from a user-defined MSA link time variable. Therefore the assignment-skimming process was updated to calculate MSA link times and compute shortest path skims. The updated assignment-skimming steps (taz_skim entry point in the SOABM.py script) are as follows:

For each ABM feedback iteration and time-of-day period:

  • Call the MSA Preparation function which does the following:
    • Create link-level user-defined-attributes (UDA) to store previous iteration link times for each demand segment (DSeg)
      tCur_SOV, tCur_SOVToll, tCur_HOV2, tCur_HOV2Toll, tCur_HOV3, tCur_HOV3Toll, tCur_TRUCK, tCur_TRUCKToll
    • Set travel time UDAs to previous iteration link times. For the first iteration, these are set to zero
  • Perform assignment and skimming by running the procedures stored in config/visum/taz_skim_[TOD].xml
  • Generate initial skims for each DSeg (demand segment) as described here. The skim numbers must match the skim numbers specified in CT-RAMP UECs
  • For each DSeg:
    • Compute MSA link times as:
      t_MSA = t_previous * (1-1/iteration) + t_current * (1/iteration)
      The t_previous is zero for the 1st iteration as initialized in the initial preparation step. For 1st iteration, t_MSA simply becomes:
      t_MSA = 0 * (1-1/1) + t_current * (1/1) = t_current
    • Compute MSA generalized cost using t_MSA as follows:
      Generalized Cost = 1 * t_MSA + 166.5 * Toll_PrTSys([DSEG]) + 0.02 * LENGTH
      Detailed information on generalized cost can be found here
    • Compute shortest path skims using MSA generalized cost. Compute t_MSA skim in addition to all other skims
    • Since all other skims already exist, they get overwritten by the skimming process
    • Overwrite the tCur skim with the newly computed t_MSA skim to be used by person travel demand process in next iteration
Clone this wiki locally