{ "cells": [ { "cell_type": "markdown", "id": "724f5a22", "metadata": {}, "source": [ "# `cfw` — Conjugate Frank–Wolfe (Mitradjieva & Lindberg 2013) on the Braess network\n", "\n", "**What.** CFW deflects Frank–Wolfe's search direction: instead of the raw all-or-nothing point it uses a convex combination of the AON point and the previous search point, chosen conjugate with respect to the diagonal Beckmann Hessian. That kills FW's zig-zag tail while keeping link-only `O(m)` storage — no path or bush enumeration.\n", "\n", "**Why it is in the benchmark.** It is the conjugate rung between `fw` and `bfw` on the convergence ladder (`[mitradjieva2013stiff]`). 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: `[mitradjieva2013stiff]` ([docs/REFERENCES.md](../../docs/REFERENCES.md))." ] }, { "cell_type": "markdown", "id": "7789552c", "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": "56288f92", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:44:52.776729Z", "iopub.status.busy": "2026-07-21T13:44:52.776575Z", "iopub.status.idle": "2026-07-21T13:44:54.822783Z", "shell.execute_reply": "2026-07-21T13:44:54.821673Z" } }, "outputs": [], "source": [ "# Setup. `cfw` 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", " ConjugateFrankWolfeModel,\n", " Budget,\n", " Evaluator,\n", " RngBundle,\n", " Trace,\n", " braess_scenario,\n", " viz,\n", ")" ] }, { "cell_type": "markdown", "id": "caa0555e", "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": "6212603e", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:44:54.827412Z", "iopub.status.busy": "2026-07-21T13:44:54.826991Z", "iopub.status.idle": "2026-07-21T13:44:54.832735Z", "shell.execute_reply": "2026-07-21T13:44:54.831923Z" } }, "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": "057cbe44", "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": "25cb5535", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:44:54.836940Z", "iopub.status.busy": "2026-07-21T13:44:54.836449Z", "iopub.status.idle": "2026-07-21T13:44:54.843215Z", "shell.execute_reply": "2026-07-21T13:44:54.842430Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "model : cfw\n", "budget spent : 3 iterations, 4 shortest-path calls\n", "checkpoints : 3\n", "emitted flows : [4. 2. 2. 2. 4.]\n", "self-reported gap: -2.060e-16 (provenance only)\n" ] } ], "source": [ "model = ConjugateFrankWolfeModel()\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": "4f88f158", "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)).\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "ca84b72a", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:44:54.847295Z", "iopub.status.busy": "2026-07-21T13:44:54.846578Z", "iopub.status.idle": "2026-07-21T13:44:54.855083Z", "shell.execute_reply": "2026-07-21T13:44:54.854321Z" } }, "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 : 3 (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", "# One conjugate deflection reaches machine precision on Braess in a handful of\n", "# checkpoints — contrast fw's long tail (checkpoint counts printed in each).\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_iters = [c.coords.iterations for c in bundle.trace.checkpoints]\n", "trace_gaps = [evaluator.evaluate(c.link_flows)[\"relative_gap\"] for c in bundle.trace.checkpoints]\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": "8cfcc825", "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": "63f055b1", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:44:54.858968Z", "iopub.status.busy": "2026-07-21T13:44:54.858463Z", "iopub.status.idle": "2026-07-21T13:44:55.159610Z", "shell.execute_reply": "2026-07-21T13:44:55.158523Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAc0AAAHXCAYAAADeCAHgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABLq0lEQVR4nO3dd3xT5eIG8OckTdKku01baGmhTC+KgLdA2agFKoLIErc/FZDhvg7cijIU0XuVUQG5LpQlCA4EcVyGlCkiCF4VL9u2aZs2bVOy3t8ftaETkjbNyXi+n08/H5KcJA/H2If3vG/OkWw2qwARERFdlELuAERERP6CpUlEROQiliYREZGLWJpEREQuYmkSERG5iKVJRETkIpYmERGRi1iaRERELmJpEhERuYilSeQF06dPx5QpU1zadvny5ejXr18zJ2qcd955Fx07dkJSUjJ+/PFHueMQeV2I3AGIyD9YrVY8/vjjWLduLfr06SN3HCJZcKRJRLDZbBDiwqehzs3NRUVFBTp37tyo97BarY16HpEvYWkSAejSpQvmzXsNgwZdiZYtkzBmzFgUFhbh4Yf/gdTUVHTvfgV27drl3N5kMuH++x9Ax46d0LFjJzz44EMoKytzPr5jxw707t0HSUnJuOWWW2EyldZ4v2PH/sD48ePRtm07XHbZZZg7dy4cDsdFcy5YsADDh4+ocd/HH69FenoPAMCBAwdw9dWZaNUqBWlpbTF+/PgGXysqKhqLFy9GRkZvtGyZhNLS0gZz/fjjj+jRoycAoHPnS9G1azcAQGlpKR555FFceullaNeuPe655x4UFxcDAI4fP46oqGh88MEH6NatO/72t87OjMOHD0fr1m3QrVt3vPPOu85Ms2fPxvjx4/HII48iNTUVl156GT7+eK3zcYfDgezsbKSn90Bycit0734FtmzZAgAQQjgfS01NxbXXXotffvnlovuUyB0sTaK/rFu3Fh988D6OHj2C06dPIzMzE4MGDcQff/yBcePG4qGHHnJuO336dBw7dgw5OTuxc+f3+PXX/+KJJ54EABQVGXHTTTdh4sSJOHHiOG699RasWrXK+dzy8nKMHHkdBg4ciKNHj2Djxo34+OO1+OCDDy6acdy4ccjJycGpU6ec961cudJZjo8++hiysrJw4sRxHD16BPfff/8FX2/16jVYt24tTp06CaVS2WCurl27IidnJwDg558P48cfDwAApk27F0VFRdixYzsOHvwRVqsNjz76aI332LhxI7777lscPPgjcnNzcf31o3DXXXfj2LHf8eGHyzF79mx8991/nNt//fU36NOnD/744w88/fRTuP/++2EymQAAixcvxsKFi7BkyRKcOnUSGzasR0pKCgBg6dK38f7772PlyhU4duwYRowYgfHjb4TFYrnofiVyFUuT6C933XU3WrVqhaioKAwePBixsbG47rrroFQqMXr0aPz88xFYLBY4HA6sWrUazz//HGJjYxEXF4dnn30WK1asgMPhwKZNX6JFi5a46647ERISgmuuuQYDBgxwvs+mTZsRFRWNqVOnQq1WIyUlBZMnT8bq1WsumjEhIQGDBg3CqlWrAQD5+fn49ttvceONlaWpUoXg5MmTOHv2LDQaDfr27XvB13vggfvRsmVLaDQat3MZDAZs2LABr776KqKjoxEWFoannnoSa9eug91ud273+OOPIzo6GjqdDitWrETfvn0wevQoKJVKdO7cGbfccgtWr17t3L5r167Ox2+8sbL0fvvtdwDA228vwxNPTEf37t0gSRJSUlLQqVMnAMDSpUvx5JNPol27dggJCcHkyZNRUVGBvXv3XnS/ErmKC4GI/pKQEO/8s06nrXFbq9VCCIHy8nJYLBZYLBakpqY6H2/Tpg3OnTuHgoICnD37p3P0UyUlJQXnzlUAAE6cOIEjR47UeL7DIZCcnOxSzhtvvBFz587Fww8/hDVr1qBXr57O95s/fwFefnkOBg4chOjoaEyaNBGTJk1q8LVatWrl/LO7uY4fPwGHw4GuXS+vcb9CoUBubm619zi/L06cOIHNm7+q8R52uwO9e/d23k5MTHD+WZIkaLWhKC2tHGmePHkS7dq1qzfPiRMnMGnSPVAqz48FLBYrzpw5U/9fnqgRWJpEbtLr9VCr1Thx4gQSEip/wZ84cQIajQZxcXFo2bIFTp48WeM5p06dQny8HgCQnJyMbt264euvtzTq/a+9dhgeeugh/PDDAaxYsRITJtztfKxt2zS89dZbEEIgJycHI0dejx49eqJ79271vpZCcb5g3M3VqlUyFAoFjh49Cp1OV+fx48eP//UeUo33GD58OP7972UuvUdtKSkpOHbsGHr27FnnseTkZMyZMxuZmZmNem0iV/DwLJGbFAoFxo0bixkz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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), {\"cfw\": final.link_flows}))" ] }, { "cell_type": "markdown", "id": "fcb966e9", "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", "- **Conjugacy pays.** One deflected direction reaches machine precision in a handful of checkpoints where `fw` grinds — same certificate, far fewer shortest-path calls.\n", "- **Where next.** the bi-conjugate variant: [`bfw`](05-bfw.ipynb); the plain method it accelerates: [`fw`](03-fw.ipynb); the baselines: [`aon`](01-aon.ipynb) · [`msa`](02-msa.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": "cfw" } }, "nbformat": 4, "nbformat_minor": 5 }