{ "cells": [ { "cell_type": "markdown", "id": "9242c4c0", "metadata": {}, "source": [ "# `fw-elastic` — Elastic-demand user equilibrium (Florian & Nguyen 1974)\n", "\n", "**What.** Elastic demand makes the trip table respond to congestion: the realized\n", "demand of an OD pair is `d_rs = D_rs(u_rs)`, a decreasing function of that pair's\n", "equilibrium cost. `fw-elastic` solves it by the classic excess-demand (Gartner)\n", "transformation — a dummy arc absorbs unmet demand — then runs Frank–Wolfe on the\n", "augmented network (`[florian1974method]`,\n", "[docs/REFERENCES.md](../../docs/REFERENCES.md)).\n", "\n", "**Why it is in the benchmark.** It is the variable-demand branch off fixed-demand UE\n", "(ADR-005): the scored quantity gains a *realized demand* alongside the gap. 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 elastic two-route anchor (reference demand d0 = 10,\n", "linear law, u0 = 10) and certifies both the gap and the realized demand." ] }, { "cell_type": "markdown", "id": "32e2143c", "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": "1635f65b", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:45:38.379825Z", "iopub.status.busy": "2026-07-21T13:45:38.379668Z", "iopub.status.idle": "2026-07-21T13:45:40.320074Z", "shell.execute_reply": "2026-07-21T13:45:40.319411Z" } }, "outputs": [], "source": [ "# Setup. `fw-elastic` 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", " ElasticDemandFWModel,\n", " Evaluator,\n", " RngBundle,\n", " Trace,\n", " elastic_two_route_scenario,\n", " viz,\n", ")" ] }, { "cell_type": "markdown", "id": "5bccde60", "metadata": {}, "source": [ "## The scenario\n", "\n", "Two disjoint 2-link routes with **linear elastic demand**: reference demand d0 = 10\n", "(demand at zero cost), law `D(u) = d0 · max(0, 1 − u/u0)` with u0 = 10. The analytic\n", "elastic UE is rational: u = 5, f_A = 3, f_B = 2, realized demand 5. Content-hashed (P2)." ] }, { "cell_type": "code", "execution_count": 2, "id": "d0b9a212", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:45:40.324407Z", "iopub.status.busy": "2026-07-21T13:45:40.324171Z", "iopub.status.idle": "2026-07-21T13:45:40.327821Z", "shell.execute_reply": "2026-07-21T13:45:40.327393Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "scenario : elastic-tworoute\n", "content hash : 943422eda3fee142…\n", "reference demand: 10.0 (d0 = D(0), an upper bound)\n", "elastic law : linear (param u0 = 10.0)\n" ] } ], "source": [ "scenario = elastic_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\"reference demand: {scenario.demand.total} (d0 = D(0), an upper bound)\")\n", "print(f\"elastic law : {scenario.elastic_demand.form} (param u0 = {scenario.elastic_demand.param})\")" ] }, { "cell_type": "markdown", "id": "f854bcfd", "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": "b9a48221", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:45:40.332550Z", "iopub.status.busy": "2026-07-21T13:45:40.332244Z", "iopub.status.idle": "2026-07-21T13:45:40.353731Z", "shell.execute_reply": "2026-07-21T13:45:40.353316Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "model : fw-elastic\n", "emitted flows : [3. 3. 2. 2.]\n", "self-reported gap : 1.421e-16 (provenance only)\n", "self realized demand: 5.0000 (provenance only)\n" ] } ], "source": [ "model = ElasticDemandFWModel()\n", "bundle = model.solve(scenario, Budget(iterations=200), 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 gap : {final.self_report['relative_gap']:.3e} (provenance only)\")\n", "print(f\"self realized demand: {final.self_report['realized_demand']:.4f} (provenance only)\")" ] }, { "cell_type": "markdown", "id": "bf3d35df", "metadata": {}, "source": [ "## Certify (P1)\n", "\n", "Two scored quantities (ADR-005): the relative gap on the excess-demand-augmented\n", "problem, and the **realized demand** — recomputed by the harness as Σ D_rs(u_rs) from\n", "the emitted flows, never taken from the model. We recompute the analytic anchor\n", "(f_A = 3, f_B = 2, realized demand 5) in-cell." ] }, { "cell_type": "code", "execution_count": 4, "id": "a9f7d973", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:45:40.357555Z", "iopub.status.busy": "2026-07-21T13:45:40.357294Z", "iopub.status.idle": "2026-07-21T13:45:40.361994Z", "shell.execute_reply": "2026-07-21T13:45:40.361586Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "certified relative gap : 1.421e-16\n", "certified realized dem : 5.000000\n", "feasible : 1\n", "realized / reference : 5.000 / 10 (half the demand priced out by congestion)\n" ] } ], "source": [ "evaluator = Evaluator(scenario)\n", "metrics = evaluator.evaluate(final.link_flows)\n", "gap = metrics[\"relative_gap\"]\n", "realized = metrics[\"realized_demand\"]\n", "print(f\"certified relative gap : {gap:.3e}\")\n", "print(f\"certified realized dem : {realized:.6f}\")\n", "print(f\"feasible : {metrics['feasible']:.0f}\")\n", "\n", "assert metrics[\"feasible\"] == 1.0\n", "assert abs(gap) < 1e-10\n", "\n", "# Honesty diff (P1): both self-reports must match the certificate.\n", "assert np.isclose(final.self_report[\"relative_gap\"], gap, rtol=1e-9, atol=1e-12)\n", "assert np.isclose(final.self_report[\"realized_demand\"], realized, rtol=1e-9, atol=1e-9)\n", "\n", "# Analytic anchor RECOMPUTED: elastic UE f_A=3, f_B=2, realized demand 5 of d0=10.\n", "ref_flows = np.array([3.0, 3.0, 2.0, 2.0])\n", "assert np.allclose(final.link_flows, ref_flows, atol=1e-4)\n", "assert abs(realized - 5.0) < 1e-6\n", "print(f\"realized / reference : {realized:.3f} / {scenario.demand.total:.0f} (half the demand priced out by congestion)\")" ] }, { "cell_type": "markdown", "id": "fff063e7", "metadata": {}, "source": [ "## Visualize\n", "\n", "Both figures come from `tabench.viz`. Left/top: the elastic-UE link flows. Right/bottom:\n", "the emitted flows against the analytic elastic UE — on-diagonal means the solver\n", "recovered f_A = 3, f_B = 2, and (certified separately) the realized demand 5." ] }, { "cell_type": "code", "execution_count": 5, "id": "bf8dce91", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:45:40.366203Z", "iopub.status.busy": "2026-07-21T13:45:40.365945Z", "iopub.status.idle": "2026-07-21T13:45:40.632732Z", "shell.execute_reply": "2026-07-21T13:45:40.632139Z" } }, "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": [ "display(viz.plot_network_flows(net, final.link_flows))\n", "display(viz.plot_flow_scatter((\"elastic UE (analytic)\", ref_flows), {\"fw-elastic\": final.link_flows}))" ] }, { "cell_type": "markdown", "id": "2091ed1a", "metadata": {}, "source": [ "## Takeaways & pointers\n", "\n", "- **Two certified numbers.** The gap AND the realized demand are recomputed by the\n", " harness; the self-reports were only diffed against them.\n", "- **Demand responds.** Half the reference demand is priced out by congestion — the\n", " variable-demand departure from fixed-demand UE.\n", "- **Where next.** Fixed-demand UE: [`bfw`](05-bfw.ipynb); the combined\n", " distribution+assignment step: [`evans`](14-evans.ipynb); ADR-005 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": "fw-elastic" } }, "nbformat": 4, "nbformat_minor": 5 }