Calibration of Driving Behavior Models Using Derivative-Free Optimization and Video Data for Montreal Highways

TRB 95th Annual Meeting (2016), paper reference 16-2988

L. Gauthier, N. Saunier, S. Le Digabel, and G. Cao

Abstract: Traffic simulation software is commonly used for traffic impact assessment in transportation projects, allowing the selection of adequate solutions to existing complex problems without having to test them in the field. Such software is highly adaptable to different road conditions and driving behaviours by letting engineers modify a large number of parameters. However, this flexibility requires the model to be calibrated for each application in different regions, conditions and settings. Calibration requires data, which can be time-consuming and costly to collect. We propose a calibration procedure for the driving behavior models, which describe how vehicles interact with each other. These calibrated behaviors should be generic for the region regardless of the specific site geometry and the proposed procedure seeks to allow this generalisation by allowing simultaneous simulations on my many networks. To achieve this calibration, a state-of-the-art derivative free optimization algorithm, the mesh-adaptive direct-search algorithm, is used to fit simulations to real world microscopic data acquired via automated video analysis. We propose an implementation of this procedure for the Wiedemann 99 model in the VISSIM traffic micro-simulation software in a case study for the City of Montreal using data collected on a major Montreal highway.

This page presents the data used in the paper.


Archive to download.

The data projected to the alignments (the center lines of each lane) are stored in the curvilinear_positions table in each SQLite database. There is a database per 20-min video used in the paper for calibration or validation (six in total).


Assuming one has the Traffic Intelligence python modules installed, the following code will load the data:

import storage
dirname = "./" # directory containing all downloaded SQLite files
filename = "GP250001_assigned.sqlite"
objects = storage.loadTrajectoriesFromSqlite(filename, "object")
objects = {o.getNum():o for o in objects} # data must be a dictionary indexed by object id (num)
storage.addCurvilinearTrajectoriesFromSqlite(filename, objects)
# code to plot the longitudinal position (in each lane) of each vehicle
for o in objects.values():