-
Notifications
You must be signed in to change notification settings - Fork 5
MSA Feedback
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.
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
- Create link-level user-defined-attributes (UDA) to store previous iteration link times for each demand segment (DSeg)
- Run assignment
- Generate initial skims for each DSeg. 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
- 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 computedt_MSA
skim to be used by person travel demand process in next iteration
- Compute MSA link times as:
- Getting Started
- RunModel bat file
- Networks and Zone Data
- Auto Network Coding
- VDF Definition
- Transit Network Coding
- Non-motorized Network Coding
- Editing Land Use Data
- Running the Population Synthesizer
- Input Checker
- Analyzing Model Outputs
- Commercial Vehicle Model
- External Model
- Model Cost Inputs
- Value of Time
- Person Type Coding Logic
- MSA Feedback
- VMT Computation
- Shadow Pricing Mechanism
- Methodology for Developing TAZ Boundaries
- Methodology for Developing MAZ Boundaries
- Methodology for Developing TAPS
- Source of Land-Use Inputs
- Major University Model (Optional)
- Running Transit Everywhere Scenario
- Building the ABM Java Program
- Debugging ABM Python Code
- ABM Cleaning Protocol
- Updating to New Visum
- Troubleshooting and Debugging