Skip to content

MSA Feedback

Ben Stabler edited this page Oct 25, 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 the warm start assignment method 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 implementation steps are as follows:

  1. Initial preparation
    • Create link-level user-defined-attributes (UDA) to store previous iteration link times for each demand segment (DSeg) e.g., tCur_SOV, tCur_HOV2, etc.
    • Initialize the travel time UDAs to zero for the first iteration
  2. For each iteration
    • Perform assignment
    • Run the existing skimming process for each DSeg. Visum assigns a sequential matrix number to each skim. These same skim numbers are used in CT-RAMP UECs. Therefore, the existing skimming process is run to generate skims with the same matrix numbers.
    • For each DSeg:
      • Compute MSA link times as:
        t_MSA = t_previous * (1-1/iteration) + t_current * (1/iteration)
      • Compute MSA generalized cost using t_MSA
      • 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