{ "cells": [ { "cell_type": "markdown", "id": "2e1b9738", "metadata": {}, "source": [ "# `gp` — Gradient projection (Jayakrishnan et al. 1994) on the Braess network\n", "\n", "**What.** Gradient projection works in disaggregate route-flow space: it column-generates a few shortest routes per OD pair and shifts flow off the costlier routes onto the cheapest by a projected Newton step, so each OD's routes equalize cost directly. Route-based convergence reaches machine precision far faster than link-based Frank–Wolfe, at the cost of storing per-OD route sets.\n", "\n", "**Why it is in the benchmark.** It is the path-based rung of the convergence ladder between conjugate Frank–Wolfe and the bush-based family (`[jayakrishnan1994faster]`). See its entry in the\n", "[model compendium](../../docs/MODELS.md) and the certificate design in\n", "[docs/ARCHITECTURE.md](../../docs/ARCHITECTURE.md) (P1).\n", "\n", "**Scope.** This notebook runs the solver on the built-in Braess scenario (5 links,\n", "one OD pair, no download) and certifies the result; it does not benchmark solver\n", "families against each other — for that, see `demos/demo_quickstart.py`.\n", "\n", "Primary reference: `[jayakrishnan1994faster]` ([docs/REFERENCES.md](../../docs/REFERENCES.md))." ] }, { "cell_type": "markdown", "id": "1396903a", "metadata": {}, "source": [ "## How this notebook is graded\n", "\n", "**A notebook never claims a number it does not compute in that cell.** Every scored\n", "quantity below is recomputed live by the P1 `Evaluator` from the flows the model\n", "emitted, in the cell where it is claimed. Model self-reports are shown only as\n", "provenance and diffed against the certificate as an honesty check, exactly as the\n", "harness treats them ([README](../../README.md), *Certified, not self-reported*)." ] }, { "cell_type": "code", "execution_count": 1, "id": "31fc0225", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:45:03.035239Z", "iopub.status.busy": "2026-07-21T13:45:03.034427Z", "iopub.status.idle": "2026-07-21T13:45:04.975064Z", "shell.execute_reply": "2026-07-21T13:45:04.974096Z" } }, "outputs": [], "source": [ "# Setup. `gp` 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 CI\n", "# renders into the notebook); NEVER matplotlib.use(\"Agg\") in-kernel — it silently\n", "# suppresses inline figure capture.\n", "%matplotlib inline\n", "import numpy as np\n", "\n", "from tabench import (\n", " Budget,\n", " Evaluator,\n", " GradientProjectionModel,\n", " RngBundle,\n", " Trace,\n", " braess_scenario,\n", " viz,\n", ")" ] }, { "cell_type": "markdown", "id": "4e8be2f0", "metadata": {}, "source": [ "## The scenario\n", "\n", "The built-in Braess network: 4 nodes, 5 links, a single OD pair (1 → 2) with demand\n", "6. Scenarios are frozen and content-hashed (P2) — the hash printed below is the\n", "identity of the benchmark instance, so a silently edited network cannot masquerade\n", "as it." ] }, { "cell_type": "code", "execution_count": 2, "id": "b13a71e7", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:45:04.979892Z", "iopub.status.busy": "2026-07-21T13:45:04.979340Z", "iopub.status.idle": "2026-07-21T13:45:04.984896Z", "shell.execute_reply": "2026-07-21T13:45:04.984169Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "scenario : braess\n", "content hash : cf00f411cdccec88…\n", "links : 5 (tail→head: 1->3, 1->4, 3->4, 3->2, 4->2)\n", "total demand : 6.0\n" ] } ], "source": [ "scenario = braess_scenario()\n", "net = scenario.network\n", "\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\"total demand : {scenario.demand.total}\")" ] }, { "cell_type": "markdown", "id": "6a86cf95", "metadata": {}, "source": [ "## Solve\n", "\n", "The model contract ([CONTRIBUTING.md](../../CONTRIBUTING.md)): a model receives\n", "`(scenario, budget, rng, trace)`, records checkpoints, and respects the budget.\n", "Budgets are hardware-free (iterations / shortest-path calls; wall-clock is recorded\n", "but never the ranking axis, P7). Whatever the model writes into `self_report` is\n", "provenance, not a score." ] }, { "cell_type": "code", "execution_count": 3, "id": "cae08892", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:45:04.988785Z", "iopub.status.busy": "2026-07-21T13:45:04.988554Z", "iopub.status.idle": "2026-07-21T13:45:05.013477Z", "shell.execute_reply": "2026-07-21T13:45:05.012808Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "model : gp\n", "budget spent : 50 iterations, 51 shortest-path calls\n", "checkpoints : 50\n", "emitted flows : [4. 2. 2. 2. 4.]\n", "self-reported gap: -2.060e-16 (provenance only)\n" ] } ], "source": [ "model = GradientProjectionModel()\n", "bundle = model.solve(scenario, Budget(iterations=50), RngBundle(0), Trace())\n", "\n", "final = bundle.final\n", "print(f\"model : {model.name}\")\n", "print(f\"budget spent : {final.coords.iterations} iterations, \"\n", " f\"{final.coords.sp_calls} shortest-path calls\")\n", "print(f\"checkpoints : {len(bundle.trace.checkpoints)}\")\n", "print(f\"emitted flows : {np.round(final.link_flows, 6)}\")\n", "print(f\"self-reported gap: {final.self_report['relative_gap']:.3e} (provenance only)\")" ] }, { "cell_type": "markdown", "id": "f68e9330", "metadata": {}, "source": [ "## Certify (P1)\n", "\n", "The harness, never the model, computes every scored metric: the relative gap is a\n", "property of `(link_flows, scenario)`, recomputed here by the same `Evaluator` that\n", "scores every model in the benchmark. We also recompute the analytic Braess anchor\n", "in-cell rather than quoting it: at UE the flows are (4, 2, 2, 2, 4) and every used\n", "route costs 92 (pinned in [`tests/test_braess.py`](https://github.com/UMN-Choi-Lab/TABenchmark/blob/main/tests/test_braess.py))." ] }, { "cell_type": "code", "execution_count": 4, "id": "3533b714", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:45:05.017197Z", "iopub.status.busy": "2026-07-21T13:45:05.016996Z", "iopub.status.idle": "2026-07-21T13:45:05.037997Z", "shell.execute_reply": "2026-07-21T13:45:05.037266Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "certified relative gap : -2.060e-16\n", "feasible : 1\n", "Beckmann objective : 386.000008\n", "route time (TSTT/D) : 92.000000 (analytic UE: 92)\n", "checkpoints certified : 50 (first gap 1.912e-01, last -2.060e-16)\n" ] } ], "source": [ "evaluator = Evaluator(scenario)\n", "metrics = evaluator.evaluate(final.link_flows)\n", "\n", "certified_gap = metrics[\"relative_gap\"]\n", "print(f\"certified relative gap : {certified_gap:.3e}\")\n", "print(f\"feasible : {metrics['feasible']:.0f}\")\n", "print(f\"Beckmann objective : {metrics['beckmann_objective']:.6f}\")\n", "\n", "# Route-based gradient projection reaches machine precision on Braess in a handful of\n", "# checkpoints — the payoff of equalizing route costs directly.\n", "assert metrics[\"feasible\"] == 1.0\n", "assert abs(certified_gap) < 1e-10\n", "\n", "# Honesty diff (P1): this white box's self-report must match the certificate.\n", "assert np.isclose(final.self_report[\"relative_gap\"], certified_gap, rtol=1e-9, atol=1e-12)\n", "\n", "# Analytic anchor, recomputed in-cell.\n", "ref_flows = np.array([4.0, 2.0, 2.0, 2.0, 4.0])\n", "assert evaluator.evaluate(ref_flows)[\"relative_gap\"] < 1e-6\n", "assert np.allclose(final.link_flows, ref_flows, atol=1e-4)\n", "route_time = metrics[\"tstt\"] / scenario.demand.total\n", "print(f\"route time (TSTT/D) : {route_time:.6f} (analytic UE: 92)\")\n", "assert abs(route_time - 92.0) < 1e-3\n", "\n", "# Certify EVERY checkpoint the same way — the trace feeds the visual below.\n", "trace_gaps = [\n", " evaluator.evaluate(c.link_flows)[\"relative_gap\"] for c in bundle.trace.checkpoints\n", "]\n", "print(f\"checkpoints certified : {len(trace_gaps)} \"\n", " f\"(first gap {trace_gaps[0]:.3e}, last {trace_gaps[-1]:.3e})\")" ] }, { "cell_type": "markdown", "id": "cedd69dc", "metadata": {}, "source": [ "## Visualize\n", "\n", "Both figures come from `tabench.viz`, the house visualizer — one visual style across\n", "every tutorial, every plotted number certified above. Left/top: the certified\n", "equilibrium link flows on the Braess diamond. Right/bottom: the emitted flows against\n", "the analytic UE recomputed in the previous cell — points on the `y = x` guide mean\n", "the solver reproduced the certified equilibrium link-for-link." ] }, { "cell_type": "code", "execution_count": 5, "id": "be7feba0", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:45:05.041523Z", "iopub.status.busy": "2026-07-21T13:45:05.041105Z", "iopub.status.idle": "2026-07-21T13:45:05.337394Z", "shell.execute_reply": "2026-07-21T13:45:05.336473Z" } }, "outputs": [ { "data": { "image/png": "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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": [ "# Certified equilibrium flows on the network (house style via tabench.viz).\n", "display(viz.plot_network_flows(net, final.link_flows))\n", "\n", "# Emitted flows vs the analytic UE recomputed above (off-diagonal == disagreement).\n", "display(viz.plot_flow_scatter((\"analytic UE\", ref_flows), {\"gp\": final.link_flows}))" ] }, { "cell_type": "markdown", "id": "3d27cd73", "metadata": {}, "source": [ "## Takeaways & pointers\n", "\n", "- **Certified, not self-reported.** The gap above came from `Evaluator`, recomputed\n", " from the emitted flows here; the self-report was only diffed against it.\n", "- **Route space pays.** Equalizing per-OD route costs reaches machine precision far faster than link-based Frank–Wolfe — at the cost of storing route sets.\n", "- **Where next.** the bush-based family it precedes: [`oba`](07-oba.ipynb) · [`algb`](08-algb.ipynb) · [`tapas`](09-tapas.ipynb); the link-based methods: [`fw`](03-fw.ipynb) · [`bfw`](05-bfw.ipynb); the lineage in the\n", " [model compendium](../../docs/MODELS.md); the full matrix via `run_experiment(...)`\n", " as in `demos/demo_quickstart.py`." ] } ], "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": "static", "unit": "gp" } }, "nbformat": 4, "nbformat_minor": 5 }