Skip to content

SOABM Volume Delay Function Definition

Alex Bettinardi edited this page Jun 10, 2022 · 12 revisions

VDF Background

The volume-delay function (VDF) is a link-based function that consists of both a mid-block and an intersection component, and is used to calculate travel time within a static equilibrium traffic assignment model. It was originally developed for use in the Pima Association of Governments (PAG) travel model, and subsequently adopted by San Diego Association of Governments (SANDAG) and Anchorage Metropolitan Area Transportation Study (AMATS).

The functional form of the equation is shown below. The intersection component is only active when the To node of the link is controlled by a traffic signal, stop sign, roundabout, or ramp meter. Otherwise the intersection component adds no delay. The VDF results in travel times that increase monotonically with respect to volume. Capacities are based on link and intersection characteristics but do not consider volumes on upstream links or opposing volumes.

where:

  • Tf is link congested travel time (minutes)
  • T0 is link free-flow travel time (minutes)
  • V is link volume
  • Cl is mid-link capacity
  • Ci is intersection capacity, which is a function of intersection geometry and g\c ratio for the approach
  • g/c is green time ratio for the approach for signalized intersections, or some factor representing the g/c ratio for other
  • c is the cycle length in seconds
  • P is a factor representing progression for coordinated signals, or lack of progression for uncoordinated signals
  • αl, βl, αi, βi are parameters calibrated to result in monotonically increasing congestion with respect to increases in volume for link (l) and intersection (i) components
Link Functional Class αl term βl Term αi term βi Term
Interstate (access controlled) 0.3 6.0 2.0 2.0
All Other 0.15 4.0 2.0 2.0

VDF Implementation

The required network variables for the VDF are calculated in the prepVDFData function of Master_Runner.py. The function starts by reading the inputs/vdf_lookup_table.csv, which contains all the parameters for the VDF. Next, the function gets all required link and node data, and then it loops through links and calculates all required fields. The function saves the following user-defined link attributes for the custom VDF DLL to the current version file:

  • vdf_int_fc - intersecting functional class
  • vdf_rl - exclusive right lanes
  • vdf_tl - thru lanes
  • vdf_ll - exclusive left lanes
  • vdf_mid_link_cap - mid-link capacity
  • vdf_unc_sig_delay - uncongested signal delay
  • vdf_int_cap - intersection capacity
  • TYPENO - planNo

Capacity Calculations

The following formulas are used for capacity calculations:

Freeway mid-link capacity per hour = (ml * mlc + al * alvph)

Where: ml is the number of mixed-flow lanes mlc is the capacity per lane per hour al is the number of auxiliary lanes alvph is the auxiliary lane vehicles per hour

Street mid-link capacity = ln * cpl - 300 - 200(m == 0)

Where:

ln	is the number of mid-block lanes on link
cpl	is the capacity per lane per hour 
m	is a median code indicator (0 indicates no median)       

Intersection approach capacity = gc(fc,xfc) * (tl * tlvph + (rl + ll) * tlf(fc)) Where tl is the number of through lanes at approach tlvph is the capacity of through lanes per hour gc is the green-to-cycle time ratio fc is the functional class of street xfc is the intersecting functional class r1 is the number of right turn lanes ll is the number of left turn lanes tlf is the per lane turn lane capacity that varies by functional classification

As noted above, all of the per-lane capacities, cycle lengths, and green time ratios are stored in inputs/vdf_lookup_table.csv. Other inputs to the function are network attributes.

Final V/C Reported

One of the final steps of the ABM run is to copy the final capacity that was used into the CapPrT field in Visum so that the internally calculated Volume to Capacity Ratio (VolCapRatioPrT) field in Visum is correct. As is noted above, the process calculates both a mid-link capacity (vdf_mid_link_cap) and an intersection capacity (vdf_int_cap). The code populates VolCapRatioPrT with the minimum capacity (worst case) of either the mid link or intersection capacity. This is so the analyst can see where bottlenecks are cropping up in the run and potentially address them; using VolCapRatioPrT as a quick screening tool to see where the most congested issues are. Most of these will be approaches to intersections.

It is common for customers to request volume to capacity information from the model (to understand where bottlenecks in the system are). Some requesters might be interested in the intersection capacity, but it's more likely that the requester will be interested in a volume to capacity ratio that uses mid link capacity and not to confuse the analysis by including intersection capacity where it is lower than mid link. Therefore, the recommendation is that if V/C (or demand to capacity D/C) information is requested from the model that the analyst specifically provide the hour (or time period) requested over the vdf_mid_link_cap field. Again, different types of V/C can be provided for different requests, but the most common case will be model demand over the vdf_mid_link_cap field.

Building the VDF

  • Download Visual Studio Community 2017
  • Download the Desktop Development with C++ Workload if needed (for building Windows desktop C++ applications)
  • Open the UserDefVDF.sln
  • Set the solution configuration to "Release" and the platform to "x64"
  • Go to Build + Rebuild Solution
  • The output VisumVDF_ODOTVDFx64.dll DLL should be in x64/release folder

Runtime Setup

  • Every time the VisumVDF_ODOTVDFx64.dll DLL is built, copy the DLL to the VISUM project directorie's user defined DLLs folder:
C:\Users\<me>\AppData\Roaming\PTV Vision\PTV Visum 18\UserVDF-DLLs
  • Copy the VisumVDF_ODOTVDFx64.bmp function image for the VISUM VDF dialog to the same folder
  • Confirm the DLL in VISUM via Calculate + Procedures + General Procedure Settings + PrT Settings + VDF and click Create. Select the ODOTVDF (user-defined).
  • After confirming the DLL in VISUM, copy the the DLL and the function image to the template\application folder.
  • The RunModel.bat file copies the VisumVDF_ODOTVDFx64.dll DLL and the VisumVDF_ODOTVDFx64.bmp function image from the template\application directory to the user defined DLL folder in the AppData\Roaming folder of the current Windows session. This is to ensure that the model uses the correct VDF DLL for each run for each user.
Clone this wiki locally