{ "cells": [ { "cell_type": "markdown", "id": "41863308", "metadata": {}, "source": [ "# `dtd-horowitz` — Horowitz's (1984) cost-smoothing SUE dynamics\n", "\n", "**What.** Travellers carry an exponentially-smoothed perceived link-cost vector p, logit-load at p, and update p ← (1−w) p + w t(v) toward experienced costs. The rest point is the logit SUE.\n", "\n", "**Why it is in the benchmark.** Its distinctive property is a STABILITY THRESHOLD: the constant-weight smoothing map is a stable attractor only below w* ≈ 0.81 on this anchor; above it (w=1, the naive current-cost model) it settles into a period-2 limit cycle — the instability the model exists to exhibit, so no damping is applied. See the\n", "[model compendium](../../docs/MODELS.md) and the certificate design in\n", "[docs/ARCHITECTURE.md](../../docs/ARCHITECTURE.md) (P1).\n", "\n", "**Scope.** Runs the process on a built-in scenario and certifies the result; it does\n", "not benchmark day-to-day models against each other. Reference: Horowitz, J.L. (1984), *Transportation Research Part B* 18(1).\n", "\n", "**Canon.** `[horowitz1984stability]`, [docs/REFERENCES.md](../../docs/REFERENCES.md) / [docs/references.bib](../../docs/references.bib)." ] }, { "cell_type": "markdown", "id": "afc16a96", "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 (the per-day gap/residual,\n", "the Lyapunov value) are shown only as provenance and diffed against the certificate,\n", "exactly as the harness treats them ([README](../../README.md), *Certified, not\n", "self-reported*)." ] }, { "cell_type": "code", "execution_count": 1, "id": "979ca888", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:46:32.851695Z", "iopub.status.busy": "2026-07-21T13:46:32.851348Z", "iopub.status.idle": "2026-07-21T13:46:34.771087Z", "shell.execute_reply": "2026-07-21T13:46:34.770105Z" } }, "outputs": [], "source": [ "# Setup. `dtd-horowitz` is a core day-to-day model: a plain `pip install -e .` suffices —\n", "# no 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", " CostSmoothingSUEModel,\n", " Evaluator,\n", " RngBundle,\n", " Trace,\n", " two_route_scenario,\n", " viz,\n", ")" ] }, { "cell_type": "markdown", "id": "50d225f3", "metadata": {}, "source": [ "## The scenario\n", "\n", "The built-in two-route logit-SUE anchor (demand 4, dispersion θ=0.5): route A cost 2+f_A,\n", "route B cost 1.5+2 f_B. Its rest point is the binary-logit stochastic user equilibrium,\n", "recomputed analytically in the certify cell — NOT the deterministic Wardrop UE." ] }, { "cell_type": "code", "execution_count": 2, "id": "893e9907", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:46:34.776092Z", "iopub.status.busy": "2026-07-21T13:46:34.775701Z", "iopub.status.idle": "2026-07-21T13:46:34.781188Z", "shell.execute_reply": "2026-07-21T13:46:34.780459Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "scenario : tworoute\n", "content hash : 9b98e58b339b702f…\n", "links : 4 (tail→head: 1->3, 3->2, 1->4, 4->2)\n", "total demand : 4.0\n", "task : logit SUE, θ=0.5\n" ] } ], "source": [ "scenario = two_route_scenario()\n", "net = scenario.network\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}\")\n", "print(\"task : logit SUE, θ=0.5\")" ] }, { "cell_type": "markdown", "id": "9a6217d8", "metadata": {}, "source": [ "## Run the adjustment process\n", "\n", "The model contract ([CONTRIBUTING.md](../../CONTRIBUTING.md)): a model receives\n", "`(scenario, budget, rng, trace)` and records one checkpoint per day — here a *budget\n", "iteration is a day*. Everything the model writes into `self_report` (the per-day\n", "gap/residual, the Lyapunov value) is provenance, not a score." ] }, { "cell_type": "code", "execution_count": 3, "id": "b7dcfc94", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:46:34.785463Z", "iopub.status.busy": "2026-07-21T13:46:34.785298Z", "iopub.status.idle": "2026-07-21T13:46:35.085032Z", "shell.execute_reply": "2026-07-21T13:46:35.084478Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "model : dtd-horowitz\n", "days simulated : 500 (1000 shortest-path calls)\n", "emitted flows : [2.299096 2.299096 1.700904 1.700904]\n", "self-reported residual: 3.331e-16 (provenance only)\n" ] } ], "source": [ "bundle_trace = Trace()\n", "model = CostSmoothingSUEModel(smoothing_weight=0.3)\n", "# Run the full horizon (no early-stop): the SUE residual settles in ~15 days but the\n", "# perceived-cost state keeps relaxing, and its vanishing is part of what we certify.\n", "model.solve(scenario, Budget(iterations=500), RngBundle(0), bundle_trace)\n", "final = bundle_trace.final\n", "print(f\"model : {model.name}\")\n", "print(f\"days simulated : {final.coords.iterations} \"\n", " f\"({final.coords.sp_calls} shortest-path calls)\")\n", "print(f\"emitted flows : {np.round(final.link_flows, 6)}\")\n", "print(f\"self-reported residual: {final.self_report['sue_fixed_point_residual']:.3e} (provenance only)\")" ] }, { "cell_type": "markdown", "id": "ee07e30a", "metadata": {}, "source": [ "## Certify (P1) — the SUE fixed point AND the descent\n", "\n", "The harness recomputes the ADR-001 Dial-STOCH residual from the emitted flows. Certified\n", "here: (1) the terminal flows are the logit SUE — residual → 0 with the analytic binary-\n", "logit anchor recomputed in-cell, while the *deterministic* UE gap stays positive (a\n", "descriptive column, like `sue-msa`); (2) the model's Lyapunov / provenance signature." ] }, { "cell_type": "code", "execution_count": 4, "id": "e443d92f", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:46:35.089417Z", "iopub.status.busy": "2026-07-21T13:46:35.089255Z", "iopub.status.idle": "2026-07-21T13:46:35.330622Z", "shell.execute_reply": "2026-07-21T13:46:35.329899Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "certified SUE residual : 3.331e-16\n", "feasible : 1\n", "UE relative gap : 0.056 (stays >0 — logit SUE ≠ deterministic UE)\n", "analytic logit SUE f_A : 2.299096\n", "perceived-cost gap (provenance only) : 6.25 → 1.78e-15\n", "stability threshold w* : 0.8109 (Phi'(f*)=-1.4665)\n", "w=1.0 terminal residual: 3.323 (period-2 limit cycle, not a fixed point)\n" ] } ], "source": [ "from scipy.optimize import brentq\n", "evaluator = Evaluator(scenario)\n", "metrics = evaluator.evaluate(final.link_flows)\n", "residual = metrics[\"sue_fixed_point_residual\"]\n", "print(f\"certified SUE residual : {residual:.3e}\")\n", "print(f\"feasible : {metrics['feasible']:.0f}\")\n", "print(f\"UE relative gap : {metrics['relative_gap']:.3f} (stays >0 — logit SUE ≠ deterministic UE)\")\n", "assert metrics[\"feasible\"] == 1.0\n", "assert residual < 1e-5\n", "assert metrics[\"relative_gap\"] > 0.01 # descriptive column: not the deterministic UE\n", "\n", "# Analytic binary-logit SUE anchor, recomputed in-cell (θ=0.5, demand 4): the root of\n", "# f_A = D / (1 + exp(θ(c_A − c_B))), c_A = 2 + f_A, c_B = 1.5 + 2(4 − f_A).\n", "def _resid(f_a):\n", " c_a, c_b = 2.0 + f_a, 1.5 + 2.0 * (4.0 - f_a)\n", " return f_a - 4.0 / (1.0 + np.exp(0.5 * (c_a - c_b)))\n", "f_a = brentq(_resid, 0.0, 4.0, xtol=1e-12)\n", "ref_flows = np.array([f_a, f_a, 4.0 - f_a, 4.0 - f_a])\n", "print(f\"analytic logit SUE f_A : {f_a:.6f}\")\n", "assert np.allclose(final.link_flows, ref_flows, atol=1e-3)\n", "# Honesty (P1): the model self-reports the SAME residual the harness recomputes.\n", "assert np.isclose(\n", " final.self_report[\"sue_fixed_point_residual\"], residual, rtol=1e-9, atol=1e-12\n", ")\n", "# The perceived-cost gap ||p − t(v)||₁ vanishes at rest. PROVENANCE ONLY -- the\n", "# certified Evaluator has no perceived-cost counterpart (p is internal model state,\n", "# not a certifiable artifact); the SUE fixed point itself is what is certified above.\n", "pgap = [s.self_report[\"perceived_cost_gap\"] for s in bundle_trace]\n", "assert max(pgap) > 1.0 and pgap[-1] < 1e-6\n", "print(f\"perceived-cost gap (provenance only) : {max(pgap):.3g} → {pgap[-1]:.2e}\")\n", "\n", "# The stability threshold w* ≈ 0.81 named in the header, recomputed (not quoted):\n", "# forward-Euler stability of the scalar day map at the fixed point f* requires\n", "# w < 2/(1-Phi'(f*)), where Phi is the logit response map f_A -> D/(1+exp(theta*\n", "# (c_A(f_A)-c_B(f_A)))) and Phi' its derivative at f* (chain rule through\n", "# c_A-c_B = 3 f_A - 7.5, dz/df_A = theta*3).\n", "z_star = 0.5 * (3.0 * f_a - 7.5)\n", "phi_prime = -4.0 * 3.0 * 0.5 * np.exp(z_star) / (1.0 + np.exp(z_star)) ** 2\n", "w_star = 2.0 / (1.0 - phi_prime)\n", "print(f\"stability threshold w* : {w_star:.4f} (Phi'(f*)={phi_prime:.4f})\")\n", "assert 0.80 < w_star < 0.82 # brackets the w=0.5 stable / w=1.0 unstable runs below\n", "\n", "# DISTINCTIVE: the constant-weight smoothing map is stable only below w* ≈ 0.81 on this\n", "# anchor. At w = 1.0 (Horowitz's naive current-cost model) it settles into a period-2\n", "# LIMIT CYCLE — the certified residual stays O(1). No damping is added; the instability\n", "# is what the model exists to exhibit.\n", "unstable = Trace()\n", "CostSmoothingSUEModel(smoothing_weight=1.0).solve(\n", " scenario, Budget(iterations=400), RngBundle(0), unstable\n", ")\n", "res_u = [s.self_report[\"sue_fixed_point_residual\"] for s in unstable]\n", "fa_tail = np.array([s.link_flows[0] for s in unstable])[-50:]\n", "print(f\"w=1.0 terminal residual: {res_u[-1]:.3f} (period-2 limit cycle, not a fixed point)\")\n", "assert res_u[-1] > 1.0\n", "assert fa_tail.max() - fa_tail.min() > 1.0 # a genuine oscillation band" ] }, { "cell_type": "markdown", "id": "3e8d105a", "metadata": {}, "source": [ "## Visualize\n", "\n", "Both figures come from `tabench.viz`, the house visualizer — every plotted number is one\n", "certified above. Left/top: the certified terminal link flows on the network. Right/bottom:\n", "the emitted flows against the fixed point recomputed in the certify cell — points on the\n", "`y = x` guide mean the day-to-day process settled on it link-for-link." ] }, { "cell_type": "code", "execution_count": 5, "id": "f0dfd308", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:46:35.334251Z", "iopub.status.busy": "2026-07-21T13:46:35.334041Z", "iopub.status.idle": "2026-07-21T13:46:35.591383Z", "shell.execute_reply": "2026-07-21T13:46:35.590518Z" } }, "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 terminal 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 logit SUE recomputed above (off-diagonal == not settled).\n", "display(viz.plot_flow_scatter((\"logit SUE\", ref_flows), {\"dtd-horowitz\": final.link_flows}))" ] }, { "cell_type": "markdown", "id": "4f125aa6", "metadata": {}, "source": [ "## Takeaways & pointers\n", "\n", "- **Certified, not self-reported.** The residual came from `Evaluator` at w=0.3 (stable) and, in contrast, at w=1.0 (a certified O(1) limit cycle) — both scored by the identical certificate.\n", "- **The day-to-day signature is the point.** A UE/SUE *solver* gives you the fixed\n", " point; a day-to-day *model* gives you the adjustment path to it.\n", "- **Where next.** the route-swap SUE process [`dtd-swap-sue`](02-dtd-swap-sue.ipynb); the stochastic sampling process [`dtd-stochastic`](06-dtd-stochastic.ipynb); the lineage 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": "day-to-day", "unit": "dtd-horowitz" } }, "nbformat": 4, "nbformat_minor": 5 }