ActivitySim Auto-Calibrate Task Scope and Design Proposal
Zephyr ActivitySim Phase 11C
Last Updated: January 2023
April 28, 2026
With:
Driftless Labs, LLC
WSP
Today’ Presentation
Motivation
Scope of work
Task 1: Design
ActivitySim Auto-Calibrate Task Scope and Design Proposal
Task 1: Design considerations
Task 1: Key Features
User Expectations
We will provide examples for each of the above points for the model components and targets covered in this task but we cannot cover every instance of model parameters that could be adjusted using automated procedures.
Methods for Adjusting Coefficients: Binary
Constant_adjustment = ln(observed_share/estimated_share) * damping_factor
Constant_adjustment = ln(((obs_share*est_share)-obs_share) / ((obs_share*est_share)-est_share))) * damping_factor
Methods for Adjusting Coefficients : Non-Linear
Label | Description | Expression | Coefficient |
util_dist | Distance | @_DIST | coef_dist |
util_dist_sqrt | Square root of distance | @_DIST**0.5 | coef_dist_sqrt |
util_dist_sqrd | Distance squared | @_DIST**2 | coef_dist_sqrd |
util_dist_cubed | Distance cubed | @_DIST**3 | coef_dist_cubed |
SANDAG Workplace Location Choice Distance Terms
Label | Description | Expression | Coefficient |
util_cal 0-2 - miles | Calibration 0-2 - miles | @_DIST<=2 | coef_distance_0_2miles |
util_cal 2-5 - miles | Calibration 2-5 - miles | @(_DIST>2) * (_DIST<=5) | coef_distance_2_5miles |
util_cal 5-10 - miles | Calibration 5-10 - miles | @(_DIST>5) * (_DIST<=10) | coef_distance_5_10miles |
util_cal 10-20 - miles | Calibration 10-20 - miles | @(_DIST>10) * (_DIST<=20) | coef_distance_10_20miles |
util_cal 20-30 - miles | Calibration 20-30 - miles | @(_DIST>20) * (_DIST<=30) | coef_distance_20_30miles |
util_cal >30 - miles | Calibration >30 - miles | @(_DIST>30) | coef_distance_30plusmiles |
Methods for Adjusting Coefficients : Non-Linear
ln(observed_sharebin/estimated_sharebin) = coef_dist * distancebin
+ coef_dist_sqrt * sqrt(distancebin)
+ coef_dist_sqrd * distancebin2
+ coef_dist_cubed* distancebin3
These terms then get added to the original terms in the next iteration
The initial version of the implementation will support binary adjustments; we may implement non-linear adjustments depending upon available budget
Label | Description | Expression | Coefficient |
util_cal 2+ miles | Calibration 2+ miles | @(_DIST>2)*_DIST | coef_distance_2plus |
util_cal 5+ miles | Calibration 5+ miles | @(_DIST>5) *_DIST | coef_distance_5plus |
util_cal 10+ miles | Calibration 10+ miles | @(_DIST>10) *_DIST | coef_distance_10plus |
Other considerations
Task 2: Implement and Test
ActivitySim Auto-Calibrate Task Scope and Design Proposal
Implementation Requirements
Requirements:
Implementation Design
A new calibration run mode analogous to estimation
Settings:
calibration.yaml prototype
Calibration Example Spec – Auto Ownership
User responsible for:
description | coefficient | model_value | target_value | hold_fast | min | max | damping_factor |
0 auto ownership share | coef_calib_auto_0 | len(households[households.autos ==0) / len(households) | 0.06812 | FALSE | -5 | 5 | 1 |
2 auto ownership share | coef_calib_auto_2 | len(households[households.autos ==2) / len(households) | 0.348413 | FALSE | -5 | 5 | 1 |
3 auto ownership share | coef_calib_auto_3 | len(households[households.autos ==3) / len(households) | 0.13718 | FALSE | -5 | 5 | 1 |
4 auto ownership share | coef_calib_auto_4 | len(households[households.autos ==4) / len(households) | 0.057501 | FALSE | -5 | 5 | 1 |
auto_ownership_calibration.csv
Label | Description | Expression | cars0 | cars1 | cars2 | cars3 | cars4 |
util_drivers_1 | 1 Adult (age 16+) | num_drivers==1 | | coef_cars1_drivers_1 | coef_cars2_drivers_1 | coef_cars3_drivers_1 | coef_cars4_drivers_1 |
util_drivers_2 | 2 Adult (age 16+) | num_drivers==2 | | coef_cars1_drivers_2 | coef_cars2_drivers_2 | coef_cars3_drivers_2 | coef_cars4_drivers_2 |
util_drivers_3_up | 3+ Adults (age 16+) | num_drivers>=3 | | coef_cars1_drivers_3_up | coef_cars2_drivers_3_up | coef_cars3_drivers_3_up | coef_cars4_drivers_3_up |
# ….. | | | | | | | |
calib_constant | calibration constant | 1 | coef_calib_auto_0 | | coef_calib_auto_2 | coef_calib_auto_3 | coef_calib_auto_4 |
auto_ownership.csv
1 auto is base alternative
Calibration Example Spec – Auto Ownership
description | coefficient | model_value | target_value | hold_fast | min | max | damping_factor |
0 auto ownership share | coef_calib_auto_0 | summarize_auto_own_model(autos=0) | summarize_auto_own_survey(autos=0) | FALSE | -5 | 5 | 1 |
2 auto ownership share | coef_calib_auto_2 | summarize_auto_own_model(autos=2) | summarize_auto_own_survey(autos=2) | FALSE | -5 | 5 | 1 |
3 auto ownership share | coef_calib_auto_3 | summarize_auto_own_model(autos=3) | summarize_auto_own_survey(autos=3) | FALSE | -5 | 5 | 1 |
4 auto ownership share | coef_calib_auto_4 | summarize_auto_own_model(autos=4) | summarize_auto_own_survey(autos=4) | FALSE | -5 | 5 | 1 |
Generic (default) Summary Reports
Output table with the following columns:
Plots derived from this table:
Summary Statistics by iteration:
Other useful summaries?
Bespoke Summary Reporting – User specified plots
Questions\Discussion
20
Thank you
Joel Freedman
NOTE
PRINCIPAL
Joel.Freedman@rsginc.com
David Hensle
SENIOR CONSULTANT
David.Hensle@rsginc.com