{ "cells": [ { "cell_type": "markdown", "id": "5948c927", "metadata": {}, "source": [ "# `xu2024` — the 20-US-city cross-domain axis (Honolulu / San Francisco)\n", "\n", "**What.** Xu, Zheng, Hu, Feng & Ma's (2024) unified 20-US-city traffic-\n", "assignment dataset (`[xu2024unified]`,\n", "[docs/REFERENCES.md](../../docs/REFERENCES.md)): real OSM-derived road\n", "networks with published AequilibraE user-equilibrium flows, CC BY 4.0, fetched\n", "by HTTP byte-range extraction (never the whole 276 MB archive) and cached.\n", "This is the benchmark's **cross-domain axis** — every other scored instance is\n", "either a hand-built analytic anchor or one of the four donated TNTP networks;\n", "these are disjoint real cities.\n", "\n", "**Why it is in the benchmark.** A benchmark that claims to test *generalization*\n", "needs instances off the standard four. This notebook covers the two CI-sized\n", "rungs, **Honolulu** (11,205 links) and **San Francisco** (18,002 links) — never\n", "the other 15 cities, which are fetchable but not CI-run. See\n", "[docs/design/adr-033-xu2024-dataset.md](../../docs/design/adr-033-xu2024-dataset.md)\n", "for the full derivation, the 20-city audit (17 ship, 3 excluded and named), and\n", "every measured anchor.\n", "\n", "**Scope.** The dataset's own wrong-centroid defect (disclosed, not hidden), the\n", "published flows' machine-exact conservation (a provenance check, not a best-\n", "known-oracle claim), and genuine cross-*implementation* agreement — the repo's\n", "own `bfw` converging toward the same equilibrium the published AequilibraE run\n", "found." ] }, { "cell_type": "markdown", "id": "bfd2b08e", "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 — the node-balance residual, the bfw/published\n", "correlation — is recomputed live from the scenario's own data, in the cell\n", "where it is claimed. This data notebook makes **no** best-known-oracle claim:\n", "the published AequilibraE flows are a LOOSE reference (their own relative gap\n", "is ~1e-3, ~11 orders looser than a TNTP best-known solution) used only for a\n", "provenance cross-check, never as ground truth\n", "([README](../../README.md), *Certified, not self-reported*)." ] }, { "cell_type": "code", "execution_count": 1, "id": "917e3ad1", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:56:35.008065Z", "iopub.status.busy": "2026-07-21T13:56:35.007787Z", "iopub.status.idle": "2026-07-21T13:56:37.107227Z", "shell.execute_reply": "2026-07-21T13:56:37.106034Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "scenario : xu2024-honolulu\n", "family : xu2024-honolulu\n", "zones/nodes/links : 117/2982/11205\n", "total demand : 107515.2\n" ] } ], "source": [ "# Setup. xu2024 is numpy/stdlib only — no optional extra, so no package guard\n", "# cell. It IS a network-fetched, checksummed dataset (never vendored, P9): the\n", "# load below is gated the way `tests/conftest.py`'s `load_or_skip` gates every\n", "# data-backed test — a clear, informative failure rather than a bare traceback\n", "# if this is the first run offline. `TABENCH_REQUIRE_DATA=1` (as CI does) is\n", "# honored by the exception message alone; this notebook, like every guarded\n", "# notebook, halts rather than silently degrading.\n", "#\n", "# The inline backend is Agg-based: figures render headlessly into the\n", "# notebook, so CI can execute tutorials without a display. NEVER\n", "# matplotlib.use(\"Agg\") in-kernel — it silently suppresses inline capture.\n", "%matplotlib inline\n", "import numpy as np\n", "\n", "from tabench import (\n", " BiconjugateFrankWolfeModel,\n", " Budget,\n", " Evaluator,\n", " RngBundle,\n", " Trace,\n", " XU2024_RUNGS,\n", " load_scenario,\n", " viz,\n", ")\n", "from tabench.data import xu2024_citation\n", "from tabench.metrics.gaps import node_balance_residual\n", "\n", "assert XU2024_RUNGS == (\"honolulu\", \"sanfrancisco\")\n", "\n", "\n", "def _load_rung(city: str):\n", " try:\n", " return load_scenario(f\"xu2024-{city}\")\n", " except Exception as exc:\n", " raise RuntimeError(\n", " f\"xu2024-{city} data unavailable (offline, or a first-run fetch \"\n", " f\"failed): {exc}\\nThe fetch is checksummed, cached under \"\n", " \"~/.cache/tabench, and needs network access on first run \"\n", " \"(adr-033).\"\n", " ) from exc\n", "\n", "\n", "honolulu = _load_rung(\"honolulu\")\n", "print(f\"scenario : {honolulu.name}\")\n", "print(f\"family : {honolulu.family}\")\n", "print(f\"zones/nodes/links : {honolulu.network.n_zones}/{honolulu.network.n_nodes}/{honolulu.network.n_links}\")\n", "print(f\"total demand : {honolulu.demand.total:.1f}\")" ] }, { "cell_type": "markdown", "id": "f9a2bde3", "metadata": {}, "source": [ "## The wrong-centroid defect (disclosed, machine-verified)\n", "\n", "The dataset's own published AequilibraE run injected OD demand at node ids\n", "`1..Z` — the authors' own `AequilibraE_assignment.py` calls\n", "`g.prepare_graph(np.arange(zones)+1)` — rather than the intended tract\n", "centroids (median 6.4 km off). TABenchmark ships the AS-PUBLISHED instance:\n", "self-consistent on the `1..Z`-centroid graph, but a DIFFERENT instance from\n", "the dataset's TransCAD side, which used the correct centroids. Cross-solver\n", "agreement against TransCAD is never claimed here — the disclosure travels\n", "IN-ARTIFACT, not only in this notebook." ] }, { "cell_type": "code", "execution_count": 2, "id": "ad2b16cc", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:56:37.111863Z", "iopub.status.busy": "2026-07-21T13:56:37.111362Z", "iopub.status.idle": "2026-07-21T13:56:37.116162Z", "shell.execute_reply": "2026-07-21T13:56:37.115368Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Published AequilibraE UE link flows (matrix_ab), own relative gap ~1e-3 — a LOOSE published reference, NOT a best-known oracle. AS-PUBLISHED wrong-centroid instance (demand injected at node ids 1..Z, not the tract centroids; adr-033). Cross-solver agreement against the dataset's TransCAD flows is not claimed.\n", "\n", "Xu, X., Zheng, Z., Hu, Z., Feng, K. & Ma, W. (2024). A unified dataset for the city-scale traffic assignment model in 20 U.S. cities. Scientific Data 11:325, DOI 10.1038/s41597-024-03149-8. Data: figshare https://doi.org/10.6084/m9.figshare.24235696 (v4, file 48908890), licensed CC BY 4.0.\n" ] } ], "source": [ "print(honolulu.reference.note)\n", "assert \"AS-PUBLISHED\" in honolulu.reference.note\n", "assert \"not claimed\" in honolulu.reference.note\n", "print()\n", "print(xu2024_citation())" ] }, { "cell_type": "markdown", "id": "4cc8f215", "metadata": {}, "source": [ "## Published-flow conservation (a provenance check, not an oracle)\n", "\n", "The published AequilibraE flows are not a best-known oracle like the TNTP\n", "`*_flow.tntp` solutions (those certify at AEG ~1e-15): the paper's own\n", "relative gap is ~1e-3. What IS machine-verifiable is that the published flows\n", "conserve demand exactly on the AS-PUBLISHED `1..Z`-centroid graph — recomputed\n", "here, not quoted." ] }, { "cell_type": "code", "execution_count": 3, "id": "34a6463c", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:56:37.120070Z", "iopub.status.busy": "2026-07-21T13:56:37.119483Z", "iopub.status.idle": "2026-07-21T13:56:37.413453Z", "shell.execute_reply": "2026-07-21T13:56:37.412242Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "published-flow node-balance residual : 1.09e-11\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "feasible : 1\n" ] } ], "source": [ "residual = node_balance_residual(honolulu, honolulu.reference.link_flows)\n", "print(f\"published-flow node-balance residual : {residual:.2e}\")\n", "assert residual < 1e-9\n", "metrics_published = Evaluator(honolulu).evaluate(honolulu.reference.link_flows)\n", "print(f\"feasible : {metrics_published['feasible']:.0f}\")\n", "assert metrics_published[\"feasible\"] == 1.0" ] }, { "cell_type": "markdown", "id": "bc3248f3", "metadata": {}, "source": [ "## Cross-implementation agreement: the repo's own `bfw`\n", "\n", "Genuine cross-*implementation* agreement, at a CI-sized budget (the full\n", "in-sprint measurement runs 400 iterations to relative gap 1.07e-4 with\n", "correlation 0.99992 — this cell uses a small budget, exactly as the test\n", "suite's CI anchor does, and checks the SAME structural properties: feasible,\n", "and correlated with the published flows above 0.99)." ] }, { "cell_type": "code", "execution_count": 4, "id": "6c2d1af7", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:56:37.416873Z", "iopub.status.busy": "2026-07-21T13:56:37.416124Z", "iopub.status.idle": "2026-07-21T13:56:46.839737Z", "shell.execute_reply": "2026-07-21T13:56:46.838076Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "bfw (iterations=30) : relative_gap=0.0061 feasible=1\n", "correlation with published AequilibraE flows : 0.99951\n" ] } ], "source": [ "trace = Trace()\n", "BiconjugateFrankWolfeModel().solve(honolulu, Budget(iterations=30), RngBundle(0), trace)\n", "v_bfw = trace.final.link_flows\n", "metrics_bfw = Evaluator(honolulu).evaluate(v_bfw)\n", "corr = float(np.corrcoef(v_bfw, honolulu.reference.link_flows)[0, 1])\n", "print(f\"bfw (iterations=30) : relative_gap={metrics_bfw['relative_gap']:.4f} \"\n", " f\"feasible={metrics_bfw['feasible']:.0f}\")\n", "print(f\"correlation with published AequilibraE flows : {corr:.5f}\")\n", "assert metrics_bfw[\"feasible\"] == 1.0\n", "assert corr > 0.99" ] }, { "cell_type": "markdown", "id": "7f8b5cdd", "metadata": {}, "source": [ "## The other CI rung: San Francisco\n", "\n", "Same load path, same disclosure, same conservation check — `xu2024`'s only\n", "OTHER CI-sized rung. San Francisco is larger (18,002 links vs Honolulu's\n", "11,205); this notebook checks conservation only, to keep runtime CI-friendly\n", "(a full `bfw` solve on San Francisco is a local-only, not a CI, computation —\n", "adr-033)." ] }, { "cell_type": "code", "execution_count": 5, "id": "8eeee815", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:56:46.843237Z", "iopub.status.busy": "2026-07-21T13:56:46.842903Z", "iopub.status.idle": "2026-07-21T13:56:47.534910Z", "shell.execute_reply": "2026-07-21T13:56:47.533798Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "scenario : xu2024-sanfrancisco\n", "zones/nodes/links : 194/4986/18002\n", "total demand : 168828.0\n", "published-flow node-balance residual : 1.46e-11\n" ] } ], "source": [ "sanfrancisco = _load_rung(\"sanfrancisco\")\n", "print(f\"scenario : {sanfrancisco.name}\")\n", "print(f\"zones/nodes/links : {sanfrancisco.network.n_zones}/{sanfrancisco.network.n_nodes}/{sanfrancisco.network.n_links}\")\n", "print(f\"total demand : {sanfrancisco.demand.total:.1f}\")\n", "\n", "residual_sf = node_balance_residual(sanfrancisco, sanfrancisco.reference.link_flows)\n", "print(f\"published-flow node-balance residual : {residual_sf:.2e}\")\n", "assert residual_sf < 1e-9\n", "assert Evaluator(sanfrancisco).evaluate(sanfrancisco.reference.link_flows)[\"feasible\"] == 1.0" ] }, { "cell_type": "markdown", "id": "bbee8c96", "metadata": {}, "source": [ "## Visualize\n", "\n", "Honolulu's flows are the certified artifact (per-link, on a road `Network`),\n", "so `tabench.viz` applies (adr-035's viz rule). At 11,205 links a network\n", "diagram is illegible — the honest visualization at this scale is the\n", "flow-scatter, cross-implementation agreement made visual." ] }, { "cell_type": "code", "execution_count": 6, "id": "8b93dc74", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:56:47.537931Z", "iopub.status.busy": "2026-07-21T13:56:47.537586Z", "iopub.status.idle": "2026-07-21T13:56:47.948514Z", "shell.execute_reply": "2026-07-21T13:56:47.947434Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd4AAAHXCAYAAAASkTsLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB0z0lEQVR4nO3dd3gU1f7H8fdsy+6m94QkIF3pqCAdCyoKiKhIUa8FRUCv7XdV7O1arr2AvQMWVBBUFBtIERSliRRpAiF107N9d+b3x8JCTIAkZFO/r+fJQ3ZndubsyZJPzpkz5yg+n1dDCCGEEPVC19AFEEIIIVoSCV4hhBCiHknwCiGEEPVIglcIIYSoRxK8QgghRD2S4BVCCCHqkQSvEEIIUY8keIUQQoh6JMErhBBC1CMJXiGaiOnTpzN16tRq7TtnzhwGDRoU4hLVzrvvvkenTp1p1SqNDRs2NHRxhKh3hoYugBCi5fB6vdx5553Mnz+PAQMGNHRxhGgQ0uIVQtQJn8+Hph196vfc3FxcLhddunSp1Tm8Xm+tXidEYyLBK0Qd6d69O8888yynn34GqamtuPjiSygsLOK22/6P1q1b07v3yfzyyy/B/cvKyrjpppvp1KkznTp15pZbbsVutwe3r1y5kv79B9CqVRqXXXY5ZWXlFc63a9duxo0bR7t27enWrRtPPfUUqqoes5wzZ85k5MhRFZ777LN5nHpqHwDWr1/PWWcNIz09g7Zt2zFu3LgjHis6OobXX3+dfv36k5raivLy8iOWa8OGDfTp0xeALl260rNnLwDKy8v5z39up2vXbrRv34Hrr7+ekpISAPbs2UN0dAyzZ8+mV6/enHRSl2AZR44cSZs2J9CrV2/effe9YJkef/xxxo0bx3/+czutW7ema9dufPbZvOB2VVV59dVXOfXUPqSlpdO798l8//33AGiaFtzWunVrRowYwbZt245Zp0LUhASvEHVo/vx5zJ49i61bt7B//36GDRvG6acPZffu3Ywdewm33nprcN/p06eza9cuVq9exapVP7N9+1/cddfdABQVFTNhwgSuu+469u7dw+WXX8bcuXODr3U4HIwefQFDhw5l69YtfP3113z22Txmz559zDKOHTuW1atXk5mZGXzu448/Dgbs7bffwfDhw9m7dw9bt27hpptuOurxPvnkU+bPn0dm5j70ev0Ry9WzZ09Wr14FwObNf7Jhw3oAbrjhRoqKili5cgUbN27A6/Vx++23VzjH119/zdKlS9i4cQO5ublceOEYrrlmErt27eSDD+bw+OOPs3TpT8H9f/jhRwYMGMDu3bu59957uOmmmygrKwPg9ddf5+WXX+GNN94gM3MfCxcuICMjA4A333yLWbNm8fHHH7Fr1y5GjRrFuHHj8Xg8x6xXIapLgleIOnTNNZNIT08nOjqas88+m7i4OC644AL0ej0XXXQRmzdvwePxoKoqc+d+woMPPkBcXBzx8fHcf//9fPTRR6iqyuLF35CSkso111yNwWDgvPPOY8iQIcHzLF78LdHRMUybNg2TyURGRgZTpkzhk08+PWYZk5KSOP3005k79xMA8vPzWbJkCePHB4LXaDSwb98+srOzCQsLY+DAgUc93s0330RqaiphYWE1LpfNZmPhwoU8/fTTxMTEEB4ezj333M28efPx+/3B/e68805iYmKwWq189NHHDBw4gIsuGoNer6dLly5cdtllfPLJJ8H9e/bsGdw+fnwgOHfs2AnAW2+9zV13Tad3714oikJGRgadO3cG4M033+Tuu++mffv2GAwGpkyZgsvl4rfffjtmvQpRXTK4Sog6lJSUGPzearVUeGyxWNA0DYfDgcfjwePx0Lp16+D2E044AbfbTUFBAdnZOcFW2EEZGRm43S4A9u7dy5YtWyq8XlU10tLSqlXO8ePH89RTT3Hbbbfy6aefctppfYPnmzFjJv/73xMMHXo6MTExTJ58HZMnTz7isdLT04Pf17Rce/bsRVVVevbsUeF5nU5Hbm7uYec4VBd79+7l22+/q3AOv1+lf//+wcfJyUnB7xVFwWIxU14eaPHu27eP9u3bV1mevXv3Mnny9ej1h9okHo+XrKysqt+8ELUgwStEA0hISMBkMrF3716SkgIhsXfvXsLCwoiPjyc1NYV9+/ZVeE1mZiaJiQkApKWl0atXL3744ftanX/EiPO59dZbWbduPR999DHXXjspuK1du7a89tpraJrG6tWrGT36Qvr06Uvv3r2qPJZOdyikalqu9PQ0dDodW7duxWq1Vtq+Z8+eA+dQKpxj5MiRvPPO29U6xz9lZGSwa9cu+vbtW2lbWloaTzzxOMOGDavVsYWoDulqFqIB6HQ6xo69hIcffoTCwiIKCwt56KGHGTduHDqdjnPOOZfs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u3fnmWee5ayzhpGSksrWrVv5+OOP6devP2lp6XTt2o3//ve/aFrdzHI7depUpk+fDhz6rHz00Uf06tWb1q1bM3XqVLxeb5Wv/eqrrzjxxJNYtWpVpW1nnHEmK1as4IEHHqRVqzSWLFlaaZ+dO3cxZsxFtGlzAj179qrQBd+nT1++//57AP7880+io2N46623ASgpKSE+PoGCgoLjffuiAUnwiibv/fff56233uSvv7aRnJzEdddNrtHrv/zyS5YvX86qVT/z66+/8Oyzzx7zNS+99BI+n4+tW7ewe/duZsx4iYiIyOD2jz/+mIcffog9e/6md+/e3HHHHcFtN9xwI0VFRaxcuYKNGzfg9fq4/fbbASgqKmbChAlcd9117N27h8svv4y5c+cetSzFxcUsXLiQyy6byIQJE/jmm8Xk5eWF7HzHY9asWTzwwAPs3r2LIUOGMGHCRHw+X3D7Bx98wKuvvkJW1n46duxIXFwcs2fPIjNzHx9++AHvvvsen3zyScjK991337N8+TJ++eUXfvppWZV18e677zF9+nTmz59H//79K21fsuRHBgzoz0MPPUhW1n7OOOP0Ctt9Ph/jxo2jW7dubNu2lTlzZvPCCy8G39fgwYNZtmw5AMuWLaNt27YsXx54vGLFCk48sTPx8fF1+r5F/ZLgFU3epEmT6NSpE1arlYcffpjly5ezf//+ar/+rrumExMTQ2pqKrfeehsfffTxMV9jNBooLCxi586d6PV6evToQVxcbHD7pZdeSvfu3TEYDEycOIH16zcAYLPZWLhwIU8//TQxMTGEh4dzzz13M2/efPx+P4sXf0NKSirXXHM1BoOB8847jyFDhhy1LJ988ikRERGcffbZDB48mNTUFD788KOQne94XHzxxfTt2xeTycRdd00nPz+fNWvWBLdPmnQNHTt2RK/XYzKZOPvss+nQoQOKotCjRw8uueRili9fUeGY1103mdatWwe/brjhxlqX78477yAyMpLU1FTOOuss1q9fX2H7k08+ycsvv8zXX3/NSSedVKtz/Pbbb+Tm5nLfffdiNpvp1q0b1113HXPmfAAEgvdg0C5btow77ridlStXBh+H8ucj6ocEr2jyMjIygt8nJSURFhYW7G6u6etbt86o1mtvuukm+vfvz1VXXU3Hjp248847cTqdwe3JyUnB761WK+Xlge7iPXv2oqoqPXv2CAbFGWecgU6nIzc3l+zsnArl+Wf5qjJr1izGjr0Eo9GIoiiMGzee2bNnh+x8x+PwYxuNRpKTk8nKOlTf6enpFfb//vsfOPvsc2jbth0ZGa15++13KCys2M36xhuvs3fv3uDXzJkzal2+g0v/AYSHH/q5ATidLmbMmMnUqVMrlbMm9u/PIiUlBZPJFHzuhBNOICsrC4DBgwexceNGioqK+eWXXxk1ahTJyUls2bKFZcuWS/A2AzKqWTR5+/btC36fn5+P2+0mNTUVs9kMgNPpJCYmBoCcnFwsFnOl1x/8hbtvXyap1VicPCIigocffoiHH36Iv//+m/HjJ/Dmm2/y73//+6ivS09PQ6fTsXXrVqxWa6XtqakpFd4PQGZmJomJCVUeb+PGjWzYsIG//97NZ5/NA8DtdlNSUsLq1atp27btcZ0vPDwCp9OFpmkoigIE6rB799qtf3r4ubxeL7m5ubRqdai+dbpDbQGPx8MVV1zBM888zcUXX0xYWBjTp0+vcC29PlksZhYsWMAll1xCZGQkl1xyca2Ok5bWipycHLxeL0ajEYC9e/fSqlUrABISEujUqROvvPIy7dq1IzIykiFDhjBv3jz++usvBgwYUGfvSTQMafGKJu+dd95h+/btOJ1OHnjgAQYOHEBaWhrx8fFkZKTzwQcfoqoqy5Ytq3LE7//+9yTFxcVkZ2fz7LPPcumlY495zm+++YYdO3agqipRUVEYDAYMhmP/HZucnMyIESO4/fbbgwNkcnNz+eKLLwA455xzyc7O5t1338Pn87F48WKWLVt2xOPNmjWLHj16sGbNGlasWM6KFctZs+ZXhg4dyqxZs477fB06tMdoNPLJJ5/g9/v59NNP2bhx4zHf55HMmzeP3377DY/Hw//+9z/i4+Pp06dPlfu63W5cLhdxcXGEhYXx22+/8cknDXtLV+/evZg37zOmT59e62vhp5xyComJiTz66GO43W42b97M66+/zsSJE4L7DB48iFdeeZXBgwcDMGTIEF599TV69OhBdHR0nbwX0XAkeEWTd/nll3PNNZPo2LETWVnZvPHGG8FtM2bMZM6cOWRktOadd97loosuqvT6888/n8GDB9OvX39OPfVU/u///u+Y59y1axcXXXQxaWnp9O17Gn379mXSpEnVKu8rr7xMdHQ0p59+BunpGQwffl7wGnBcXCwffDCHV199ldat2/D+++8zdmzVfwi4XC7mzv2EqVOnkJycXOFr2rSpzJ//OWVlZcd1vqioKF588QUefPAh2rZty+rVv3DWWWdW631W5fLLL+eBBx7ghBPasmTJUj74YM4R/2CJjIzk6aef5uabbyE9PYOnn36aiy4aU2m/SZOupVWrtOBXx46dal2+6ujZsyeffz6fe+65lw8++KDGrzcajcyd+zHr16+nY8dOjB8/gRtumFah3gcPHkxpaWmwW3ngwIE4HA7pZm4mFJ/PWzdj84VoAN27d+fxxx9n5MiRDV2UZmP69OmUlJTwyiuvNHRRhGiWpMUrhBBC1CMJXiGEEKIeSVezEEIIUY+kxSuEEELUIwleIYQQoh5J8AohhBD1SIJXCCGEqEcSvEIIIUQ9kuAVQggh6pEErxBCCFGPJHiFEEKIevT/1oXB0yZQep8AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(viz.plot_flow_scatter(\n", " (\"published AequilibraE\", honolulu.reference.link_flows),\n", " {\"bfw (30 iterations)\": v_bfw},\n", "))" ] }, { "cell_type": "markdown", "id": "2703151c", "metadata": {}, "source": [ "## Takeaways & pointers\n", "\n", "- **Disclosed, not hidden.** The wrong-centroid defect travels in the\n", " scenario's own `reference.note`, not only in the ADR — a benchmark that\n", " ships a known defect says so in the artifact itself.\n", "- **A provenance check, not an oracle.** The published flows' own relative\n", " gap is ~1e-3; what this notebook certifies is conservation (exact) and\n", " cross-implementation correlation (>0.99) — never a best-known-flow claim.\n", "- **The cross-domain axis is real cities, not just a bigger TNTP net.** 17 of\n", " 20 cities ship; 3 are excluded and NAMED (Washington, Pittsburgh, Phoenix) —\n", " further evidence of the same wrong-centroid defect, not swept under a rug.\n", "- **Where next.** `bo4mob` ([02-bo4mob.ipynb](02-bo4mob.ipynb)) for a second,\n", " very different data family (no BPR network, no true OD — an engine-liveness\n", " story instead); the full 20-city audit and every measured anchor in\n", " [docs/design/adr-033-xu2024-dataset.md](../../docs/design/adr-033-xu2024-dataset.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": "data", "unit": "xu2024" } }, "nbformat": 4, "nbformat_minor": 5 }