{ "cells": [ { "cell_type": "markdown", "id": "29365a7a", "metadata": {}, "source": [ "# `vi-asym` — Asymmetric variational-inequality UE (Dafermos 1980 / Smith 1979)\n", "\n", "**What.** When link costs are non-separable and *asymmetric* — `t(v) = t_BPR(v) + C v`\n", "with `C ≠ Cᵀ` — no Beckmann potential exists, so the equilibrium is defined only by the\n", "variational inequality `⟨t(v*), v − v*⟩ ≥ 0`. `vi-asym` solves it by Dafermos\n", "diagonalization (freeze the coupling, solve the separable UE by Frank–Wolfe, repeat)\n", "(`[dafermos1980traffic]`, [docs/REFERENCES.md](../../docs/REFERENCES.md)).\n", "\n", "**Why it is in the benchmark.** It is the VI branch beyond optimization (ADR-011): the\n", "equilibrium is a flow no Beckmann/Frank–Wolfe solver can reach. See the\n", "[model compendium](../../docs/MODELS.md) and\n", "[docs/ARCHITECTURE.md](../../docs/ARCHITECTURE.md) (P1).\n", "\n", "**Scope.** Runs on the built-in asymmetric two-route anchor (demand 10, c13 = 0.5,\n", "c31 = 0.2) and certifies the VI residual." ] }, { "cell_type": "markdown", "id": "a4a68def", "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": "3aa8ed4c", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:45:57.849957Z", "iopub.status.busy": "2026-07-21T13:45:57.849329Z", "iopub.status.idle": "2026-07-21T13:45:59.843656Z", "shell.execute_reply": "2026-07-21T13:45:59.842700Z" } }, "outputs": [], "source": [ "# Setup. `vi-asym` 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", " AsymmetricVIModel,\n", " Budget,\n", " Evaluator,\n", " RngBundle,\n", " Trace,\n", " vi_two_route_scenario,\n", " viz,\n", ")" ] }, { "cell_type": "markdown", "id": "76acf711", "metadata": {}, "source": [ "## The scenario\n", "\n", "Two disjoint 2-link routes whose congestible legs interact ASYMMETRICALLY\n", "(C[1,3] = 0.5 ≠ 0.2 = C[3,1]), so no Beckmann potential exists. The VI equilibrium is\n", "`f_A* = (1 + (1−c13)·D)/(2 − c13 − c31) = 4.6154`, distinct from the plain-UE 5.5.\n", "Content-hashed (P2)." ] }, { "cell_type": "code", "execution_count": 2, "id": "e60934a3", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:45:59.847965Z", "iopub.status.busy": "2026-07-21T13:45:59.847733Z", "iopub.status.idle": "2026-07-21T13:45:59.852808Z", "shell.execute_reply": "2026-07-21T13:45:59.851965Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "scenario : vi-tworoute\n", "content hash : b1c6f69a522efb00…\n", "total demand : 10.0\n", "link_interaction set: True (asymmetric -> no potential)\n" ] } ], "source": [ "scenario = vi_two_route_scenario()\n", "net = scenario.network\n", "\n", "print(f\"scenario : {scenario.name}\")\n", "print(f\"content hash : {scenario.content_hash()[:16]}…\")\n", "print(f\"total demand : {scenario.demand.total}\")\n", "print(f\"link_interaction set: {scenario.link_interaction is not None} (asymmetric -> no potential)\")" ] }, { "cell_type": "markdown", "id": "0e73a4b8", "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": "6fa4282c", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:45:59.856803Z", "iopub.status.busy": "2026-07-21T13:45:59.856418Z", "iopub.status.idle": "2026-07-21T13:45:59.878925Z", "shell.execute_reply": "2026-07-21T13:45:59.878258Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "model : vi-asym\n", "emitted flows : [4.615385 4.615385 5.384615 5.384615]\n", "self-reported resid: 3.625e-11 (VI residual, provenance only)\n" ] } ], "source": [ "model = AsymmetricVIModel()\n", "bundle = model.solve(scenario, Budget(iterations=100), RngBundle(0), Trace())\n", "\n", "final = bundle.final\n", "print(f\"model : {model.name}\")\n", "print(f\"emitted flows : {np.round(final.link_flows, 6)}\")\n", "print(f\"self-reported resid: {final.self_report['relative_gap']:.3e} (VI residual, provenance only)\")" ] }, { "cell_type": "markdown", "id": "11cda388", "metadata": {}, "source": [ "## Certify (P1)\n", "\n", "The scored quantity is the **VI residual** — the normalized relative gap evaluated at\n", "the *asymmetric* cost (a VI gap needs no potential, so the harness reuses the\n", "relative-gap machinery with the asymmetric cost map). It is 0 iff v solves the VI.\n", "`beckmann_objective` is NaN (no potential exists). We recompute the closed-form anchor." ] }, { "cell_type": "code", "execution_count": 4, "id": "73f8a6e9", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:45:59.882639Z", "iopub.status.busy": "2026-07-21T13:45:59.882342Z", "iopub.status.idle": "2026-07-21T13:45:59.888424Z", "shell.execute_reply": "2026-07-21T13:45:59.887699Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "certified VI residual : 3.625e-11\n", "feasible : 1\n", "VI equilibrium f_A* : 4.6154 (recomputed; plain-UE would be 5.5)\n" ] } ], "source": [ "evaluator = Evaluator(scenario)\n", "metrics = evaluator.evaluate(final.link_flows)\n", "residual = metrics[\"relative_gap\"]\n", "print(f\"certified VI residual : {residual:.3e}\")\n", "print(f\"feasible : {metrics['feasible']:.0f}\")\n", "\n", "assert metrics[\"feasible\"] == 1.0\n", "assert abs(residual) < 1e-8\n", "\n", "# Honesty diff (P1).\n", "assert np.isclose(final.self_report[\"relative_gap\"], residual, rtol=1e-6, atol=1e-9)\n", "\n", "# Analytic anchor RECOMPUTED: f_A* = (1 + (1-c13) D) / (2 - c13 - c31).\n", "demand = scenario.demand.total\n", "c13, c31 = 0.5, 0.2\n", "f_a = (1.0 + (1.0 - c13) * demand) / (2.0 - c13 - c31)\n", "ref_flows = np.array([f_a, f_a, demand - f_a, demand - f_a])\n", "print(f\"VI equilibrium f_A* : {f_a:.4f} (recomputed; plain-UE would be {0.5*(demand+1):.1f})\")\n", "assert np.allclose(final.link_flows, ref_flows, atol=1e-3)\n", "assert not np.isclose(f_a, 0.5 * (demand + 1.0)) # the asymmetry genuinely shifts it" ] }, { "cell_type": "markdown", "id": "d65cc877", "metadata": {}, "source": [ "## Visualize\n", "\n", "Both figures come from `tabench.viz`. Left/top: the asymmetric-VI link flows.\n", "Right/bottom: the emitted flows against the recomputed VI equilibrium — a flow no\n", "Beckmann/Frank–Wolfe solver reaches, because the cost has no potential." ] }, { "cell_type": "code", "execution_count": 5, "id": "96a1a619", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:45:59.892561Z", "iopub.status.busy": "2026-07-21T13:45:59.891934Z", "iopub.status.idle": "2026-07-21T13:46:00.174328Z", "shell.execute_reply": "2026-07-21T13:46:00.173382Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAAHXCAYAAAAvA1ptAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABIPklEQVR4nO3dd3hUVf4G8Hd6T0IaJYUOShFwlRKau9KWrvQmAoog+0NxLYiAWBB20S0KiIgKIqjUBWywovSmojRBXUBCBNITkpk7/f7+GDJJDGUmmeROeT/Pk8fMzJ17vzmGvHPuOfdcmdPpEEFERBSh5FIXQEREJCUGIRERRTQGIRERRTQGIRERRTQGIRERRTQGIRERRTQGIRERRTQGIRERRTQGIRERRTQGIVElzZw5E1OnTvVp2zVr1qBLly7VXFHlrFy5Cs2aNUe9ekk4duyY1OUQ1Til1AUQkXQcDgeeeeYZbN68CWlpaVKXQyQJ9giJwpTT6YQo3nwp4czMTFitVrRo0aJSx3A4HJV6H1EwYRBS2GrdujVee+0fuOeeP6Ju3XoYMmQo8vLy8cQTf0VqairatbsThw8f9m5fVFSE6dMfQ7NmzdGsWXM8/vgMmM1m7+v79+9Hp05pqFcvCWPGjEVRUXG54507dx4jRoxAo0aN0apVKyxatAhut/uWdS5ZsgT9+w8o99zGjZtw1113AwB++OEH3HtvDyQnp6Bhw0YYMWLEDfcVHR2D5cuXo2PHTqhbtx6Ki4tvWNexY8dw993tAQAtWrREmzZtAQDFxcV48smn0LJlKzRu3ASPPPIICgsLAQAXLlxAdHQMPvjgA7Rt2w63397CW2P//v1Rv34DtG3bDitXrvLWtGDBAowYMQJPPvkUUlNT0bJlK2zcuMn7utvtxrJly3DXXXcjKSkZ7drdiS+//BIAIIqi97XU1FT069cPP/300y3blMgfDEIKa5s3b8IHH6zGmTOn8dtvv6FHjx64557uOH/+PIYNG4oZM2Z4t505cybOnTuHQ4cO4uDBA/jll5/x7LOzAAD5+QUYNWoUHn74YaSnX8DYsWOwbt0673stFgsGDRqI7t2748yZ0/j888+xceMmfPDBB7escdiwYTh06BAyMjK8z3388cfewHvqqafRp08fpKdfwJkzpzF9+vSb7m/9+g3YvHkTMjIuQqFQ3LCuNm3a4NChgwCAH388hWPHfgAATJv2F+Tn52P//n04fvwYHA4nnnrqqXLH+Pzzz7Fr19c4fvwYMjMzMXjwfZg4cRLOnTuLtWvXYMGCBdi1a7d3+507v0JaWhrOnz+P2bOfw/Tp01FUVAQAWL58OZYufRNvv/02MjIuYuvWLUhJSQEArFjxDlavXo2PP/4I586dw4ABAzBixEjY7fZbtiuRrxiEFNYmTpyE5ORkREdHo2fPnoiNjcXAgQOhUChw//3348cfT8Nut8PtdmPduvWYN+95xMbGIi4uDnPnzsVHH30Et9uN7du/QJ06dTFx4gQolUr8+c9/Rrdu3bzH2b59B6KjY/Doo49CrVYjJSUFU6ZMwfr1G25ZY2JiIu655x6sW7ceAJCdnY2vv/4aI0d6glClUuLixYu4fPkyNBoNOnfufNP9PfbYdNStWxcajcbvunJycrB161a8+uqriImJgcFgwHPPzcKmTZvhcrm82z3zzDOIiYmBXq/HRx99jM6d03D//fdBoVCgRYsWGDNmDNavX+/dvk2bNt7XR470BNn//ncWAPDOO+/i2Wdnol27tpDJZEhJSUHz5s0BACtWrMCsWbPQuHFjKJVKTJkyBVarFd9+++0t25XIV5wsQ2EtMTHB+71eryv3WKfTQRRFWCwW2O122O12pKamel9v0KABbDYbcnNzcfnyFW8vpURKSgpsNisAID09HadPny73frdbRFJSkk91jhw5EosWLcITT8zAhg0b0KFDe+/xFi9egr/9bSG6d78HMTExmDz5YUyePPmG+0pOTvZ+729dFy6kw+12o02bO8o9L5fLkZmZWeYYpW2Rnp6OHTv+W+4YLpcbnTp18j6uXTvR+71MJoNOp0VxsadHePHiRTRu3Pi69aSnp2Py5EegUJR+ZrfbHbh06dL1f3iiSmAQEgGIj4+HWq1Geno6EhM9f7TT09Oh0WgQFxeHunXr4OLFi+Xek5GRgYSEeABAUlIS2rZti507v6zU8fv164sZM2bg++9/wEcffYyHHprkfa1Ro4Z46623IIoiDh06hEGDBuPuu9ujXbu2192XXF4aGv7WlZycBLlcjjNnzkCv11d4/cKFC9eOISt3jP79++O999716Ri/l5KSgnPnzqF9+/YVXktKSsLChQvQo0ePSu2byBc8NUoET3gMGzYUL774EvLy8pGXl4cXXngRI0aM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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(viz.plot_network_flows(net, final.link_flows))\n", "display(viz.plot_flow_scatter((\"asymmetric-VI UE (analytic)\", ref_flows), {\"vi-asym\": final.link_flows}))" ] }, { "cell_type": "markdown", "id": "b954da3e", "metadata": {}, "source": [ "## Takeaways & pointers\n", "\n", "- **A VI, not an optimization.** The residual is a genuine VI gap (no Beckmann\n", " potential); the self-report was only diffed against the certificate.\n", "- **The asymmetry bites.** f_A* = 4.6154 ≠ the plain-UE 5.5 — a flow no potential-\n", " minimizing solver can reach.\n", "- **Where next.** The separable-cost UE: [`bfw`](05-bfw.ipynb); the multiclass VI:\n", " [`multiclass`](18-multiclass.ipynb); ADR-011 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": "static", "unit": "vi-asym" } }, "nbformat": 4, "nbformat_minor": 5 }