Contents Menu Expand Light mode Dark mode Auto light/dark, in light mode Auto light/dark, in dark mode Skip to content
TABenchmark
TABenchmark

Overview

  • TABenchmark
  • TABenchmark Architecture
  • The TABenchmark Model Compendium
  • Numerical Validation
  • Implementation Roadmap
  • The TABenchmark Reference Canon
  • Contributing to TABenchmark

Tutorials

  • TABenchmark tutorials
  • aon — All-or-nothing assignment on the Braess network
  • msa — Method of successive averages (MSA) on the Braess network
  • fw — Frank–Wolfe (LeBlanc et al. 1975) on the Braess network
  • cfw — Conjugate Frank–Wolfe (Mitradjieva & Lindberg 2013) on the Braess network
  • bfw — Bi-conjugate Frank–Wolfe on the Braess network
  • gp — Gradient projection (Jayakrishnan et al. 1994) on the Braess network
  • oba — Origin-based assignment (Bar-Gera 2002) on the Braess network
  • algb — Algorithm B (Dial 2006) on the Braess network
  • tapas — TAPAS — traffic assignment by paired alternative segments (Bar-Gera 2010) on the Braess network
  • sue-msa — Logit stochastic user equilibrium by MSA on the two-route network
  • sue-probit-msa — Probit SUE by MSA, certified by pinned Monte Carlo
  • so-bfw — System optimum by bi-conjugate Frank–Wolfe on the Braess network
  • fw-elastic — Elastic-demand user equilibrium (Florian & Nguyen 1974)
  • evans — Combined trip distribution + assignment (Evans 1976)
  • br-ue — Boundedly-rational user equilibrium (Mahmassani & Chang 1987)
  • sc-tap — Side-constrained (capacitated) user equilibrium (Larsson & Patriksson 1995)
  • vi-asym — Asymmetric variational-inequality UE (Dafermos 1980 / Smith 1979)
  • multiclass — Multiclass-user equilibrium (Dafermos 1972)
  • learned-surrogate — A learned UE surrogate, and how the harness CENSORS it
  • dtd-swap — Smith’s (1984) route-swap day-to-day dynamics
  • dtd-swap-sue — Smith & Watling’s (2016) route-swap SUE dynamics
  • dtd-link — He, Guo & Liu’s (2010) link-based day-to-day dynamics
  • dtd-friesz — Friesz et al.’s (1994) route-based projected dynamical system
  • dtd-horowitz — Horowitz’s (1984) cost-smoothing SUE dynamics
  • dtd-stochastic — Cascetta’s (1989) stochastic-process day-to-day model
  • dtd-unifying — Cantarella & Cascetta’s (1995) unifying day-to-day process
  • dtd-cumlog — Li, Wang & Nie’s (2024) cumulative-logit day-to-day dynamics
  • gls — Generalized Least Squares OD estimation (covers prior)
  • spiess — Spiess’s (1990) count-misfit-only OD estimation
  • vzw-entropy — Van Zuylen & Willumsen’s (1980) entropy-balancing OD estimation
  • od-congested — Yang, Sasaki, Iida & Asakura’s (1992) bilevel OD estimation
  • spsa — Spall’s (1992) simultaneous perturbation stochastic approximation
  • od-kalman — Davis & Nihan’s (1993) linear-Gaussian OD estimation
  • od-dynamic — Cascetta, Inaudi & Marquis’s (1993) within-day dynamic OD estimation
  • bo4mob-estimation — BO4Mob held-out-count OD estimation (D2 observational)
  • odme-dtalite — DTALite’s static ODME as one more guarded T2 estimator (Zhou & Taylor 2014)
  • transit-strategy — Spiess & Florian’s (1989) optimal strategies
  • ctm — Daganzo’s (1994, 1995) Cell Transmission Model
  • ltm — Yperman’s (2007) Link Transmission Model
  • godunov — Lebacque’s (1996) Godunov scheme + the Greenshields FD
  • node-model — Tampere et al.’s (2011) generic first-order node model
  • vickrey — Vickrey’s (1969) single-bottleneck departure-time equilibrium
  • vi-due — Friesz et al.’s (1993) variational-inequality dynamic user equilibrium
  • merchant-nemhauser — Merchant & Nemhauser’s (1978) exit-function SO-DTA
  • lp-so-dta — Ziliaskopoulos’s (2000) LP single-destination SO-DTA on CTM cells
  • pm-td — Peeta & Mahmassani’s (1995) time-dependent UE and SO
  • newell-3det — Newell’s (1993) interior kinematic-wave reconstruction
  • implicit-ue-nn — user equilibrium as an implicit layer (act two)
  • het-gnn — heterogeneous-GNN traffic assignment (act three)
  • sumo-marouter — SUMO’s macroscopic assignment as an external-simulator adapter
  • sumo-duaiterate — the first external-dynamic (EDOC-1) row
  • dtalite-tap — DTALite’s static Frank-Wolfe, an IDENTITY compile map
  • spsa-sumo — SPSA calibration against a production simulator (Balakrishna 2007)
  • matsim — the first agent-based, stochastic-track EDOC row
  • dtalite-simulation — the third EDOC row, the first DETERMINISTIC-track external engine
  • xu2024 — the 20-US-city cross-domain axis (Honolulu / San Francisco)
  • bo4mob — the BO4Mob San Jose freeway instances (stage 1: data + liveness)
  • profiles — SimOpt-style progress curves and solvability profiles

API reference

  • API reference
    • tabench.core
    • tabench.models
    • tabench.metrics
    • tabench.estimation
    • tabench.edoc

Design records (ADRs)

  • ADR-001 — Logit SUE: Dial’s STOCH loading, MSA-SUE, and the fixed-point certificate
  • ADR-002 — T2 estimation track: OD demand from link counts, and the pinned-assignment certificate
  • ADR-003 — Probit SUE: Monte Carlo fixed-point certificate with a pinned evaluation stream
  • ADR-004 — Route-flow proportionality: a diagnostic now, a scored certificate proposed
  • ADR-005 — Elastic (variable) demand: a new problem class with a P1-pure certificate
  • ADR-006 — Learned (black-box) models: certified by P1, gated by lineage
  • ADR-007 — Combined trip distribution + assignment (Evans 1976): a P1-pure certificate
  • ADR-008 — Boundedly-rational user equilibrium: a band-relaxed UE with a necessary link-flow certificate
  • ADR-009 — Side-constrained UE: hard link capacities with a link-visible feasibility certificate
  • ADR-010: dnl-core — generic supply/demand dynamic-network-loading foundation
  • ADR-011: vi-asym — asymmetric variational-inequality UE (non-separable costs)
  • ADR-012: od-kalman — Davis & Nihan (1993) linear-Gaussian OD estimation from a time series of link counts
  • ADR-013: multiclass — Dafermos (1972) multiclass-user equilibrium
  • ADR-014: transit-strategy — Spiess & Florian (1989) optimal-strategy transit assignment
  • ADR-015: ctm — Daganzo (1994/1995) cell transmission model link
  • ADR-016: ltm — Yperman (2007) link transmission model
  • ADR-017: node-model — Tampère et al. (2011) generic first-order node model
  • ADR-018: godunov — Lebacque (1996) Godunov scheme + the first non-triangular FD
  • ADR-019: vickrey — Vickrey (1969) single-bottleneck departure-time equilibrium
  • ADR-020: merchant-nemhauser — Merchant & Nemhauser (1978) exit-function SO-DTA
  • ADR-021: lp-so-dta — Ziliaskopoulos (2000) LP single-destination SO-DTA on CTM cells
  • ADR-022: vi-due — Friesz et al. (1993) VI dynamic user equilibrium
  • ADR-023: od-dynamic — Cascetta, Inaudi & Marquis (1993) within-day dynamic OD estimation
  • ADR-024: newell-3det — Newell (1993) three-detector interior reconstruction
  • ADR-025 — Implicit-NN user equilibrium: the first torch model, feasibility as architecture
  • ADR-026 — Heterogeneous-GNN traffic assignment: the third learned model, feasibility as a decode
  • ADR-027 — SUMO marouter: the first external-simulator adapter, and the simulator-to-benchmark model gap
  • ADR-028 — spsa-sumo: SPSA calibration against a production simulator, as one more estimator row
  • ADR-029 — DTALite assignment(): the second external engine, and the identity-map static-UE row
  • ADR-030 — MATSim / DynaMIT / DYNASMART adapters: measured deferral, and the ADR that unblocks them
  • ADR-031: pm-td-ue / pm-td-so — Peeta & Mahmassani (1995) time-dependent SO/UE
  • ADR-032: simopt-profiles — SimOpt-style progress curves and solvability profiles
  • ADR-033: xu2024-dataset — the Xu et al. (2024) 20-US-city cross-domain axis
  • ADR-034: bo4mob-scenarios — the BO4Mob San Jose freeway OD-estimation instances (stage 1)
  • ADR-035: tutorials-visualizer — the house visualizer and the per-unit tutorial notebooks
  • ADR-036: edoc-1 — the external-dynamic-engine observational certificate
  • ADR-037 — sumo-duaiterate: the first EDOC-1 row, and the shipped external-dynamic substrate
  • ADR-038 — Cumulative-logit day-to-day dynamics: boundedly-rational logit choice with an exact-Wardrop-UE limit
  • ADR-039 — matsim: the second EDOC-1 row, the first agent-based / first stochastic-track external engine
  • ADR-040 — dtalite-simulation: the third EDOC-1 row, the first deterministic-track external engine, closing the adr-029 honest-sourcing loop
  • ADR-041 — bo4mob-estimation: the BO4Mob held-out-count OD-estimation family (stage 2), a D2 observational T2 certificate
  • ADR-042 — odme-dtalite: DTALite’s static ODME as one more guarded T2 estimator row
  • ADR-043 — bo4mob-joint-estimation: the joint (demand, supply) estimand is under-identified from counts+speeds — a measured deferral
  • TABenchmark Angle A: A Scenario × Model Cross-Evaluation Matrix with SimOpt-Style Experiment Machinery
  • TABenchmark — Angle A: The Scenario × Model Matrix
  • TABenchmark: An Observability-First Benchmark for 50 Years of Traffic Assignment Models
  • TABenchmark — Angle B: Observability-First Design
  • TABenchmark Design Proposal — Contract/Plugin-First Extensibility (Angle C)
  • TABenchmark: Contract-First Design Proposal (Angle C)
Back to top
View this page

ADR-012: od-kalman — Davis & Nihan (1993) linear-Gaussian OD estimation from a time series of link counts¶

Status: accepted (implemented) Date: 2026-07-08 Deciders: T2 estimation track — adding a time-series / covariance-aware baseline File: docs/design/adr-012-dn-kalman.md

Context¶

The six shipped T2 estimators (prior, vzw-entropy, gls, spiess, spsa, od-congested) all collapse the observed link-count series to a single mean vector (counts.mean(axis=0)) and fit that. They discard the two things Davis & Nihan (1993, Operations Research 41(1):169-178, davis1993large) show carry demand information: the cross-link covariance of the counts and their day-to-day autocorrelation.

Davis & Nihan prove that as the traveler population grows, a general stochastic assignment process converges to a deterministic mean (the SUE/UE loading, Prop 2) plus a stationary linear-Gaussian VAR(1)/VARMA(1,1) fluctuation whose covariance is their eq. (8) (Prop 3). Their stated application (§4) is exactly an estimator: the VAR process “admits a state-space description, which can then be combined with the discrete-time Kalman filter to produce an algorithm for computing the likelihood function of a time-series of observed link volume counts […] permits estimation of the underlying travel demands via prediction-error minimization.”

A DN estimator cannot be built on the existing observation level. LinkCounts emits IID per-link Poisson counts (diagonal covariance) or exact repeats — no cross-link and no temporal correlation. A DN estimator whitening a diagonal covariance is gls (a rename the repo forbids; cf. the od-congested “not-a-gls-rename” tests). The DN covariance only bites when the counts carry the multinomial route structure and day-to-day persistence.

Decision¶

  1. New observation level DayToDayCounts (observe/levels.py, ADR-012) generating a benchmark realization of the DN Gaussian limit as a stationary VAR(1): x(t) = x_UE + e(t), e(t) = rho·e(t-1) + a(t), a(t) ~ N(0, (1-rho^2) Q), so e(t) has stationary covariance Q and the series is centered on the UE loading x_UE = P g. Q is the route-exact DN multinomial covariance Q = sum_j (g_j^2/N_j) Delta_j^T (diag p_j - p_j p_j^T) Delta_j (observe/_dn_process.py), extracted from the equilibrium MSA/AON route sets so its link marginal equals the proportion column and the mean is exactly x_UE. N_j = max(1, round(population_scale·g_j)); the fluctuation vanishes as 1/population_scale (Prop 2 SLLN) and reduces to noise='none' in the limit. rho in [0,1) is the day-to-day persistence dial; rho=0 gives IID (cross-link-correlated only) counts.

  2. UE-centering (the load-bearing modeling choice). The DN VARMA temporal structure is a logit/SUE phenomenon (the smooth q_j(g) feedback), but the T2 certifier pins deterministic UE (bfw) and the runner rejects SUE instances. Centering the VAR(1) on the UE loading with the DN innovation covariance keeps the pinned-UE certificate valid with no SUE-certifier infra, while preserving the two DN signals the estimator needs (spatial Q off-diagonals + temporal rho). It is honestly a linearized Model-B process around UE (Prop 3 form), not a re-simulation of the full logit adjustment.

  3. Estimator od-kalman (estimation/dn_kalman.py, DavisNihanKalmanEstimator, paradigm estimation). For a static OD observed through a stationary Gaussian process the prediction-error / Kalman estimate is the GLS whitened by the covariance of the count time-mean — the steady-state Kalman gain for a constant state reduces to this batch BLUE. Two non-classical ingredients (dn_gls_solve):

    • spatial: whiten by the full (non-diagonal) sample covariance of the series, not gls’s diagonal Poisson V;

    • temporal: inflate the count-mean covariance by the AR(1) integrated autocorrelation tau = (1+rho_hat)/(1-rho_hat) (ar1_tau) — the effective-sample-size correction; T correlated observations carry the information of T/tau independent ones. tau=1 recovers the naive mean. The solve runs the same congested outer fixed point as gls/od-congested (Cascetta & Postorino 2001) with the best-self-obs-RMSE safeguard (ADR-002 Decision 3).

  4. Certificate (P1) unchanged. The harness recomputes od_feasible, od_rmse, obs_count_rmse from the emitted OD matrix through the pinned bfw assignment (metrics.estimation); self_report is provenance only. No new scored key, no scenario-field or FlowState/Trace/Evaluator change — the golden Braess content hash cf00f411… is byte-identical (re-asserted in tests/test_dn_kalman.py).

  5. Analytic anchors (tests/test_dn_kalman.py, all recomputed):

    • two-route DN covariance closed form Var(link 0) = (D^2/N) p_A p_B, with same-route + and cross-route − correlation (exact on link-disjoint routes);

    • single-sensor dn_gls closed form g* = (g_pr/w^2 + p·c/s^2)/(1/w^2 + p^2/s^2);

    • tau recovers (1+rho)/(1-rho) on a DN series and =1 when rho=0;

    • recovery of the planted D under full sensors at the finite-population floor.

Alternatives considered¶

  • Ship on the existing IID Poisson counts (no new observation level): rejected — the DN covariance is then diagonal and the estimator degenerates to gls; it would be a rename.

  • Full VARMA(1,1) marginal + a real logit/SUE adjustment process: rejected for now — its mean is the SUE, which needs an SUE certifier (the runner rejects SUE T2 instances). The VAR(1)-around-UE slice is the minimal faithful realization that keeps the pinned-UE certificate; it also makes the pure-AR(1) form correct (no MA term to identify), sidestepping the VARMA MA-cancellation subtlety (p.175) — the tau=(1+rho)/(1-rho) constant is the asymptotic integrated autocorrelation, applied as sigma_stat·tau/T (a conservative finite-T effective-sample-size approximation). A full VARMA(1,1) + SUE-certified variant is a separately-scoped follow-up.

  • A sequential Kalman-filter recursion over the periods: the batch DN-whitened GLS is the steady-state Kalman/BLUE for a static OD state and returns the same estimate; a sequential filter is more code for an identical result, so the established outer-loop/GLS machinery is reused.

Consequences¶

The benchmark gains its first time-series / covariance-aware OD estimator: one that exploits the cross-link and day-to-day structure of the counts rather than their mean alone, with a sound, harness-recomputed certificate and hand-derived anchors. All changes are additive; the golden Braess hash is provably preserved; no output contract changed. Follow-ups: the full VARMA(1,1) + SUE-certified variant, and reporting the DN posterior covariance of the estimate (not just the point OD).

Sourcing¶

Davis & Nihan (1993, Operations Research 41(1):169-178, davis1993large, JSTOR stable/171951) is the primary and was read (the eq. (8) covariance recursion, the VAR(1) logit form on p.175, the Prop 2 SUE mean, and the §4 Kalman / prediction-error program). The route-level innovation covariance sum_j n_j [diag q_j - q_j q_j^T] is COV[x|s] on p.171, written route-exactly; it was cross-checked against an independent open implementation of the same eq. (8) covariance. No number from the paper is reproduced — every anchor is a hand-derived closed form.

Next
ADR-013: multiclass — Dafermos (1972) multiclass-user equilibrium
Previous
ADR-011: vi-asym — asymmetric variational-inequality UE (non-separable costs)
Copyright © 2026, UMN Choi Lab
Made with Sphinx and @pradyunsg's Furo
On this page
  • ADR-012: od-kalman — Davis & Nihan (1993) linear-Gaussian OD estimation from a time series of link counts
    • Context
    • Decision
    • Alternatives considered
    • Consequences
    • Sourcing