04_01 Implementing STM3 in Emme4

Implementing the Sydney Strategic Transport
Model (STM) in Emme 4
Dr Peter Hidas
Bureau of Transport Statistics, Transport for NSW
October 2014
Acknowledgements
 Team Effort
 Model Development & Estimation
 RAND Europe
 Frank Milthorpe, BTS
 Implementation in Emme4 and Python
 Peter Hidas and Ting Yu
 Validation, testing
 The BTS Modelling Team
History of STM
• First developed in 1970s
• Major Updates 1986 & 1994/95
• Redesigned in late 1990s
– Known as STM2
– Still in use
• Extended and re-estimated in 2012-14
– Known as STM3
– Implemented – validation in progress
Study Area – Sydney GMA
• 2006 zoning (24,443 km2):
– 2715 Travel Zones
– 25,000 Nodes
– 90,000 Links
– 1,350 Transit Lines
– 445 Stations
• Rail, LR, Ferry
• 2011 zoning (31,407 km2)
– + 400 zones
Newcastle
Sydney
Wollongong
400 km
250 mi
Key Features of STM2
• Tour based model system
– Home to Primary destination and return
• Disaggregate model
–
–
–
–
Person and household segmentation
Forecasting of licence holdings
Forecasting of car ownership
Segmentation: Population Synthesiser
• Joint mode-destination choice models
– Nested/Multinomial Logit choice
• Demand is not constant
– Tour frequency depends on accessibility
STM3 Enhancements
• Use most recent travel survey data (HTS)
• Model base year: 2011
• Explicit modelling of toll roads
– Toll-users, non-toll-users separate modes
– (STM2: only one car driver option)
• Explicit modelling of access mode to rail
– Park-&-Ride, Kiss-&-Ride, Bus, Walk
– (STM2: only bus and walk)
STM3 Travel Purposes
• Home based purposes (to primary destination)
– Work
– Business
– Education
• Primary, Secondary, Tertiary
– Shopping
– Other
• Non-Home based purposes
– Work based business
– Business detours as part of work tour
STM3 Travel Modes
• Modes
– Car Driver
• Toll users, Non-toll users
– Car Passenger
– Train (includes Light Rail & Ferry)
• Park-&-Ride, Kiss-&-Ride, Walk, Bus
–
–
–
–
Bus
Walk
Bicycle
Taxi
• (Crowding on PT not modelled)
Segmentation
• Extensive segmentation
– Different by purpose
– Additional segments for frequency model
• Home Based work
– Mode Destination Models
• Car availability/Licence holding (8 segments)
• Work status (full time, part time)
• Income (5 segments)
– Frequency Models
• Age (3 segments)
• Adult status (1/5 segments)
Number of Segments
Purpose
Mode Additional
Destination Frequency Total
Work
80
3/15
720
Business
24
24
576
Primary Education
10
4
40
3
2
6
Tertiary Education
12
12
144
Shopping
36
36
1296
Other
25
56
1400
Secondary Education
STM3 Values of Time
• Values of Time Vary
– Personal Income
– Journey Purpose
– Mode of Travel
• Use log and linear cost terms
– Better fit for demand estimation
– More difficult for economic benefit calculation
STM3 - Implementation
• Model Development & Estimation
– ALOGIT software (RAND Europe)
– No direct linkage to Emme
• STM2
– Implemented using Emme macros
• STM3 – Emme 4 available
– How best to utilise?
STM3 - Software Platform
• Combination of Multiple Tools
• Emme-4 API + Python
• Python 2.7 64-bit
– Needed for memory requirements (min 20 Gb)
• Numpy
– Efficient matrix operations library
• Cpython
– Python library written in C (faster)
– For some special methods (sorting)
• Run from DOS Batch file
STM-3 Model Structure
Input Data
Emme-4
Create Skims
Emme-4 API
Estimate
Travel Frequency
Python
Mode-Destination
Choice
Python
Final Car/PT
assignments
Emme-4 API
Create new CAR
LOS Skims
Emme-4 API
STM3 Model Processes in Python
• Tour Frequency & Mode-Destination Choice
– 7 HB + 2 NHB trip purposes – separate models
– 6 purposes include car access to rail
– Models are similar but many differences
• OOP structure
– Shared code in base classes
– Differences in derived classes
CarSkims Hierarchy
cCarTollSkims_ZZ
cCarSkims_ZZ
Basic properties
abstract class
not for use
common methods
for all sub-classes
cHWcarTollSkims_ZZ
cCarNoTollSkims_ZZ
cHWcarNoTollSkims_ZZ
cCarAccSkims_ZS
cHWcarAccSkims_ZS
Input Matrices
abstract class
not for use
Different by Purpose
Specific properties
daily averages
Matrices in Emme vs Python
Emme: Full matrix




Travel Zones
Station Zones
External Zones
Python:





TZ to TZ
External Zones

TZ to
Stn
External Zones
ZZ: TZ to TZ
Stn to TZ
ZS: TZ to SZ
SZ: SZ to TZ
Freq/Mode-Dest. Models: ZZ
Station choice: ZS + SZ
Stn to
Stn
Car Access to Rail: Station Choice
Station Choice
• For each OD-pair
– Calculate utility (car + rail) through each station
– Select N (2-5) “best” stations
• By OD-pair (7.3 million)
• Select from 450 stations
• Run time
–
–
–
–
If done by single OD-pair:
3D matrix calc: from 1 O to all D:
3D + Cpython partsort method:
( ALOGIT: ~ 3 days )
~ 9 hours
~ 3 hours
~ 20 min
Calculate Car Access to Rail utility
zones
Gen.time from O to D =
zones

Car time from O to S
+ Rail time from S to D

Must be ZZ-matrix
zones
+
zones
Rail time
=
zones
Car
time
stations
stations
zones
Selected
Station
Gen. time
Calculate Utility – the easy way
D

For each OD-pair:



O
get S from stations matrix
Gt(OD) = Ct(OS) + Rt(SZ)
7.3 million OD-pairs!
zones
zones
S
Selected
Station
D
S
+
S
zones
O
Rt
Rail time
=
zones
Car
time
zones
D
Ct
stations
O
zones
stations
Gt
Gen. time
Calculate Utility – a faster way
Process




stations
Get rail times from S to All-D

re-shape vector to 2D (ZZ)

Add the two matrices = Gt

Repeat for each station S
Max 450 iterations!
Masking, re-shape are
standard methods in Numpy
This process is applied at
several places
CarCt
time
stations

Get car times from All-O to S

re-shape vector to 2D (ZZ)
zones

Select all OD-pairs that use S
(mask)
S
+
S
Selected
S
Stations
S
S
S
S
Rt
Rail time
zones
Rt
Rt
Rt
Ct
Ct
CtRt Ct
Rt
Rt
Rt
Ct Ct
=
zones

zones
zones

Gt
Gt
Gt
Gen.
Gt
Gt
Time
Gt
Current Status
• STM3 model coded and tested
• Validation:
– ALOGIT vs Emme/Python – finished
– Comparison with Observed (HTS) data
• Key issues for further improvement
– Run time
– Use for PT Project Model (PTPM)
Model Run Time
• STM2:
– ~ 19 hours (macros, without car access to rail!)
• STM3:
– Full Model (4-cycles): ~ 17 hours
– One-cycle: ~ 7 hours
• New zoning system TZ11: +400 zones
– Further increase in run time
• How to reduce?
– Multi-threading?
STM-3 Current Model Structure
Input Data
Hb-Work
NHb-Work
Hb-Business
Create CAR
LOS Skims
NH-Business
Hb-PrimEd
Hb-SecEd
Hb-TerEd
Hb-Shop
Collate new
CAR Demand
Hb-Other
Final Car/PT
assignments
STM-3 Parallel Model Structure
Input Data
Hb-Work
Create CAR LOS
Skims
Hb-Business
Hb-PrimEd
Hb-Shop
Hb-SecEd
NHb-Work
NH-Business
Hb-TerEd
Collate new
CAR Demand
Final Car/PT
assignments
Hb-Other
Summary
• STM3 Implemented
• Emme 4 API: major benefits
– Easy, user-friendly, powerful methods
– Easy to combine with external code
– New methods faster than macros
• Python, NumPy: major benefits
– User-friendly, powerful, fast methods
• Run time less than for STM2 but still very long
• Next challenges
– Improve run time
– Implement Peak Spreading