{ "cells": [ { "cell_type": "markdown", "id": "bdd56576", "metadata": {}, "source": [ "# `ctm` — Daganzo's (1994, 1995) Cell Transmission Model\n", "\n", "**What.** `ctm` is the Godunov cell-transmission scheme for the LWR kinematic-wave\n", "model on a triangular fundamental diagram: one link is discretised into\n", "`n = L / (vf*dt)` equal cells at the sanctioned CFL = 1 operating point, so a\n", "free-flow vehicle crosses exactly one cell per step and the inter-cell flux is\n", "Lebacque's `min(demand, supply)`. It is a `LinkModel` on the generic\n", "sending/receiving interface (adr-010) — the loader and node models are unchanged,\n", "and turning logic is entirely the node models' job (Daganzo 1995's network\n", "extension).\n", "\n", "**Why it is in the benchmark.** It is the first dynamic-network-loading (DNL) link\n", "model — the entry point to the T3 dynamic track, and the workhorse most other\n", "DNL/DTA benchmarks compare against. At CFL = 1 the free-flow branch is exact\n", "linear advection (zero numerical diffusion); the congested branch resolves a\n", "Rankine-Hugoniot backward shock to within one cell. See the\n", "[model compendium](../../docs/MODELS.md) (Daganzo 1994/1995) and the certificate\n", "design in [docs/design/adr-010-dnl-core.md](../../docs/design/adr-010-dnl-core.md) /\n", "[adr-015-ctm.md](../../docs/design/adr-015-ctm.md) (P1).\n", "\n", "**Scope.** This notebook loads the built-in\n", "`triangular_bottleneck_dynamic_scenario` (a two-link corridor with a capacity\n", "bottleneck) through `CTMLink` and certifies the result. It does not benchmark DNL\n", "link models against each other — for that, see the `ltm` / `godunov` tutorials.\n", "\n", "**Canon.** `[daganzo1994cell]`, `[daganzo1995cell]`, [docs/REFERENCES.md](../../docs/REFERENCES.md) / [docs/references.bib](../../docs/references.bib)." ] }, { "cell_type": "markdown", "id": "85bc0a99", "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.\n", "Unlike the T1/day-to-day model tutorials, a DNL link model has no self-report to\n", "diff against the certificate — `NetworkLoader.run()` is a deterministic,\n", "one-shot forward simulation (no budget, no rng, nothing to converge), so the\n", "harness certifies its ONLY output: the emitted cumulative inflow/outflow curves\n", "([README](../../README.md), *Certified, not self-reported*)." ] }, { "cell_type": "code", "execution_count": 1, "id": "d3ff6a6a", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:48:20.839715Z", "iopub.status.busy": "2026-07-21T13:48:20.839565Z", "iopub.status.idle": "2026-07-21T13:48:22.821564Z", "shell.execute_reply": "2026-07-21T13:48:22.820438Z" } }, "outputs": [], "source": [ "# Setup. `ctm` 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", " NetworkLoader,\n", " triangular_bottleneck_dynamic_scenario,\n", " viz,\n", ")" ] }, { "cell_type": "markdown", "id": "ad29aa45", "metadata": {}, "source": [ "## The scenario\n", "\n", "The built-in `triangular_bottleneck_dynamic_scenario`: a two-link corridor\n", "(origin zone 1 → interior node 3 → destination zone 2), symmetric triangular FD\n", "`vf = w = 1`, finite jam density `kappa = 4` (so `capacity = vf*w*kappa/(vf+w) =\n", "2`), feeding a 0.5-capacity sink link. Arrivals start at rate 1.5 — above the\n", "sink's capacity, so a queue backs up the upstream link. Scenarios are frozen and\n", "content-hashed (P2) — the hash below is the instance's identity. (The two\n", "`kappa = inf` point-queue anchors `single_link_dynamic_scenario` /\n", "`bottleneck_dynamic_scenario` are rejected by `CTMLink` — a finite jam density is\n", "required to model bounded storage / spillback.)" ] }, { "cell_type": "code", "execution_count": 2, "id": "d969906b", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:48:22.826485Z", "iopub.status.busy": "2026-07-21T13:48:22.826036Z", "iopub.status.idle": "2026-07-21T13:48:22.833087Z", "shell.execute_reply": "2026-07-21T13:48:22.832358Z" } }, "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", "link 0 (up) : vf=1.0, w=1.0, kappa=4.0, capacity=2.0, L=4.0\n", "link 1 (sink) : vf=1.0, w=1.0, kappa=4.0, capacity=0.5, L=1.0\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", "dyn = scenario.dynamics\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\"link 0 (up) : vf={dyn.free_speed[0]}, w={dyn.wave_speed[0]}, \"\n", " f\"kappa={dyn.jam_density[0]}, capacity={dyn.capacity[0]}, L={dyn.length[0]}\")\n", "print(f\"link 1 (sink) : vf={dyn.free_speed[1]}, w={dyn.wave_speed[1]}, \"\n", " f\"kappa={dyn.jam_density[1]}, capacity={dyn.capacity[1]}, L={dyn.length[1]}\")\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": "026a0c00", "metadata": {}, "source": [ "## Load the network\n", "\n", "The DNL model contract (adr-010): a `LinkModel` factory + a `DynamicScenario` go\n", "into `NetworkLoader`, which runs a deterministic sending/receiving time loop and\n", "emits cumulative inflow/outflow curves per link — no `Budget`/`RngBundle`/`Trace`,\n", "because there is nothing to converge or seed: one forward pass over the grid is\n", "the entire computation." ] }, { "cell_type": "code", "execution_count": 3, "id": "722414aa", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:48:22.837227Z", "iopub.status.busy": "2026-07-21T13:48:22.836687Z", "iopub.status.idle": "2026-07-21T13:48:22.844229Z", "shell.execute_reply": "2026-07-21T13:48:22.843502Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "link model : CTMLink\n", "cells (link 0) : 4 (L / (vf*dt) = 4)\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", "vehicles in link 0 storage at t=12: 14.000\n" ] } ], "source": [ "loader = NetworkLoader(scenario, CTMLink)\n", "out = loader.run()\n", "edges = scenario.grid.edges\n", "print(f\"link model : {CTMLink.__name__}\")\n", "print(f\"cells (link 0) : {loader.links[0].n_cells} (L / (vf*dt) = \"\n", " f\"{dyn.length[0] / (dyn.free_speed[0] * scenario.grid.dt):.0f})\")\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\"vehicles in link 0 storage at t={edges[-1]:.0f}: \"\n", " f\"{out.n_in[0, -1] - out.n_out[0, -1]:.3f}\")" ] }, { "cell_type": "markdown", "id": "c090526c", "metadata": {}, "source": [ "## Certify (P1) — feasibility, conservation, and the RH-shock anchor\n", "\n", "The harness recomputes every certificate from `(scenario, out)` alone: `C0`\n", "shape/validity, `C1` conservation, `C2` capacity respect, `C3` storage bounds,\n", "`C4`/`C6` free-flow causality, and (Tier-B) `C5` the backward-wave envelope.\n", "Beyond that structural gate, the arrival rate (1.5) exceeds the sink capacity\n", "(0.5), so a Rankine-Hugoniot shock forms at the link-1 boundary once the\n", "free-flow front arrives (`t = L/vf = 4`) and propagates upstream — recomputed\n", "here from the two FD branches, not quoted." ] }, { "cell_type": "code", "execution_count": 4, "id": "11c77f64", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:48:22.848243Z", "iopub.status.busy": "2026-07-21T13:48:22.847810Z", "iopub.status.idle": "2026-07-21T13:48:22.855987Z", "shell.execute_reply": "2026-07-21T13:48:22.855287Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dnl_feasible : 1\n", "conservation_residual : 0.000e+00\n", "storage_residual : 0.000e+00\n", "causality_residual : 0.000e+00\n", "tstt : 95.750\n", "total_delay : 19.750\n", "boundary curves match the recomputed RH-shock anchor exactly (atol=1e-9)\n", "congested cells density : [3.5 3.5 3.5 3.5] (supply-root k_B = 3.5000)\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", "print(f\"causality_residual : {metrics['causality_residual']:.3e}\")\n", "print(f\"tstt : {metrics['tstt']:.3f}\")\n", "print(f\"total_delay : {metrics['total_delay']:.3f}\")\n", "assert metrics[\"dnl_feasible\"] == 1.0\n", "assert metrics[\"conservation_residual\"] <= 1e-9\n", "assert metrics[\"storage_residual\"] <= 1e-9\n", "assert metrics[\"causality_residual\"] <= 1e-9\n", "\n", "# Boundary curves, recomputed from the physical parameters (arrival rate 1.5,\n", "# bottleneck rate 0.5, free-flow front at t = L/vf = 4) — not the point-queue\n", "# formula, the exact CTM boundary curve for a triangular FD at CFL = 1.\n", "expected_n_in = 1.5 * edges # uncongested arrival never throttled\n", "expected_n_out = np.maximum(0.0, 0.5 * (edges - 4.0)) # bottleneck-capped exit from t=4\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", "# The distinctive CTM result: every congested cell settles at the SUPPLY-side\n", "# root of the FD (k = kappa - q_B/w), recomputed from the FD directly, not\n", "# hand-quoted.\n", "fd0 = scenario.dynamics.fd(0)\n", "k_b = fd0.jam_density - 0.5 / fd0.wave_speed\n", "dx = fd0.free_speed * scenario.grid.dt\n", "density = loader.links[0].occupancy / dx\n", "print(f\"congested cells density : {np.round(density, 4)} (supply-root k_B = {k_b:.4f})\")\n", "assert abs(float(fd0.supply_at(np.array([k_b]))[0]) - 0.5) < 1e-9\n", "# Full spillback by t=12: every cell is engulfed by the queue, all at k_B.\n", "np.testing.assert_allclose(density, k_b, atol=1e-9)" ] }, { "cell_type": "markdown", "id": "15f85453", "metadata": {}, "source": [ "## Visualize\n", "\n", "Both figures come from `tabench.viz`, the house visualizer. Left/top: the\n", "certified network with each link coloured/sized by its TIME-AVERAGED flow\n", "(`n_out(T) / T`, the DNL analogue of a static link flow). Right/bottom: the\n", "loaded average flow against the recomputed boundary-curve anchor above — the\n", "sink link visibly sits at its throttled capacity (0.5), not the uncongested\n", "arrival rate." ] }, { "cell_type": "code", "execution_count": 5, "id": "99e2b975", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:48:22.859871Z", "iopub.status.busy": "2026-07-21T13:48:22.859288Z", "iopub.status.idle": "2026-07-21T13:48:23.144251Z", "shell.execute_reply": "2026-07-21T13:48:23.143102Z" } }, "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", "avg_flow = out.n_out[:, -1] / T\n", "ref_avg_flow = np.array([expected_n_out[-1] / T, expected_n_out[-1] / T])\n", "\n", "display(viz.plot_network_flows(net, avg_flow))\n", "display(viz.plot_flow_scatter((\"recomputed RH-shock anchor\", ref_avg_flow), {\"ctm\": avg_flow}))" ] }, { "cell_type": "markdown", "id": "a2f9a404", "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, and `DNLEvaluator` recomputes\n", " every certificate from them alone.\n", "- **CFL = 1 is exact.** The free-flow branch is bit-exact linear advection; the\n", " congested branch resolves the RH shock to machine precision on this symmetric\n", " FD (an asymmetric `w < vf` FD spreads the shock by O(one cell) — expected\n", " scheme physics, why `C5` is a non-gating Tier-B residual for CTM).\n", "- **Where next.** the exact cumulative-curve alternative\n", " [`ltm`](02-ltm.ipynb) (no cell alignment required); the smooth non-triangular\n", " FD [`godunov`](03-godunov.ipynb); merges/diverges\n", " [`node-model`](04-node-model.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": "dnl", "unit": "ctm" } }, "nbformat": 4, "nbformat_minor": 5 }