EMME/4: Four-Step Travel Demand Modeling and Multimodal Assignment for Regional Transportation Planning
Travel demand modeling at the regional scale requires tools that can handle millions of origin-destination pairs, complex multimodal networks, and iterative equilibrium assignment—all within a reproducible, scriptable workflow. EMME/4 (developed by INRO) has been the platform of choice for metropolitan planning organizations (MPOs), national transport ministries, and consulting firms for over four decades. This article examines EMME/4's core modeling architecture, its Python-based scripting environment, and best practices for implementing a robust four-step travel demand model.
The Four-Step Model in EMME/4
EMME/4 implements the classical four-step travel demand model—trip generation, trip distribution, mode choice, and traffic/transit assignment—within a unified data environment called the EMME databank. Each step operates on a consistent network and zone system, eliminating the data-translation overhead common in multi-tool workflows.
1. Trip Generation
Trip generation in EMME/4 is typically handled through cross-classification or regression models applied to zone-level socioeconomic data (population, employment, auto ownership). Results are stored as origin and destination matrices in the databank. EMME/4 supports up to 9,999 zones and thousands of matrix slots, making it suitable for statewide models as well as sub-area studies.
2. Trip Distribution
The gravity model—or more advanced destination choice formulations—distributes generated trips across zone pairs. EMME/4's matrix_balancing tool implements doubly-constrained Furness (IPF) balancing, which is essential for ensuring row and column totals match observed trip ends. For advanced practitioners, the EMME Modeller scripting interface allows custom logit-based destination choice models to replace the gravity model entirely.
3. Mode Choice
Mode split is typically implemented as a nested logit model applied to the impedance matrices produced by preliminary network skims. EMME/4's skim matrix tools extract travel time, cost, and transfer penalty by mode, which feed directly into external mode choice processors or Python-based utility calculations. Results are split-mode demand matrices fed back into the assignment step.
4. Traffic and Transit Assignment
This is where EMME/4 excels. The platform offers:
- Frank-Wolfe and SOLA (Second-Order Linear Approximation) equilibrium assignment for road networks, with SOLA providing significantly faster convergence on large networks.
- Optimal Strategy transit assignment for frequency-based transit, and schedule-based assignment for timetabled services (rail, BRT).
- Combined (multimodal) assignment that simultaneously assigns auto and transit demand, capturing park-and-ride and kiss-and-ride interactions.
The Relative Gap convergence criterion—typically targeted at ≤ 0.0001—ensures that the assignment has reached a stable user equilibrium before results are extracted.
Python Scripting with EMME Modeller
EMME/4's most powerful feature for production modeling is its Python API, exposed through the EMME Modeller framework. Every tool in the GUI is callable as a Python function, enabling fully automated model runs:
import inro.modeller as m
modeller = m.Modeller()
assign_traffic = modeller.tool("inro.emme.traffic_assignment.sola_traffic_assignment")
spec = {
"type": "SOLA_TRAFFIC_ASSIGNMENT",
"classes": [{
"mode": "c",
"demand": "mf01",
"generalized_cost": {"link_costs": "@time", "perception_factor": 1.0},
"results": {"link_volumes": "@volau", "od_travel_times": {"shortest_paths": "mf10"}}
}],
"stopping_criteria": {"max_iterations": 100, "relative_gap": 0.0001}
}
assign_traffic(spec, scenario=modeller.scenario)
This scripting capability enables scenario batch processing—running dozens of land-use or network alternatives overnight—and integration with external tools such as ActivitySim, DaySim, or custom mode choice models written in R or Python.
Network Coding Best Practices
Network quality is the single largest determinant of model accuracy. Key EMME/4 network coding conventions include:
- Centroid connectors: Use multiple connectors per zone (typically 3–5) with realistic access speeds. Single connectors create artificial concentration of flows on adjacent links.
- Turn penalties and prohibitions: Code prohibited movements (e.g., no U-turns at freeway ramps) using EMME's turn table to prevent unrealistic routing.
- Extra attributes: Use
@-prefixed link, node, and transit line attributes to store lane counts, toll costs, signal delays, and other model-specific data without modifying the base network schema. - Segment-level transit times: For schedule-based assignment, code
#dwt(dwell time) and#ttf(travel time function) at the segment level to capture stop-specific delays accurately.

Validation and Calibration Workflow
A credible regional model requires systematic validation against observed counts and travel surveys:
- Select link analysis: EMME/4's select-link tool isolates the demand contributing to flows on specific screenlines, enabling direct comparison with traffic count data.
- Desire line plots: Matrix visualization tools display modeled vs. observed trip patterns by district, identifying distributional biases.
- GEH statistic: The GEH criterion (GEH < 5 for ≥ 85% of count locations) is the standard validation threshold for volume assignment; EMME/4's reporting tools can export link-level GEH values directly.
- Transit boardings: Segment-level boarding and alighting outputs are compared against automated passenger count (APC) data from transit agencies.

Integration with Land-Use and Activity-Based Models
Modern regional modeling practice increasingly couples EMME/4 with activity-based models (ABMs) such as ActivitySim or CT-RAMP. The typical integration loop:
- ABM generates person-trip matrices by mode and time period.
- Matrices are imported into EMME/4 via the Python API or CSV matrix import.
- EMME/4 performs multimodal assignment and exports skim matrices (time, cost, distance).
- Skims are fed back to the ABM for the next iteration.
This feedback loop—run for 3–5 iterations—produces internally consistent demand and supply equilibrium across the entire regional model system.
Licensing and Deployment
EMME/4 is available under node-locked and floating network licenses from INRO. The EMME Desktop provides the full GUI environment, while EMME Server enables headless batch execution on compute clusters. For organizations running large statewide models, EMME's parallel processing support (multi-threaded SOLA assignment) can reduce overnight model run times from hours to minutes.
Further Resources
- INRO EMME Official Documentation
- EMME Python API Reference
- Transportation Research Board: Travel Demand Forecasting Guidelines
- ActivitySim Consortium — open-source ABM for EMME integration
- FHWA Travel Model Improvement Program
EMME/4 remains the benchmark platform for regional four-step and activity-based travel demand modeling, combining decades of algorithmic refinement with a modern Python scripting environment. For MPOs and transportation agencies managing complex multimodal networks, mastering EMME/4's assignment algorithms, network coding conventions, and Python API is essential for producing defensible, policy-relevant forecasts.