{ "cells": [ { "cell_type": "markdown", "id": "857f498a", "metadata": {}, "source": [ "# `pm-td` — Peeta & Mahmassani's (1995) time-dependent UE and SO\n", "\n", "**What.** `pm-td` is the methodology paper of simulation-based dynamic traffic\n", "assignment: time-dependent, EXPERIENCED-time system-optimal AND user-\n", "equilibrium route choice, solved by method-of-successive-averages (MSA)\n", "iterations around the repo's own CTM/LTM loading (playing the role of the\n", "paper's mesoscopic simulator). One machinery, two objectives — TD-UE assigns\n", "to least EXPERIENCED time, TD-SO to least time-dependent MARGINAL time — this\n", "notebook covers both (`pm-td-ue` and `pm-td-so`).\n", "\n", "**Why it is in the benchmark.** It is the first ITERATIVE, simulation-based\n", "time-dependent route equilibrium: multi-origin/multi-destination, path-based,\n", "FIFO-enforced by the loader, with no closed form. Its headline result — the\n", "system optimum strictly beats user equilibrium's total travel time — is made\n", "executable here. See the [model compendium](../../docs/MODELS.md)\n", "(Peeta & Mahmassani 1995) and\n", "[docs/design/adr-031-peeta-mahmassani.md](../../docs/design/adr-031-peeta-mahmassani.md) (P1).\n", "\n", "**Scope.** This notebook solves TD-UE on a symmetric two-route diamond (an\n", "exact 50/50 anchor) and both TD-UE/TD-SO on an SO != UE wedge, certifying\n", "every result. The MSA solvers are explicitly NON-certified research code —\n", "the certifier is the arbiter, never the solver's own claim.\n", "\n", "**Canon.** `[peeta1995system]`, [docs/REFERENCES.md](../../docs/REFERENCES.md) / [docs/references.bib](../../docs/references.bib)." ] }, { "cell_type": "markdown", "id": "a9e02602", "metadata": {}, "source": [ "## How this notebook is graded\n", "\n", "**A notebook never claims a number it does not compute in that cell.** Every\n", "scored quantity below is recomputed live by the P1 `TDTAEvaluator` from the\n", "emitted per-path departure plan alone — the harness reruns its OWN per-path\n", "loading and recomputes the experienced-time route-swap residual (`tdue_gap`)\n", "and the LP-bound gap (`so_bound_gap`) against a freshly-solved `lp-so-dta`-\n", "style optimum, never trusting the MSA solver's self-reported iterate\n", "([README](../../README.md), *Certified, not self-reported*)." ] }, { "cell_type": "code", "execution_count": 1, "id": "d6bef04a", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:49:03.222806Z", "iopub.status.busy": "2026-07-21T13:49:03.222220Z", "iopub.status.idle": "2026-07-21T13:49:05.275642Z", "shell.execute_reply": "2026-07-21T13:49:05.274932Z" } }, "outputs": [], "source": [ "# Setup. `pm-td` is a core model: a plain `pip install -e .` suffices — no\n", "# optional extra, so no guard cell. The inline backend is Agg-based (headless\n", "# CI renders into the notebook); NEVER matplotlib.use(\"Agg\") in-kernel — it\n", "# silently suppresses inline figure capture.\n", "%matplotlib inline\n", "import numpy as np\n", "\n", "from tabench import (\n", " PathLoader,\n", " TDPathFlows,\n", " TDTAEvaluator,\n", " pm_diamond_scenario,\n", " pm_wedge_scenario,\n", " solve_td_so,\n", " solve_td_ue,\n", " viz,\n", ")" ] }, { "cell_type": "markdown", "id": "6666158b", "metadata": {}, "source": [ "## `pm-td-ue`: an exact 50/50 anchor\n", "\n", "The symmetric two-route diamond: origin 1 to destination 2 by two\n", "byte-identical routes (fast feeder + `Q=1` bottleneck each). By symmetry the\n", "exact TD-UE is the 50/50 split every interval; an all-on-one control queues\n", "one bottleneck while its twin sits idle — a hand-computable positive gap.\n", "`TDTAScenario` is frozen and content-hashed (P2)." ] }, { "cell_type": "code", "execution_count": 2, "id": "ff89c8b2", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:49:05.278966Z", "iopub.status.busy": "2026-07-21T13:49:05.278731Z", "iopub.status.idle": "2026-07-21T13:49:05.283275Z", "shell.execute_reply": "2026-07-21T13:49:05.282774Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "scenario : pm-diamond-ctm\n", "content hash : 1ed2c58061543b1b…\n", "paths : [(0, 1), (2, 3)]\n", "grid : dt=1.0, n_steps=16\n", "task : time-dependent user equilibrium, experienced travel time\n" ] } ], "source": [ "diamond = pm_diamond_scenario()\n", "print(f\"scenario : {diamond.name}\")\n", "print(f\"content hash : {diamond.content_hash()[:16]}…\")\n", "print(f\"paths : {[p.links for p in diamond.paths]}\")\n", "print(f\"grid : dt={diamond.grid.dt}, n_steps={diamond.grid.n_steps}\")\n", "print(\"task : time-dependent user equilibrium, experienced travel time\")" ] }, { "cell_type": "code", "execution_count": 3, "id": "e63276b5", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:49:05.285364Z", "iopub.status.busy": "2026-07-21T13:49:05.285094Z", "iopub.status.idle": "2026-07-21T13:49:15.990756Z", "shell.execute_reply": "2026-07-21T13:49:15.988371Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "feasible : 1\n", "tdue_gap : 0.000e+00\n", "tstt : 14.000\n", "departures per path : [2. 2.]\n", "all-on-one control tdue_gap : 0.7500\n" ] } ], "source": [ "ue_flows = solve_td_ue(diamond, iters=40)\n", "evaluator = TDTAEvaluator(diamond)\n", "metrics = evaluator.certify(ue_flows)\n", "print(f\"feasible : {metrics['feasible']:.0f}\")\n", "print(f\"tdue_gap : {metrics['tdue_gap']:.3e}\")\n", "print(f\"tstt : {metrics['tstt']:.3f}\")\n", "assert metrics[\"feasible\"] == 1.0\n", "assert metrics[\"tdue_gap\"] < 1e-6\n", "assert np.isclose(metrics[\"tstt\"], 14.0, atol=1e-2)\n", "\n", "# The 50/50 split, recomputed from the emitted departures directly.\n", "per_path = ue_flows.departures.sum(axis=1)\n", "print(f\"departures per path : {per_path}\")\n", "np.testing.assert_allclose(per_path, [2.0, 2.0], atol=1e-6)\n", "\n", "# DISTINCTIVE: an all-on-one control certifies a hand-computable POSITIVE gap\n", "# (0.75) -- built here from the SAME total demand, forced onto path 0 alone.\n", "all_on_one = np.zeros_like(ue_flows.departures)\n", "all_on_one[0] = ue_flows.departures.sum(axis=0)\n", "gap_all_on_one = evaluator.certify(TDPathFlows(diamond.content_hash(), all_on_one))[\"tdue_gap\"]\n", "print(f\"all-on-one control tdue_gap : {gap_all_on_one:.4f}\")\n", "assert np.isclose(gap_all_on_one, 0.75, atol=1e-3)" ] }, { "cell_type": "markdown", "id": "293c008c", "metadata": {}, "source": [ "## `pm-td-ue` vs `pm-td-so`: SO strictly beats UE (the paper's headline)\n", "\n", "The wedge: a FAST but capacitated route (`Q=1` bottleneck) versus a SLOWER\n", "uncongested route. Selfish UE overloads the fast route until its queue delay\n", "matches the slow route's extra free-flow time; the system optimum diverts more\n", "traffic to the slow route earlier, cutting total queueing." ] }, { "cell_type": "code", "execution_count": 4, "id": "f9f9a35d", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:49:15.996070Z", "iopub.status.busy": "2026-07-21T13:49:15.995762Z", "iopub.status.idle": "2026-07-21T13:49:37.509304Z", "shell.execute_reply": "2026-07-21T13:49:37.508055Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "scenario : pm-wedge\n", "content hash : 2fa30ab1fb705308…\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "UE: tdue_gap=0.0909 tstt=24.000\n", "SO: so_bound_gap=0.000e+00 tstt=23.000\n", "SO/UE TSTT ratio : 0.9583 (SO strictly lower)\n" ] } ], "source": [ "wedge = pm_wedge_scenario()\n", "print(f\"scenario : {wedge.name}\")\n", "print(f\"content hash : {wedge.content_hash()[:16]}…\")\n", "\n", "ue_wedge = solve_td_ue(wedge, iters=40)\n", "so_wedge = solve_td_so(wedge, iters=40)\n", "ev_wedge = TDTAEvaluator(wedge)\n", "m_ue = ev_wedge.certify(ue_wedge)\n", "m_so = ev_wedge.certify(so_wedge)\n", "print(f\"UE: tdue_gap={m_ue['tdue_gap']:.4f} tstt={m_ue['tstt']:.3f}\")\n", "print(f\"SO: so_bound_gap={m_so['so_bound_gap']:.3e} tstt={m_so['tstt']:.3f}\")\n", "assert m_ue[\"feasible\"] == 1.0 and m_so[\"feasible\"] == 1.0\n", "# MSA is non-certified research code -- the UE's own residual is disclosed,\n", "# not asserted to zero (the certifier, not the solver, is the arbiter).\n", "assert m_ue[\"tdue_gap\"] < 0.15\n", "assert np.isclose(m_ue[\"tstt\"], 24.0, atol=1e-2)\n", "# SO attains its LP-relaxation bound essentially exactly.\n", "assert m_so[\"so_bound_gap\"] < 1e-6\n", "assert np.isclose(m_so[\"tstt\"], 23.0, atol=1e-2)\n", "# The headline: SO is strictly below UE, recomputed as a plain comparison of\n", "# the two independently certified totals.\n", "assert m_so[\"tstt\"] < m_ue[\"tstt\"]\n", "print(f\"SO/UE TSTT ratio : {m_so['tstt'] / m_ue['tstt']:.4f} (SO strictly lower)\")" ] }, { "cell_type": "markdown", "id": "9351c261", "metadata": {}, "source": [ "## Visualize\n", "\n", "Both figures come from `tabench.viz` — `pm-td` scenarios use the road\n", "`Network` (unlike `transit-strategy`'s separate `TransitNetwork`), so the\n", "house visualizer applies directly. The plotted flow is each link's TIME-\n", "AVERAGED throughput, recomputed here by re-running `PathLoader` on the emitted\n", "departure plan (the same loading the certifier itself performs)." ] }, { "cell_type": "code", "execution_count": 5, "id": "f84e483c", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:49:37.513611Z", "iopub.status.busy": "2026-07-21T13:49:37.513320Z", "iopub.status.idle": "2026-07-21T13:49:37.812287Z", "shell.execute_reply": "2026-07-21T13:49:37.811155Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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zpEjR9GjRw+3n9dVa9euwdq1a/Dyy680+xjJycmoqqpCYWGh/b68vHwkJycDAGQyGTIyBmDdunUoLS3F5ZdfjkGDBmHnzp349tu9yMrKavHrIGKgEjXi1lsnYeXKN3DgwAEIIZCfn4+lS5/DpEkTm33MG24YaZ+3A4AffvgR+/btQ01NDdRqNTQajf0C4nffPQOvvPIKfvppP4QQMBqN2LnzK5w5c8bt592yZQt+++032Gw2REVFQS6Xu3Wh8t27d2PkyBFuP6+rLrvsMnz++ed488038dJL/2zWMZKTk5GVlYUnnngClZWVOHXqFF566SVMmTLFvk9WVhaWL1+BgQMHAqgdIVi16gOoVCqvrJCm0MNAJWrE1KlTcd999+Huu2ciNTUNo0aNRkZGBv7617867Fe36rT+z4EDBxo95vDhw1FcXIxff/0VAGAwGPDwww8jPb0DOnfugvPnz+O5554DANxwww146qmnMG/ePFx22WW46qqrsXz5a7DZbG6/lhMnTmDChJuRktIOffv2Q9++fTF9umsnX/j2228RFRWJjIwMt5/XHWlpadi06XO89957+Mc//tGsY7z55kqYTFXo3r0HRowYieHDh+OBB+63b8/KykJ5ebl9eLdr164ICwtj75Q8RmKxmIWviyAKFWvXrsVnn32Ot9/+j69Lccn48RNw3333YejQ63xdCpHfY6ASERF5AId8iYiIPICBSkRE5AEMVCIiIg9goBIREXkAA5WIiMgDGKhEREQewEAlIiLyAAYqERGRBzBQiYiIPICBSkRE5AH/D7t99JPXjpvpAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "T = float(wedge.grid.edges[-1])\n", "ue_out = PathLoader(wedge, ue_wedge.departures).run()\n", "so_out = PathLoader(wedge, so_wedge.departures).run()\n", "ue_avg = ue_out.n_out[:, -1] / T\n", "so_avg = so_out.n_out[:, -1] / T\n", "\n", "display(viz.plot_network_flows(wedge.network, ue_avg))\n", "display(viz.plot_flow_scatter((\"UE (selfish)\", ue_avg), {\"SO (system optimum)\": so_avg}))" ] }, { "cell_type": "markdown", "id": "bd7c5649", "metadata": {}, "source": [ "## Takeaways & pointers\n", "\n", "- **Certified, not self-reported.** Every gap and TSTT above came from\n", " `TDTAEvaluator`'s own re-loading and re-scoring — the MSA solver's best-\n", " iterate claim was only diffed against it.\n", "- **The MSA solvers are honestly non-certified.** UE's wedge residual\n", " (`tdue_gap ~ 0.09`) is disclosed, not hidden — a simulation-based MSA has no\n", " convergence guarantee (the paper says so); the certifier reports the best\n", " iterate, never a convergence claim.\n", "- **Where next.** the exit-function / LP twins\n", " [`merchant-nemhauser`](../07-dta/01-merchant-nemhauser.ipynb) ·\n", " [`lp-so-dta`](../07-dta/02-lp-so-dta.ipynb) (the SO bound `so_bound_gap`\n", " scores against); the CTM/LTM loading underneath\n", " [`ctm`](../05-dnl/01-ctm.ipynb); the lineage in the\n", " [model compendium](../../docs/MODELS.md)." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" }, "tabench": { "covers": [], "requires_extra": null, "track": "tdta", "unit": "pm-td" } }, "nbformat": 4, "nbformat_minor": 5 }