{ "cells": [ { "cell_type": "markdown", "id": "0c8355c1", "metadata": {}, "source": [ "# `ltm` — Yperman's (2007) Link Transmission Model\n", "\n", "**What.** `ltm` is the Newell-Daganzo cumulative-curve loading method as a\n", "`LinkModel`: sending reads Newell's shifted UPSTREAM curve `L/vf` ahead (the\n", "point-queue look-ahead), and receiving adds a finite backward wave — storage\n", "freed by a downstream departure reappears at the upstream end `L/w` later. It is\n", "STATELESS beyond the base cumulative curves (no cells, `_advance_state` is a\n", "no-op): the whole link is evaluated by exact interpolation of piecewise-linear\n", "curves, not a grid of cell averages.\n", "\n", "**Why it is in the benchmark.** It is `ctm`'s cumulative-curve twin — same\n", "sending/receiving interface, same physics, but no CFL = 1 cell-alignment\n", "requirement, only a wave-resolved grid `dt <= min(L/vf, L/w)`. On any scenario\n", "where both are exact it must reproduce `ctm`'s boundary curves byte-for-byte;\n", "its concrete advantage is running on grids `CTMLink` rejects outright. See the\n", "[model compendium](../../docs/MODELS.md) (Yperman 2007) and\n", "[docs/design/adr-016-ltm.md](../../docs/design/adr-016-ltm.md) (P1).\n", "\n", "**Scope.** This notebook loads the same built-in\n", "`triangular_bottleneck_dynamic_scenario` as `ctm` through `LTMLink`, certifies\n", "it, and cross-checks the two models' cumulative curves. It also demonstrates\n", "LTM's grid flexibility on a link `CTMLink` cannot load at all.\n", "\n", "**Canon.** `[yperman2007link]`, [docs/REFERENCES.md](../../docs/REFERENCES.md) / [docs/references.bib](../../docs/references.bib)." ] }, { "cell_type": "markdown", "id": "1275a115", "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 `DNLEvaluator` from the\n", "cumulative link curves the loader emitted, in the cell where it is claimed. LTM\n", "has no self-report to diff — like `ctm`, `NetworkLoader.run()` is a\n", "deterministic, one-shot forward simulation\n", "([README](../../README.md), *Certified, not self-reported*)." ] }, { "cell_type": "code", "execution_count": 1, "id": "63376f64", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:48:25.889677Z", "iopub.status.busy": "2026-07-21T13:48:25.889521Z", "iopub.status.idle": "2026-07-21T13:48:27.915587Z", "shell.execute_reply": "2026-07-21T13:48:27.914592Z" } }, "outputs": [], "source": [ "# Setup. `ltm` is a core DNL link model: a plain `pip install -e .` suffices —\n", "# no 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", " CTMLink,\n", " DNLEvaluator,\n", " DynamicDemand,\n", " DynamicScenario,\n", " LinkDynamics,\n", " LTMLink,\n", " NetworkLoader,\n", " TimeGrid,\n", " triangular_bottleneck_dynamic_scenario,\n", " viz,\n", ")\n", "from tabench.core.scenario import Network" ] }, { "cell_type": "markdown", "id": "30c8b96c", "metadata": {}, "source": [ "## The scenario\n", "\n", "The same built-in `triangular_bottleneck_dynamic_scenario` `ctm` runs on\n", "(symmetric `vf = w = 1`, `kappa = 4`, capacities `[2, 0.5]`, arrival rate 1.5) —\n", "both link models exact on this instance, so it is the fair cross-check anchor." ] }, { "cell_type": "code", "execution_count": 2, "id": "bfc126e6", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:48:27.918390Z", "iopub.status.busy": "2026-07-21T13:48:27.918160Z", "iopub.status.idle": "2026-07-21T13:48:27.923912Z", "shell.execute_reply": "2026-07-21T13:48:27.923229Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "scenario : dnl-triangular-bottleneck\n", "content hash : d4148843c3292e42…\n", "links : 2 (tail→head: 1->3, 3->2)\n", "grid : dt=1.0, n_steps=12\n", "task : deterministic DNL loading (feasibility + conservation + shock)\n" ] } ], "source": [ "scenario = triangular_bottleneck_dynamic_scenario()\n", "net = scenario.network\n", "edges = scenario.grid.edges\n", "print(f\"scenario : {scenario.name}\")\n", "print(f\"content hash : {scenario.content_hash()[:16]}…\")\n", "print(f\"links : {net.n_links} (tail→head: \"\n", " + \", \".join(f\"{i}->{j}\" for i, j in zip(net.init_node, net.term_node)) + \")\")\n", "print(f\"grid : dt={scenario.grid.dt}, n_steps={scenario.grid.n_steps}\")\n", "print(\"task : deterministic DNL loading (feasibility + conservation + shock)\")" ] }, { "cell_type": "markdown", "id": "660806d6", "metadata": {}, "source": [ "## Load the network\n", "\n", "`LTMLink` needs only a finite jam density — no cell-alignment requirement — so\n", "the SAME `NetworkLoader` contract that ran `ctm` runs `ltm` unchanged." ] }, { "cell_type": "code", "execution_count": 3, "id": "e7a2c10b", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:48:27.926180Z", "iopub.status.busy": "2026-07-21T13:48:27.925911Z", "iopub.status.idle": "2026-07-21T13:48:27.931729Z", "shell.execute_reply": "2026-07-21T13:48:27.931017Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "link model : LTMLink\n", "emitted n_in[0] : [ 0. 6. 12. 18.] (every 4th edge)\n", "emitted n_out[0] : [0. 0. 2. 4.] (every 4th edge)\n", "storage at t=12 : 14.000\n" ] } ], "source": [ "out = NetworkLoader(scenario, LTMLink).run()\n", "print(f\"link model : {LTMLink.__name__}\")\n", "print(f\"emitted n_in[0] : {np.round(out.n_in[0, ::4], 3)} (every 4th edge)\")\n", "print(f\"emitted n_out[0] : {np.round(out.n_out[0, ::4], 3)} (every 4th edge)\")\n", "print(f\"storage at t={edges[-1]:.0f} : {out.n_in[0, -1] - out.n_out[0, -1]:.3f}\")" ] }, { "cell_type": "markdown", "id": "73d9ce02", "metadata": {}, "source": [ "## Certify (P1) — feasibility, conservation, and byte-exact agreement with `ctm`\n", "\n", "Both models are exact on this symmetric FD at CFL = 1, so LTM must reproduce\n", "CTM's cumulative curves to machine precision — this is the distinctive LTM\n", "result, recomputed here by actually RUNNING `ctm` again in this cell (not\n", "quoting `01-ctm`'s numbers) and diffing." ] }, { "cell_type": "code", "execution_count": 4, "id": "22feb41b", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:48:27.933844Z", "iopub.status.busy": "2026-07-21T13:48:27.933577Z", "iopub.status.idle": "2026-07-21T13:48:27.942070Z", "shell.execute_reply": "2026-07-21T13:48:27.941362Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dnl_feasible : 1\n", "conservation_residual : 0.000e+00\n", "storage_residual : 0.000e+00\n", "boundary curves match the recomputed RH-shock anchor exactly (atol=1e-9)\n", "ltm reproduces ctm's cumulative curves byte-for-byte (max diff 0.0)\n" ] } ], "source": [ "metrics = DNLEvaluator(scenario).evaluate(out)\n", "print(f\"dnl_feasible : {metrics['dnl_feasible']:.0f}\")\n", "print(f\"conservation_residual : {metrics['conservation_residual']:.3e}\")\n", "print(f\"storage_residual : {metrics['storage_residual']:.3e}\")\n", "assert metrics[\"dnl_feasible\"] == 1.0\n", "assert metrics[\"conservation_residual\"] <= 1e-9\n", "assert metrics[\"storage_residual\"] <= 1e-9\n", "\n", "# The RH-shock boundary anchor, recomputed from the physical parameters exactly\n", "# as in 01-ctm.ipynb (not quoted from it).\n", "expected_n_in = 1.5 * edges\n", "expected_n_out = np.maximum(0.0, 0.5 * (edges - 4.0))\n", "np.testing.assert_allclose(out.n_in[0], expected_n_in, atol=1e-9)\n", "np.testing.assert_allclose(out.n_out[0], expected_n_out, atol=1e-9)\n", "print(\"boundary curves match the recomputed RH-shock anchor exactly (atol=1e-9)\")\n", "\n", "# DISTINCTIVE: byte-exact agreement with ctm, RE-RUN here (not quoted).\n", "ctm_out = NetworkLoader(scenario, CTMLink).run()\n", "np.testing.assert_array_equal(out.n_in, ctm_out.n_in)\n", "np.testing.assert_array_equal(out.n_out, ctm_out.n_out)\n", "print(\"ltm reproduces ctm's cumulative curves byte-for-byte \"\n", " f\"(max diff {np.abs(out.n_in - ctm_out.n_in).max():.1f})\")" ] }, { "cell_type": "markdown", "id": "62e04a7f", "metadata": {}, "source": [ "## LTM's advantage: grids `ctm` cannot load\n", "\n", "`CTMLink` requires a cell-aligned length `L = n * vf * dt`; `LTMLink` only needs\n", "`dt <= min(L/vf, L/w)` (wave-resolved). A single link with `L=3`, `vf=2`, `dt=1`\n", "gives `L/vf = 1.5` — not an integer, so `CTMLink` refuses it outright, while\n", "`LTMLink` free-flow-translates it exactly via the exact cumulative-curve\n", "interpolation (recomputed here, not quoted)." ] }, { "cell_type": "code", "execution_count": 5, "id": "8d0ba604", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:48:27.944476Z", "iopub.status.busy": "2026-07-21T13:48:27.943997Z", "iopub.status.idle": "2026-07-21T13:48:27.952311Z", "shell.execute_reply": "2026-07-21T13:48:27.951596Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CTMLink refuses this link: CTMLink needs a cell-aligned length L = n*vf*dt (CFL = 1): L=3.0, vf*dt=2.0 give 1.5 cells, not an integer >= 1\n", "LTM loads the unaligned link exactly (L/vf = 1.5 lag) where CTM cannot\n" ] } ], "source": [ "unaligned_net = Network(\n", " name=\"ltm-unaligned\", n_nodes=2, n_zones=2, first_thru_node=1,\n", " init_node=np.array([1], dtype=np.int64), term_node=np.array([2], dtype=np.int64),\n", " capacity=np.ones(1), length=np.zeros(1), free_flow_time=np.ones(1),\n", " b=np.zeros(1), power=np.ones(1), toll=np.zeros(1), link_type=np.ones(1, dtype=np.int64),\n", ")\n", "rates = np.zeros((1, 2, 2))\n", "rates[0, 0, 1] = 1.0\n", "unaligned = DynamicScenario(\n", " name=\"ltm-unaligned\", network=unaligned_net,\n", " dynamics=LinkDynamics(\n", " length=np.array([3.0]), free_speed=np.array([2.0]), wave_speed=np.array([1.0]),\n", " jam_density=np.array([3.0]), capacity=np.array([2.0]),\n", " ),\n", " demand=DynamicDemand(breakpoints=np.array([0.0, 4.0]), rates=rates),\n", " grid=TimeGrid(dt=1.0, n_steps=10),\n", ")\n", "\n", "try:\n", " NetworkLoader(unaligned, CTMLink).run()\n", " raise AssertionError(\"expected CTMLink to reject the unaligned length\")\n", "except ValueError as exc:\n", " print(f\"CTMLink refuses this link: {exc}\")\n", "\n", "u_out = NetworkLoader(unaligned, LTMLink).run()\n", "u_edges = unaligned.grid.edges\n", "u_expected = np.minimum(np.maximum(u_edges - 1.5, 0.0), 4.0) # free-flow lag L/vf = 1.5\n", "np.testing.assert_allclose(u_out.n_out[0], u_expected, atol=1e-12)\n", "u_metrics = DNLEvaluator(unaligned).evaluate(u_out)\n", "assert u_metrics[\"dnl_feasible\"] == 1.0\n", "print(\"LTM loads the unaligned link exactly (L/vf = 1.5 lag) where CTM cannot\")" ] }, { "cell_type": "markdown", "id": "d848eef2", "metadata": {}, "source": [ "## Visualize\n", "\n", "Both figures come from `tabench.viz`, the house visualizer. Left/top: the\n", "certified bottleneck network coloured by each link's time-averaged flow.\n", "Right/bottom: LTM's average flow against CTM's — every point sits on `y = x`\n", "(the byte-exact agreement certified above)." ] }, { "cell_type": "code", "execution_count": 6, "id": "137562ef", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:48:27.954375Z", "iopub.status.busy": "2026-07-21T13:48:27.954111Z", "iopub.status.idle": "2026-07-21T13:48:28.211792Z", "shell.execute_reply": "2026-07-21T13:48:28.210896Z" } }, "outputs": [ { "data": { "image/png": "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Y8YwePAfodigQQOX21hesrKyAHj33Xdo0KCh07oaNfydXv954l9Rj7foZyErK4uHHnqIgQMHFttHQECASz8PNWrUoFevXnz66Wfcc889NGzY8KLblJYrPytXXNGO77//gX/961907HilU+++vMTGdmf58hV88803XHHFFYSGhnLNNd1ISUll06ZNXHPNNY6yDz30EEOGDOGzzz7jiy++5Omnn+bVV18p8b0X8QY6Z+2mpk2b4ufnx3/+88f51VOnTrN3716P6m3cuDHNmzejefNmjj+0/v7+5Oe7Hpx/tmXLZjp37szf/34H7du3p3nzZuzfv79UdbRs2RKbzeZ0Pn7v3n1O18DWqVMHgN9++82x7Icffrxo2/r378/QoUNp164dTZtGs2fPngtuU7t2uOP9ad68mVP4bd3q/AFk69b/0KpVawBatWrNjz/+5AjWwv1vwWw2O05H+Pn5k5+f71SHv39h2F7o/W/dujU1atQgIyPDqW3NmzcjKirqgsfzZ+3bt2f37t3F6mjevBlms5nLLruMQ4cOX/A9MptNLF26hA4dOjBgwECOHDni8v7LUtOmTfnoow/55JNPSpxLUVqtW7dm8+YtTss2b95CixYtHCNCReet33//fcewe/fu3dmwYQNbtmwpNhTfokULJk6cyPvvJzNw4MDzTmwT8QYKazeFhIQwYsQIHnvsUTZu3MiOHTu46647HT3MstS4cWMyMzPZsGEjJ06cwGKxuLxt8+bN+e677/jyy7Xs2bOHmTNn8t//lm7Wa6tWrejVqxeTJ09m27ZtfP/990yePJnAwEBHjykwMJCrr76a+fPnk5aWRmpqKjNnzrxo24r+kKalpTF58r3FhlNL4/3332flypXs2bOHp556im3btjFu3N8BSEwcQkBAABMm3MmOHTscE/JuuWWoYwi8cePG/Pzzz+zevZsTJ05gtVqpW7cugYGBfPnll/zvf//jzJkzxfZbs2ZNJk2axEMPPcybb77Jvn37+e6771iyZAlvvvlmsfLn8+CDD/L2228ze/ZsfvnlF9LS0li1Kskxg7l79+5cc003Roy4nXXr1pOens4XX3zBl19+6VSPj48PL7+8jMsvv5yBA292+gA1cODNLF26tNTvrTtatGjBRx99yAcffFDqm6T81d13T2Tjxo0888wz7NmzhzfffJNly5YxadIfE/Qu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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "T = float(edges[-1])\n", "ltm_avg = out.n_out[:, -1] / T\n", "ctm_avg = ctm_out.n_out[:, -1] / T\n", "\n", "display(viz.plot_network_flows(net, ltm_avg))\n", "display(viz.plot_flow_scatter((\"ctm\", ctm_avg), {\"ltm\": ltm_avg}))" ] }, { "cell_type": "markdown", "id": "a14ba3df", "metadata": {}, "source": [ "## Takeaways & pointers\n", "\n", "- **Certified, not self-reported.** DNL link models have nothing to self-report\n", " — the boundary curves above ARE the emitted output, recertified from scratch\n", " by `DNLEvaluator`.\n", "- **Exact where both are exact, flexible where `ctm` is not.** LTM's cumulative-\n", " curve evaluation carries no interior discretisation, so it needs no CFL = 1\n", " cell alignment — the concrete win demonstrated above.\n", "- **Where next.** the cell-based twin [`ctm`](01-ctm.ipynb); the smooth\n", " non-triangular FD [`godunov`](03-godunov.ipynb) (built on the same `ctm` cell\n", " update); merges/diverges [`node-model`](04-node-model.ipynb); the lineage in\n", " the [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": "dnl", "unit": "ltm" } }, "nbformat": 4, "nbformat_minor": 5 }