{ "cells": [ { "cell_type": "markdown", "id": "0fabb3bd", "metadata": {}, "source": [ "# `bfw` — Bi-conjugate Frank–Wolfe on the Braess network\n", "\n", "**What.** `bfw` is Mitradjieva & Lindberg's (2013) bi-conjugate Frank–Wolfe solver\n", "for the deterministic user-equilibrium (UE) traffic assignment problem\n", "(`[mitradjieva2013stiff]` in the verified canon,\n", "[docs/REFERENCES.md](../../docs/REFERENCES.md) /\n", "[docs/references.bib](../../docs/references.bib)). Plain Frank–Wolfe zig-zags in its\n", "tail because one scalar step is shared by all OD pairs; BFW replaces the raw\n", "all-or-nothing search point with a convex combination of the AON point and the\n", "previous *two* search points, chosen conjugate with respect to the diagonal Beckmann\n", "Hessian — killing the tail while keeping link-only `O(m)` storage (no path or bush\n", "enumeration).\n", "\n", "**Why it is in the benchmark.** It is the workhorse of the convergence race\n", "(link-based → conjugate → path/bush-based) and the repo's default high-precision UE\n", "reference; see its entry in the [model compendium](../../docs/MODELS.md) and the\n", "certificate design in [docs/ARCHITECTURE.md](../../docs/ARCHITECTURE.md) (P1).\n", "\n", "**Scope.** This notebook runs `bfw` on the built-in Braess scenario (5 links, one OD\n", "pair, no download) and certifies the result. It does not benchmark solver families\n", "against each other — for that, see the `fw` / `cfw` / `tapas` tutorials and\n", "`demos/demo_quickstart.py`." ] }, { "cell_type": "markdown", "id": "dfbfede9", "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 — the certified relative gap, feasibility, the analytic anchor check\n", "— is recomputed live by the P1 evaluator from the flows the model emitted, in the\n", "cell where it is claimed. Model self-reports are shown only as provenance and diffed\n", "against the certificate as an honesty check, exactly as the harness treats them\n", "([README](../../README.md), *Certified, not self-reported*)." ] }, { "cell_type": "code", "execution_count": 1, "id": "df354bd7", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:44:57.874291Z", "iopub.status.busy": "2026-07-21T13:44:57.874108Z", "iopub.status.idle": "2026-07-21T13:44:59.862130Z", "shell.execute_reply": "2026-07-21T13:44:59.860923Z" } }, "outputs": [], "source": [ "# Setup. `bfw` is a core model: a plain `pip install -e .` suffices — no optional\n", "# extra, so no guard cell. (Notebooks for torch/sumo/dtalite models carry a guard\n", "# cell here that raises politely when the extra is missing.)\n", "#\n", "# The inline backend is Agg-based: figures render headlessly into the notebook, so\n", "# CI can execute tutorials without a display. NEVER matplotlib.use(\"Agg\") in-kernel\n", "# — it silently suppresses inline figure capture.\n", "%matplotlib inline\n", "import numpy as np\n", "\n", "from tabench import (\n", " BiconjugateFrankWolfeModel,\n", " Budget,\n", " Evaluator,\n", " RngBundle,\n", " Trace,\n", " braess_scenario,\n", " viz,\n", ")" ] }, { "cell_type": "markdown", "id": "9bbb960b", "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": "74b51a64", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:44:59.867133Z", "iopub.status.busy": "2026-07-21T13:44:59.866780Z", "iopub.status.idle": "2026-07-21T13:44:59.872574Z", "shell.execute_reply": "2026-07-21T13:44:59.871767Z" } }, "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": "af80a453", "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": "5be43ea8", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:44:59.876604Z", "iopub.status.busy": "2026-07-21T13:44:59.876291Z", "iopub.status.idle": "2026-07-21T13:44:59.883381Z", "shell.execute_reply": "2026-07-21T13:44:59.882587Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "model : bfw\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 = BiconjugateFrankWolfeModel()\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": "55c1ba5d", "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 — a 1975 Frank–Wolfe and a 2025 GNN share this\n", "certificate. We also recompute the analytic Braess anchor in this cell rather than\n", "quoting it: at UE the flows are (4, 2, 2, 2, 4) and every used route costs 92\n", "(pinned in [`tests/test_braess.py`](https://github.com/UMN-Choi-Lab/TABenchmark/blob/main/tests/test_braess.py) and\n", "[docs/VALIDATION.md](../../docs/VALIDATION.md))." ] }, { "cell_type": "code", "execution_count": 4, "id": "70b7d5e3", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:44:59.887411Z", "iopub.status.busy": "2026-07-21T13:44:59.887097Z", "iopub.status.idle": "2026-07-21T13:44:59.895790Z", "shell.execute_reply": "2026-07-21T13:44:59.894994Z" } }, "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", " iteration 1: certified gap 1.912e-01\n", " iteration 2: certified gap 2.125e-01\n", " iteration 3: certified gap -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", "# Equilibrium reached at solver precision, and the demand audit passed.\n", "assert metrics[\"feasible\"] == 1.0\n", "assert abs(certified_gap) < 1e-10\n", "\n", "# Honesty diff (P1): the 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: flows (4,2,2,2,4); at UE every used route\n", "# costs 92, so TSTT / demand equals the route time.\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 np.isclose(route_time, 92.0, atol=1e-4)\n", "\n", "# Certify EVERY checkpoint the same way — this trace feeds the visual below, so the\n", "# plotted flows are certificate data, not self-reports.\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", "for it, gap in zip(trace_iters, trace_gaps):\n", " print(f\" iteration {it}: certified gap {gap:.3e}\")" ] }, { "cell_type": "markdown", "id": "7df7a84f", "metadata": {}, "source": [ "## Visualize\n", "\n", "Both figures come from `tabench.viz`, the house visualizer — one visual style across\n", "every tutorial, and every plotted number is a quantity certified above. Left/top: the\n", "certified equilibrium link flows on the Braess diamond (link width and colour encode\n", "flow; the 3→4 bypass carries the paradox). Right/bottom: the emitted `bfw` flows\n", "against the analytic UE recomputed in the previous cell — every point sits on the\n", "`y = x` guide, so the solver reproduced the certified equilibrium link-for-link." ] }, { "cell_type": "code", "execution_count": 5, "id": "699be583", "metadata": { "execution": { "iopub.execute_input": "2026-07-21T13:44:59.899760Z", "iopub.status.busy": "2026-07-21T13:44:59.899306Z", "iopub.status.idle": "2026-07-21T13:45:00.189955Z", "shell.execute_reply": "2026-07-21T13:45:00.189007Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAc0AAAHXCAYAAADeCAHgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABLzklEQVR4nO3dd3xT5eIG8OckTdKku01baGmhLO9FEVDKXmoZIkOWuP2pgAz3xK0oQxHuvUqhAnJVRFmC4FUEcVyGFhREBIEroGzbpm3atE3Jen9/1IZOSNo0J+P5fj79fJrkNHk4hD68531zjmSzWQWIiIjokhRyByAiIvIXLE0iIiIXsTSJiIhcxNIkIiJyEUuTiIjIRSxNIiIiF7E0iYiIXMTSJCIichFLk4iIyEUsTSIvmD59OqZMmeLStitWrECfPn2aOFHDvPvue2jf/jIkJSXj559/ljsOkdeFyB2AiPyD1WrFU089hfXr16FXr15yxyGSBUeaRASbzQYhLn4a6pycHJSXl6NDhw4Neg2r1dqgnyPyJSxNIgAdO3bEvHnzMWDANWjePAljxoxFQUEhHn30MaSmpqJLl6uwa9cu5/YmkwkPPvgQ2re/DO3bX4aHH34EpaWlzsd37tyJnj17ISkpGbfddjtMppJqr3f8+O8YP348WrdugyuuuAJz586Fw+G4ZM7MzEwMGza82n0ff7wOXbumAwD27duH667LQIsWKUhLa43x48fX+1xRUdFYvHgxevToiebNk1BSUlJvrp9//hnp6d0AAB06XI5OnToDAEpKSvD440/g8suvQJs2bXHfffehqKgIAHDixAlERUXjgw8+QOfOXfD3v3dwZhw2bBhatmyFzp274N1333Nmmj17NsaPH4/HH38CqampuPzyK/Dxx+ucjzscDmRlZaFr13QkJ7dAly5XYevWrQAAIYTzsdTUVNxwww04cuTIJfcpkTtYmkR/Wb9+HT74YDkOHz6EM2fOICMjAwMG9Mfvv/+OcePG4pFHHnFuO336dBw/fhzZ2d/j+++/w2+//Q9PP/0MAKCw0IhbbrkFEydOxMmTJ3D77bdh9erVzp8tKyvDyJEj0L9/fxw+fAibNm3Cxx+vwwcffHDJjOPGjUN2djZOnz7tvG/VqlXOcnziiScxZMgQnDx5AocPH8KDDz540edbs2Yt1q9fh9OnT0GpVNabq1OnTsjO/h4A8OuvB/Hzz/sAANOm3Y/CwkLs3LkD+/f/DKvVhieeeKLaa2zatAnffvsN9u//GTk5ObjxxlG45557cfz4MXz44QrMnj0b3377X+f2X331NXr16oXff/8dzz33LB588EGYTCYAwOLFi7Fw4SIsWbIEp0+fwsaNG5CSkgIAWLr0HSxfvhyrVq3E8ePHMXz4cIwffzMsFssl9yuRq1iaRH+555570aJFC0RFRWHgwIGIjY3FiBEjoFQqMXr0aPz66yFYLBY4HA6sXr0GL730ImJjYxEXF4cXXngBK1euhMPhwObNX6BZs+a45567ERISguuvvx79+vVzvs7mzVsQFRWNqVOnQq1WIyUlBZMnT8aaNWsvmTEhIQEDBgzA6tVrAAB5eXn45ptvcPPNFaWpUoXg1KlTOHfuHDQaDXr37n3R53vooQfRvHlzaDQat3MZDAZs3LgRb7zxBqKjoxEWFoZnn30G69ath91ud2731FNPITo6GjqdDitXrkLv3r0wevQoKJVKdOjQAbfddhvWrFnj3L5Tp07Ox2++uaL0jh49BgB4551lePrp6ejSpTMkSUJKSgouu+wyAMDSpUvxzDPPoE2bNggJCcHkyZNRXl6OH3/88ZL7lchVXAhE9JeEhHjn9zqdttptrVYLIQTKyspgsVhgsViQmprqfLxVq1Y4f/488vPzce7cn87RT6WUlBScP18OADh58iQOHTpU7ecdDoHk5GSXct58882YO3cuHn30Eaxduxbdu3dzvt6CBZl47bU56N9/AKKjozFp0kRMmjSp3udq0aKF83t3c504cRIOhwOdOl1Z7X6FQoGcnJwqr3FhX5w8eRJbtnxZ7TXsdgd69uzpvJ2YmOD8XpIkaLWhKCmpGGmeOnUKbdq0qTPPyZMnMWnSfVAqL4wFLBYrzp49W/cfnqgBWJpEbtLr9VCr1Th58iQSEip+wZ88eRIajQZxcXFo3rwZTp06Ve1nTp8+jfh4PQAgOTkZnTt3xldfbW3Q699ww1A88sgj+OmnfVi5chUmTLjX+Vjr1ml4++23IYRAdnY2Ro68Eenp3dClS+c6n0uhuFAw7uZq0SIZCoUChw8fhk6nq/X4iRMn/noNqdprDBs2DP/+9zKXXqOmlJQUHD9+HN26dav1WHJyMubMmY2MjIwGPTeRK3h4lshNCoUC48aNxYwZr6CgoBAFBQV4+eUZGD9+PBQKBQYNGoxz587h3Xffg81mw+bNm7Ft2zbnzw8ZMhi5ublYsmQpysvLYbfb8dtvv2H79u0uvb5Wq8WIESPwyiuv4MiRI7jxxhudj3300UfIzc2FJEmIioqCQqGoNvK6GHdzJSYm4oYbbsATTzyB/Px8ABUrbD/99NN6X+Pmm8dj27Zt2LBhA6xWK6xWK/bv3489e/a6lPHuu/8Pc+a8hv3790MIgVOnTjkX+0ycOAEzZ87Cb7/9BgAoLi7GZ5995pwPJfIEliZRA8yZMwepqano3r07unfvgdatW2PWrJkAgNjYGHz44QpkZWUhNbUl3n//fYwbN875s+Hh4diwYQP++9//omPHK5GWloZ7752AnJxcl1//lltuxldffYUbbrgBERERzvu//fZb9O7dB0lJybjlllvxyiszcOWVV17kmS5oSK5FixYiKioKAwZcgxYtUjBkyPXYt6/+kx4kJSVh3bqP8e9/v4v27S9D27bt8PjjT7hcbJMnT8a9996D//u/u5Gc3AIjR96IU6cqFkVNmjQJt956K26//Q60aJGCbt26uzRPTOQOyWazXvzDWURERASAI00iIiKXsTSJiIhcxNIkIiJyEUuTiIjIRSxNIiIiF7E0iYiIXBTQpVl52rNLXfKIiIjIFQFdmmazGf931x0wm82Nfq6C/DwPJPIuZvYOZm56/pYXYGZvaUxmIQRMpiKXLstXKaBL05Pc2am+gpm9g5mbnr/lBZjZWxqaWQgBozEfZaUlsNlcv0A6S5OIiIJKZWFazp9HdEwc1GqNyz/L0iQioqBRszA1mlC3fp6XBiMioqAhSRI06lDodOFuFybAkSYREQUBIQTKyysWherCGlaYAEuTiIgCXOUh2SJjIex2e6Oei4dnL8LuENh9vAy7jplhMJqhjzagexsturXWQVnlavREROSbas5hKpXKRj0fS7Me3x8txVtf5iOn2AagYlmzQlGMT/cVIzEyBA8MjEPPtmEypyQiovo0dtFPXXh4tg7fHCrB8+tykVNsQ5sENR7IiMNTA7V4ICMOrePVyCm24fl1ufjmUEmDnv/EiRPo339ArfvXr/8E6endcNtttzXyT0BEREIICCE8VpgAR5q15Bbb8NpneRBCYNp1cRh1dSQkSYIhrxz6+CiMvCoS6/cUI/OrfLz2WR6uaBGK+AjP7Mbly5fj7bffxlVXdfHI8xERBSMhBBwOO5TKEMTE6CFJnptOY2nW8J+fi2G1CwzpGIHRXaNqPS5JEkZ3jcLRXAs2/2LCf/aZcHffGLdfx2q14K67/g+//vorrr76KrRq1QrZ2dmYNGkSxo0bi1WrVmPv3j04evQorr66Kw4ePIDk5GR06XIV9u7dA4WCBwmIKPjYbA58uKsIq3cXIc9kg8MhEBFaioFXhGPKtbGI0iphNObDbrMjTp/g0cIEeHi2ls2/VBxyHd018qLbjfnr8S9+MTXodX799RAeeugh/PDDblitNqSkpKBLl854//338NRTTyEpKQl//PEHvv/+e3Tq1AnZ2dk4cuQI2rZty8IkoqD0v3PluPb13zH/CwNOF1hx3ipgsQMFpXas2lWEjNf+wIrtZ2E5fx4RkVEeL0yAI81q7A4Bg8kGnVqBNgkXP61SmwQNdGoFDCYb7A7h9mra1q1bOw/DjhkzGp9/vqna4z179kB2djays7Px8MMPY+fOnTCZStC9e3f3/lBERAHgdIEFdy05DbNVQKuSMLhjBG7rFY3zJQX4/pQaq3YXIc9kx7wvyxChi8XIZp6Zw6xJ9iHLN998jZvGjcHu3bvqfHzPnh/x8EMP4MEHpuGNua+jrKysybJIqDj8arUL2B0Xv5yY3SFgtQsoJAkN+fRJ1f8BSZJU639EPXr0RHb2Lhw9egwjR47AoUO/YteubPTowdIkouDzzNocmK0CsWFK/OfRVnhpVCLaJWrQLFKBiQPi8NmDSejYXAEBYO4XxiY7+byspZmbm4uvtm5Fu3bt63y83GxG1qKFeOLJp/DmW5mIiYnBx2vXNFkehUJCm3g1rHaBH36/+OXEfjhuhtUu0CZB3aBDAMeOHcO+ffsAAOvWrUfPnj2qPd6tWzq++mor9PqKzxWFh0dg586d6Nq1q9uvRUTkz/JLbDhwphwA8I9bmyMu/MJB0soVsprQUCyb0BKhKgkl5x3Y+FPDps4uRbbSdDgceDtrIe65516oVKo6t/lp309o1SoNycktAACDBw/Bzp07mjTX8C4RAICPso2w2usebVrtAh/tMlZs3zmiQa/TocPf8c9//gvp6d2gUEgYN25ctccjIiIQHR2Dbt0qRpbdunVDfHwCtFptg16PiMhfrf2hCA4H0CwqBJ1SL/wOrFgl64DJVAQAUKtD0LtdxefnP9lb3CRZZJvT/M9/PsVll/0Nrdu0qXcbg8GA+Ph45+34hAQUFhpht9vrPKuD1WqF1XrhumgNufj0dR3C8eH3Rhw4XY5XNuTioUFx1f5Xk19iw7+25OPA6XIkRobg2g7hbr9Gy5Yt8d1339W6/7PPPqt2e/v2bc7vH3/8MTz++GNuvxYRkb/LL6k49V2zqOojTKMxH4Co9hnM9s3U+OpXwFTeNIdnZSnNkydPYld2Nl6e8YpHn3f9+nVYu2Z1rfvzDbkoc2OE9sR1IZjxuRXbj5jw3f9M6JISglidQEHZH9h7ygaHAKK1Ep64LgSlRXko9eQfwoPsdhsMeTlyx3ALM3uHv2X2t7wAM3uSwl4OAaDAZIEhL8c5wgQqjgaaiotgQsVo82SuGQKAEu79WfTxiS5tJ0tpHj70K/LycvHQg/cDAIxGIxa/fQrGwkIMGjzEuZ1er8f+n3923s7LzUVMTHS95w4cNWo0hg0b7rxtNpsxZfIkxOkToNPpXM6njweymtnw3o5CfP1rCfaedvx1Gj0F1Colrv17OO7sE4PESN9efGzIy3H5jeArmNk7/C2zv+UFmNmTRncvx8o9p3DK6IBdHYvwkHKUmIoRHRMHU3FRtczf/X4cEoA+f4uCPl7v8Syy/NYfNHhItXJ86cUXMPSGG5zzd5U6d+6Cd5YuwZkzp5Gc3AKbN3+BXr371Pu8KpWq3vlRdyVGhuDJofGYcm0s9p0ox5+GQjTTx6Bzy1BEhDbuhL9EROS69s1DkRKrwqkCKx5f+SfenZAEtVoDlUrtHGECwFtbDSgstUOllDChf2yTZJH9Iyc1rVr5EbZs2QwA0Gq1mDx5Kua+/hoeuH8a8gvyMXbMWK/miQhVou9lYbimvQp9LwtjYRIRyeCxIXpIEvDL6XKMyzyN7N8vrF85nnceDyw/g3f+WwgAGJMeCZ26aerNJ44vvvTyDOf342++pdpjXdPT0TU93duRiIjIRwgh0KlZOe7vp0LmNiuO51nwwPKz0KolSBAwW4pR+VmHwR3DMf2GhCbL4hOlSUREVJeql/e6vW8z9Pw78K8v87HnDzPMFgGBikOmbRPVmNAvFkOubNjHAF3F0iQiIp9VXGSsdj3MDsnA2/+XjHKLA3/kW5CTm49O7RIRrfNOnbE0iYjIZ4WFhyNUq611PcxQtQJ/ax4KfUiI1woT8MGFQEREFNyEECgxFUM4HAgJUXnsAtKewNIkIiKfUTmHWVpqgtVmkztOLSxNIiLyCVUX/UTHxEGtVssdqRaWJhERya5mYfrSIdmquBCIiIhkJ0kS1CoNdLpwny1MgKVJREQyEkLAYjkPjSYUYeFN+xlLT+DhWSIikkXlIVmjsQB2u13uOC5haRIRkddVm8OMjq336lW+hqVJRERe5S+LfurC0iQiIq8SQkA4HH5XmAAXAhERkZcIIeBwOKBUKhETGw9JkuSO5DaONImIqMk5F/0UGiCE8MvCBFiaRETUxKrOYYZHRPltYQIsTSIiakL+vOinLixNIiJqMlarBVaLJSAKE+BCICIiagJCCACAWq2BPj4RCoV/fA7zUjjSJCIij6o8JFtSUgwAAVOYAEuTiIg8qOocplqtkTuOx7E0iYjIIwJt0U9dWJpEROQRZaUlAV2YABcCERGRh+jCwqHWaKBSqeWO0mQ40iQiogYTQqDIWACrxQJJkgK6MAGWJhERNVDlHGZ5uRkO4ZA7jlewNImIyG3BsOinLixNIiJyW3FRYdAVJsCFQERE1AC6sHCEanVBVZgAR5pEROQiIQRKSoohhIBKpQ66wgRYmkRE5ILKOczSEhNsVqvccWTD0iQioouquehHpQ7sj5VcDEuTiIjqFayrZOvDhUBERHRRqhA1dLrwoC9MgKVJRER1EELAarFArdEgPCJS7jg+g4dniYiomspDskZjPhwOu9xxfIpsI81XX5kBo7EQkqSAVqvF3ffcg7S01tW2OXjwAGbNnImkpCTnfTNnzoJaE3jXaCMi8gU15zAD6QLSniBbaT7y6GMICwsDAOzetQsLMxdg7hvza22XlJSEuW/M83Y8IqKgw0U/lybb4dnKwgSAsrJSAJJcUYiI6C8Ou4OFeRGyLgRa8NabOHjwAADg6aefrXObnJw/8dSTj0OhUGDANddi8OAh9T6f1WqFtcqHbs1ms2cDExEFICEEhHBAkiTExsVDkjiIqY9ks1mF3CG+/fYbfP/dTjz9zHPV7i8rKwOEgC4sDPn5+Zg961WMHjMWvXr1rvN5Vq9ehbVrVte6f968edBqtY3KaLfboFT612JjZvYOZm56/pYX8J/MQgg4HA4AFVXgD5mr8tR+1scnurSdT5QmANx26y3IensxIiIi6t1m/fp1KCwowD33Tqjz8bpGmlMmT8K77y2HTqdrVD5DXo7LO9VXMLN3MHPT87e8gH9krjmHaSou8vnMNXl7P8syp1laWoqCggLn7d27dyEiIhzh4eHVtissLPzrf0AVBbh3z49olZZW7/OqVCrodDrnV2NHl0REgYqLfhpGlnF4WVkp5s+bB4vFAoVCQmRkJKZPfwaSJCFr0UJ07ZqOrunp2JX9PbZs2QylUgm73Y4ePXvhmmuulSMyEVFAsVjOw2KxsDDdJEtpxscnYPac1+p8bPKUqc7vh1w/FEOuH+qtWEREAU+Iihk5jSYU8fpEKJT8HKY7eEYgIqIg4by8V6kJAFiYDcDSJCIKAlXnMFWq4L20V2OxNImIAhwX/XgOS5OIKMCVlppYmB7iX59iJSIit4WFRUCjDoVKzcOyjcWRJhFRABJCoMhYAKvVCkmSWJgewtIkIgowlXOY5eVmXg/Tw1iaREQBhIt+mhZLk4gogBQVFbIwmxAXAhERBRCdLgxarY6F2UQ40iQi8nNCCJSWmiCEgFqtYWE2IZYmEZEfq5zDLDEVw2azXvoHqFFYmkREfqrmoh+eHq/psTSJiPwQV8nKgwuBiIj8VIgyBLqYcBamF7E0iYj8iBACVqsFarUGEZHRcscJOjw8S0TkJyoPyRoL8+FwOOSOE5RYmkREfqDqHGZUdCwUCv76lgP3OhGRj+OiH9/B0iQi8nEOhwN2m52F6QO4EIiIyEcJISCEgFKpRJw+AZIkyR0p6HGkSUTkg6ou+hFCsDB9BEuTiMjHVJ3DDAuPYGH6EJYmEZEP4aIf38bSJCLyIZbz5bCct7AwfRQXAhER+YDKeUtNqBb6eDWUSqXckagOHGkSEcms8pBsaakJAFiYPoylSUQko6pzmCEhKrnj0CWwNImIZMJFP/6HpUlEJJOSkmIWpp/hQiAiIpmEhUVAowmFWq2ROwq5iCNNIiIvEkKgqKgQNpsVCoWChelnWJpERF5SOYdZbi6D3W6XOw41AEuTiMgLuOgnMLA0iYi8oMhYwMIMAFwIRETkBVpdGLS6MBamn5OtNF99ZQaMxkJIkgJarRZ333MP0tJa19ru66+24pNP1kMIgcuv6IgJEyYiJIRdT0S+TwgBc1kpyzKAyNY+jzz6GMLCwgAAu3ftwsLMBZj7xvxq2+Tm5GDVqpV47bW5iIqOxuuvzcHWrV9iyJDr5YhMROSyqnOYKrUGKhXP9hMIZJvTrCxMACgrKwVQ+3px2dnf4+qu6YiOiYEkSRg4aBB27thR73NarVaUlZU5v8xmc1NEJyK6KCEEHA6Hcw6ThRk4ZD3OueCtN3Hw4AEAwNNPP1vrcYPBgPj4eOfthPgEGAyGep9v/fp1WLtmda378w25KNNqG5XVbrfBkJfTqOfwNmb2DmZuev6Ut7IwAQGFQgFTcRFMKJI7lkv8aT9X8lRmfXyiS9vJWpr3P/AgAODbb7/BihXL8fQzzzXq+UaNGo1hw4Y7b5vNZkyZPAlx+gTodLpGPbchL8flneormNk7mLnp+VNeIQRMxUacP1+O+ITmcsdxiz/t50rezuwTHzkZMOAaHDhwECaTqdr9er0eeXl5ztu5ebnQ6/X1Po9KpYJOp3N+aRs5uiQicpUQAlarBZIkITIqBpLkE79eycNk+VstLS1FQUGB8/bu3bsQERGO8PDwatt179EDe378AcbCQggh8OWWLejdu7e34xIRXVTlop/CAsNfh2YpUMlyeLasrBTz582DxWKBQiEhMjIS06c/A0mSkLVoIbp2TUfX9HQkJjbDuJvG4/nnK+Y7O3S4HBkDB8kRmYioTjXP9KNQcIQZyGQpzfj4BMye81qdj02eMrXa7YyMgcjIGOiNWEREbuGp8YIP/0tERNRADrsddpuNhRlEeGodIiI3CSEghIAyJARx+kRIUu3PmVNg4kiTiMgNlYdki4wFEEKwMIMMS5OIyEVV5zB1YeEszCDE0iQicgEX/RDA0iQicsn58+UsTOJCICKii6mctwwN1UIVnwilkr82gxlHmkRE9ag4JFvw15WYwMIkliYRUV0uzGGWQ6lUyh2HfARLk4ioBi76ofqwNImIaigxFbMwqU48QE9EVENYeAQ0oaFQqzVyRyEfw5EmEREqDskWFxXCbrNBoVCwMKlOLE0iCnqVc5hmcxnsdrvccciHsTSJKKjVXPSj1nCESfVjaRJR0BJCoMhYwEU/5DIuBCKioCVJEkK1Omh1YSxMcglHmkQUdIQQKCsrhRACoaFaFia5jCNNIgoqVecw1Wo1QkJUckciP8KRJhEFjZqLfliY5C6WJhEFBZ4ajzyBpUlEQUMhKViY1Cic0ySigCaEgM1mg0qlQlR0rNxxyM9xpElEAavykKyx0ADhcMgdhwIAS5OIAlLVOczIqBhICv66o8bju4iIAg4X/VBTYWkSUcCx222wWW0sTPI4LgQiooAhhAAAhISooI9PhCRJMieiQMORJhEFhMpDskXGAgBgYVKTYGkSkd+rOoep1YXJHYcCGEuTiPwaF/2QN7E0icivlZebWZjkNVwIRER+SQhRcT3MUC1UKjVCQvjrjJoeR5pE5HcqDskWwGwugyRJLEzyGpYmEfmVC3OY5VDwLD/kZXzHEZHf4KIfkpssxzQsFgv++c/5OHP6NNRqNSIjozBx4iQ0a9682na5ubl44P5pSE1Ndd732ONPoFmzZt6OTEQ+wGQqYmGSrGSbCMjIGIguXa6CJEn4YtPnyMpahJdenlFrO602FHPfmCdDQiLyNWFhEQgN1UKt1sgdhYKU24dnP/30UxiNxka9qFqtxlVXXe08Y0e79u2Rl5fbqOcEAKvVirKyMueX2Wxu9HMSkbyEEHA47LDb7VAqlSxMkpVks1mFOz/Qv/8A/Prrr/j73/+Ofv36oV+/vujVqxfCw8MbHOKtN/+F8PBw3H3PvdXuz83NxUMP3o9WrVrB4XAgPb0bRo8eA4VSWefzrF69CmvXrK51/7x586DVahucD6g4AbRS6V8r9JjZO5i56VQUpgOAgEKh9KtT4/nLPq4qmDPr4xNd2s7t0gSAwkIjdu7cgW3btmH79h04evQounTpgi1bNrsddN26j7Hnxx/xwosvQaOp/j/IypFjVFQUSkwm/OMf83Flp04YOfLGOp/LarXCarU6b5vNZkyZPAnvvrccOp3O7WxVGfJyXN6pvoKZvYOZm0bVRT8KhQLxCc0v/UM+xB/2cU3MfGkNWj0bExON9u3bo1279mjXrh10Ot1f/xt0z8aNG7B71y488+xztQoTAFQqFaKiogAA4RERuObaa3Ho0K/1Pp9KpYJOp3N+NXZ0SUTyEEKgyFjgXPQjSVzoT77B7THtvfdOwM6dOxEXF4v+/fvjlltuxoIFbyEyMtKt5/nPpxuxc8cOPP/CiwgLq/sEy0VFRQgLC0NISAisVit279qFtFZp7kYmIj9TeaYfrS4MGk0oTCiSOxIRgAaU5jfffIPIyEhkZAxE37590atXT7cPfebn5+P9999DYmIiXn7pRQAVo8RZs+dg1cqPEBMbi0GDBuPw4UNYvWolFAoF7HY7rriiI0aPGetuZCLyE0IIlJvLEKrVIVTbuCkVoqbgdmkeP34MBw4cwLZt27B06RLcd999aNu2Lfr374dnnnnGpeeIi4vD6jUf1/nY+JtvcX7fvXsPdO/ew92IROSHqs5hqtRqhISo5I5EVEuDlhxdccUVaNWqFdq2bYu0tDSsWLECP/zwg8ulSURUVc0z/bAwyVe5XZovvfQyduzYgZ9//hnt2rVF3759kZmZiT59+jZFPiIKcDw1HvkTt0uzuLgY06ZNQ9++faDX65siExEFGQkSC5P8gtulOX/+hVPa5efnIy4uzqOBiCg4CCFgt9sQEqJCdAx/j5B/cPvDT2azGQ8//AiaNWuOtm3boVmz5nj44UdQWlraFPmIKABVHpItLDBACLfPr0IkG7dL85lnnsXRo79h48YNOHLkMD79dCOOHTuG5557vinyEVGAqTqHGRkV41enxiNy+/Dspk2b8N133yE2NgYAkJCQgPfeexc9e/bCP/4x3+MBiShwcNEP+Tu3R5pCCCgU1f9nKEkKHmIhokuy22ywWa0sTPJbbpfm4MGDceedd2Hv3p9gMBiwZ89e3H333RgyZEhT5COiACCEgBACISoV9PHNWJjkt9wuzVmzZiIlpQWGDBmCdu3aY+jQoUhOTsLMma82RT4i8nOVh2SLigoBgHOY5NfcntMMDw9HZmYmFixYAIPBAL1ez38ERFSnmnOYRP6uwVfulCQJ8fHxnsxCRAGEi34oELlUmqmpLV0aTZ448Udj8xBRgDCby1iYFHBcKs0PP1zR1DmIKEAIISBJErRaHdS8WgkFGJdK88UXX8JXX20FAMyZMwfTp09v0lBE5J+EECgyFlRcDzNUy8KkgOPS6tnffvsNNpsNALBgQWaTBiIi/1Q5h3n+fDkXB1LAcmmk2bdvH/Tp0xdt2rSB2WzGbbfdXud2K1Z84NFwROQfuOiHgoVLpbls2TJs2LABJ06cwJYtW9Cx4xVNnYuI/IipuIiFSUHBpdLUaDS46aabAABGYxHnNImomrDwCISGaqHWaOSOQtSk3D4jEM/8Q0RAxSFZU7ERDocdSqWShUlBwe3SJCKqnMMsKyt1LhIkCgYsTSJyS81FP2o1R5gUPFiaROQyrpKlYOd2aS5ZsrTO+x966OHGZiEiHydJEkI1WhYmBS23SzMzMxMbNmyodt+jjz6GgwcPeiwUEfkWIQTKzWUAAK0ujIVJQcvtq5ysXbsGI0aMRFxcHPr06YMnn3wSe/fuxYYNnzRBPCKSW9VDsiqVGsqQBl8cicjvuf3ub9u2LZYvfx+33XY7+vXri8OHj2Djxg2IiopqinxEJKOac5gsTAp2Lv0LOHDgQLXbGo0G9913H7KysrB06RKcPn0ap0+fxhVX8ExBRIGCi36IanOpNPv06QtJkiCEqPXY8OEjAFQsECgsLPBsOiKSjxCAAAuTqAqXStNoLGzqHETkI4QQsNvtCAkJQXRMHK9YQlQFP6dJRE6Vh2QLCwzOi0kT0QVuz+qfPXsWM2fOxL59+2AylVR7bP/+nz0WjIi8q+YcJguTqDa3S3PSpEnQanV4+OGHodPpmiITETWBghIblm0vhMFkg0Y6j4nXWdAiVg2Ai36IXOV2ae7b9zOOHz8GtVrdFHmIyMOOnCvHox+dw6mC6idWX//zCSREKjFzdCKuaqmC1WJlYRJdgttzmn/729+Qk5PTFFmIyMO+P1qK8QtPOQtTpQSidQpo/vrvcm6xHZPePYsN+8zQxyeyMIkuwe2R5vDhw3HLLbdgwoSJSEiIr/bY0KFDPRaMiBqnpNyOqe+fhUNUlOWzwxMwumvFSUgMeTnYl6vFs2tzYLYCr2zMRddWWrSK5xEkootxuzSXLq04Yfu8efOq3S9JksulabFY8M9/zseZ06ehVqsRGRmFiRMnoVnz5rW23bPnRyx//z04HA6kprbE1Gn3cy6VyAWvbsyF3QEoFcCGh1o65y+BijnMq5Ms+PAuDcb/+zwsduCF9Tl4f1KKjImJfJ/bpfnLL/s98sIZGQPRpctVkCQJX2z6HFlZi/DSyzOqbVNuNiNr0UK89PIMJCe3wDtLl+DjtWtwx513eSQDUSD7+lApAKB3W12twnQ4HLCcP48WzRMwvrsJy78zYv+pcrmiEvkNWT6nqVarcdVVVzuXtLdr3x55ebm1tvtp309o1SoNycktAACDBw/Bzp076n1eq9WKsrIy55fZbG6aPwCRHyi3VpzB6/mR1adRzOZSAMK56OfRwbEAAIcAcoos3o5J5FdcGmkOHjwEmzd/AeDCKfXqsn37tgaF+Pyzz9C1a3qt+w0GA+LjL/yDj09IQGGhEXa7HUqlstb269evw9o1q2vdn2/IRZlW26Bslex2Gwx5/rUAipm9w9cz280GGCwX/r1Ung7TVFwEE4oAABIAAeD0OQOUltr/tuTm6/u4LszsHZ7KrI9PdGk7l0pzwoR7nd9PnTqlYYnqsW7dx/jzzz/xwosvNfq5Ro0ajWHDhjtvm81mTJk8CXH6hEbPgxryclzeqb6Cmb3DVzMrpGI4BPDZYQ0m9I9FkbHAeS3Mqpm3HymBQDEAoGPrRKjVvleavrqPL4aZvcPbmV0qzXHjxjm/v/XWWz324hs3bsDuXbvw/AsvQqPR1Hpcr9dj/88XzjKUl5uLmJjoOkeZAKBSqaBSqTyWj8iftUlQ47ccC97facTYTgKW8+eh1YXV2m7OZ3kAgPgIpU8WJpEvcak0P//8c5eezJ2PnPzn043YuWMHnn/hRYSF1f6HDACdO3fBO0uX4MyZ00hOboHNm79Ar959XH4NomD23Ih43LXkDIrMDkxbYcS/J7ao9TnMJ1eedX6Gc9KAWDliEvkVl0rzqaemX3Ibdz5ykp+fj/fffw+JiYl4+aUXAVSMEmfNnoNVKz9CTGwsBg0aDK1Wi8mTp2Lu66/BbncgJTUF9097wKXXIAp2XVrqMKCdCt/+ZsWBPwV6zTqFbq21+FtzDX47U4bdJ486Fwt1bKHB+O7R8gYm8gMulaanPmZSKS4uDqvXfFznY+NvvqXa7a7p6eiaXnuREBFd2vzbWuC5j3Ow6ZcyWO3Azt/M2Plb9VXlPdposfjuFjIlJPIvbn9Ok4h8mxACJSXFCAuLQEhICOaMT8YzI+yYsSEHu46ZYbELKCHQqaUWM0YnID6CZwEichVLkyiAVL1aiUYTCrW6YoFdpFaJN25Ocm7nj6skiXwBL0JNFCBqXt6rsjCJyHNYmkQBgNfDJPIOHp4lCgCSJEGjDoVOF87CJGpCLpXmxU6dV1VDT6NHRA0jhMD58+UIDdVCFxYudxyigOdSaXr61HlE1HhVD8mq4hOhVPLAEVFTc+lfmSdPnUdEjVdzDpOFSeQdDVoI9MEHH2DEiJHo1asXAGDHjh1Yt269R4MRUd246IdIPm6X5ty5b2DhwoUYM2YMTp8+DQBo1qwZ3nzzTY+HI6LahBAQQrAwiWTgdmm+//77WLNmDe66605UXIUPaN26NX7//XdPZyOiKoQQsNttUCgUiInRszCJZOB2aZaVlaFZs2YA4FxRa7Va67y0FxF5RuUh2cICA4QQLq1mJyLPc7s009O7YunSpdXuW778A3Tv3t1joYjogqpzmBGR0SxMIhm5veRu9uw5GDFiBFas+BClpaUYOHAQcnNzsWHDJ00Qjyi4cdEPkW9xuzTT0lph9+5d2Lx5C06ePInk5GQMGTK43gtJE1HD2axWWC0WFiaRj2jQh7u0Wi1uvHGkp7MQ0V+EqLg4tEqthj6+GRQKniaayBe4VJrTpk1z6ckyMzMbFYaILhySVSpDEBkZzcIk8iEu/WuMjIx0fkmSAmvWrEVOTi7Uag1yc/Owdu3HUCiUTZ2VKODVvB4mEfkWl0aas2fPdn5/xx134v3338OQIUOc923evBnLl3/g+XREQYSLfoh8n9vHfb755hsMGjSo2n0ZGRn49ttvPZWJKCiVlZWwMIl8nNulmZqaUmtUuWLFCqSkpHgsFFEw0unCERsXz8Ik8mFur56dO3cubrnlVixatAgpKSk4deoUzp49i48++rAp8hEFNCEEiooKodOFQa3WQKVSyx2JiC7C7dLs3bs39u//GV988QX+/DMHzZs3w6BBgxETE90E8YgCV9U5TK1WJ3ccInJBgz6nGR0djZtvvhn5+fmIi4vzdCaigMdFP0T+qUEnbH/ooYfRrFlztG3bDs2aNcfDDz+C0tLSpshHFJCKi40sTCI/5HZpPvvsczh27Cg2btyAI0cO49NPN+LYsWN47rnnmyIfUUAKCwtnYRL5IbcPz27atAnfffcdYmNjAAAJCQl477130bNnL/zjH/M9HpAoUAghUFpiQlhYOEJCVAgJUckdiYjc5PZIUwgBhaL6pYkkSeE8VyYR1VY5h1laaoLVZpU7DhE1kNulOXjwYNx5513Yu/cnGAwG7NmzF3fffXe1MwQR0QU1F/2o1bxgO5G/crs0Z82aiZSUFhgyZAjatWuPoUOHIjk5CTNnvtoU+Yj8GlfJEgUWt+c0w8PDkZmZiQULFsBgMECv1/NK8kT1kCQJapUGOl04C5MoADToc5oAYLfbodFoYDKZnPdFRkZ6JBSRvxNCwGKpuFJJWHiE3HGIyEPcLs0ffvgBDz/8MA4dOuxc/COEgCRJKCws8HhAIn/jPCRrsUCvT4RSycvmEQUKt0tz8uQpGDt2DJYtWwatVtsUmYj8Vs05TBYmUWBxuzTz8vIwffp0zmMS1cBFP0SBz+3Vs+PGjcPnn3/eFFmI/JoQAsLhYGESBTC3R5rPPfccMjIy8K9/vYn4+Phqj61Y8UE9P1XbsmXvYM+PPyAvLw+vv/4GWqWl1drm4MEDmDVzJpKSkpz3zZw5C2oNP+dGvkMIAbvdDqVSiZjYeB6FIQpgbpfmpEmToFar0aNHD+h0DZ/T7NGjB0aOvBEvPP/sRbdLSkrC3DfmNfh1iJqSEAIOhwPGQgNi4xJYmEQBzu3S3LlzJ44cOYyIiMYto+/Q4fJG/XxdrFYrrNYLpygzm80efw2iSpVzmIBAeEQUC5MoCLhdmpdddhlKSkoaXZquysn5E089+TgUCgUGXHMtBg+u/3R969evw9o1q2vdn2/IRVkjV/ra7TYY8nIa9RzexsxNp3KECVR87MpUXAQTiuQN5QZ/2c+V/C0vwMze4qnM+vhEl7ZzuzSHDx+Om24aj3vvvRcJCdXnNIcOHeru011UWlprZGUthi4sDPn5+Zg961VERESgV6/edW4/atRoDBs23HnbbDZjyuRJiNMnQKfTNSqLIS/H5Z3qK5i56Vgs52EszEdUdBxMxUV+kbkqf9nPlfwtL8DM3uLtzG6X5r///W8AwLx51ecZJUnyeGlWLbq4uDj07tMXhw8dqrc0VSoVVCpebomaTuUJPdRqDfTxiVAolH41wiSixnG7NH/5ZX9T5KhTYWEhoqKioFAoYDabsXfPj7jm2uu89vpEVVXOYYaEqBAREQWFgicuIAo2DT73bGMtfjsLe/fugdFoxMyZryA0VIu3FmQia9FCdO2ajq7p6diV/T22bNkMpVIJu92OHj174ZprrpUrMgWxqicu0OnC5Y5DRDKRrTQn3Te5zvsnT5nq/H7I9UMx5HrPHvIlchfP9ENEldw+IxBRsCkrLWFhEhEAGUeaRP5CFxYOtUYDlUotdxQikhlHmkR1qDgkWwCrxQJJkliYRASApUlUS+Uc5vlyMxzCIXccIvIhLE2iKrjoh4guhqVJVEVxUSELk4jqxYVARFXowsIRqtWxMImoThxpUtATQqCkpBhCCKhUahYmEdWLpUlBrXIOs7TEBJvNeukfIKKgxtKkoFVz0Q8/VkJEl8LSpKDEVbJE1BBcCERBSxWihk4XzsIkIpexNCmoCCFgtVig1mgQHhEpdxwi8jM8PEtBo/KQrNGYD4fDLnccIvJDLE0KClXnMKOiY3kBaSJqEJYmBTwu+iEiT2FpUsBzOBxw2B0sTCJqNC4EooAlhIAQDiiVSsTGxUOSJLkjEZGf40iTAlLlIdnCgnwIIViYROQRLE0KOFXnMMMjIlmYROQxLE0KKFz0Q0RNiaVJAcViOQ+rxcLCJKImwYVAFBCEEAAAjSYUen0iFEp+DpOIPI8jTfJ7zst7lZoAgIVJRE2GpUl+reocJi/tRURNjaVJfouLfojI21ia5LdKS0wsTCLyKi4EIr8VFh4BjSYUKjUPyxKRd3CkSX5FCIEiYwGsViskSWJhEpFXsTTJb1TOYZaXm3k9TCKSBUuT/AIX/RCRL2Bpkl8oKipkYRKR7LgQiPyCThcGrVbHwiQiWXGkST5LCIHSEhOEEFCrNSxMIpIdS5N8UuUcZklJMWw2q9xxiIgAsDTJB9Vc9MPT4xGRr5BtTnPZsnew58cfkJeXh9dffwOt0tLq3O7rr7bik0/WQwiBy6/oiAkTJiIkhFOxgYqrZInIl8k20uzRowdmvDIT8fHx9W6Tm5ODVatWYsaMV/HmW5koMhqxdeuXXkxJcghRhrAwicgnyVaaHTpcjri4uItuk539Pa7umo7omBhIkoSBgwZh544d9W5vtVpRVlbm/DKbzZ6OTU1ECAGL5TwkSUJEZDQLk4h8kk8f5zQYDNVGognxCTAYDPVuv379Oqxds7rW/fmGXJRptY3KYrfbYMjLadRzeJu/ZBZCwOFwAKi4kLQ/ZK7KX/ZzVf6W2d/yAszsLZ7KrI9PdGk7ny5Nd40aNRrDhg133jabzZgyeRLi9AnQ6XSNem5DXo7LO9VX+EPmmnOYpuIin89ckz/s55r8LbO/5QWY2Vu8ndmnS1Ov1+PPnAv/g8jNy4Ver693e5VKBZVK5Y1o5AF1LfoxoUjuWERE9fLpj5x079EDe378AcbCQggh8OWWLejdu7fcschDHA4H7DY7F/0Qkd+QbaS5+O0s7N27B0ajETNnvoLQUC3eWpCJrEUL0bVrOrqmpyMxsRnG3TQezz//LICKxUMZAwfJFZk8RAgBIQSUSiXi9AmQJEnuSERELpGtNCfdN7nO+ydPmVrtdkbGQGRkDPRGJPKCykOywiEQE6tnYRKRX/Hpw7MUWKrOYYaFR7AwicjvsDTJK3imHyIKBCxN8grL+XJYzltYmETk13z6Iyfk/4QQkCQJmlAt9PFqKJVKuSMRETUYR5rUZCoPyZaWmgCAhUlEfo+lSU2i6hxmSAhPOEFEgYGlSR7HRT9EFKhYmuRxJSXFLEwiCkhcCEQeFxYWAY0mFGq1Ru4oREQexZEmeYQQAkVFhbDZrFAoFCxMIgpILE1qtMo5zHJzGex2u9xxiIiaDEuTGoWLfogomLA0qVGKjAUsTCIKGlwIRI2i1YVBqwtjYRJRUOBIk9wmhEBZaQmEENBoQlmYRBQ0WJrklso5TJOpCDabTe44RERexdIkl9Vc9KNS8fR4RBRcWJrkEq6SJSJiaZIblAolC5OIghpXz9JFCSFgs1mhUqkRGRUjdxwiIllxpEn1qjwkW1hggMPhkDsOEZHsWJpUp6pzmFHRsVAo+FYhIuJvQqqFi36IiOrG0qRaHHY77DYbC5OIqAYuBCInIQSEEFCGhCBOnwhJkuSORETkUzjSJAAXDskWGQsghGBhEhHVgaVJ1eYwdWHhLEwionqwNIMcF/0QEbmOpRnkzp8vZ2ESEbmIC4GCVOW8ZWioFqr4RCiVfCsQEV0KR5pBqPKQbFlZKQCwMImIXMTSDDJV5zCVSqXccYiI/ApLM4hw0Q8RUeOwNINIiamYhUlE1AiczAoiYeER0ISGQq3WyB2FiMgvcaQZ4IQQKC4qhN1mg0KhYGESETWCbCPNc+fOInPBAphMxdDpdJg67X6kpKRW2+bgwQOYNXMmkpKSnPfNnDkLag1/8bui6hxmaKgOyhAeWCAiagzZfosufvttZGRkYMA11yL7+++xMHMBZs95vdZ2SUlJmPvGPBkS+jchBBwOh3MOk//RICJqPFkOzxYVFeH48WPo268/AKB7jx4wGPLx57lzjXpeq9WKsrIy55fZbPZEXL8jhECRsQCA4KIfIiIPkmWkmW8wIDo6xvk5QUmSoNfrYTAY0Kx582rb5uT8iaeefBwKhQIDrrkWgwcPqfd5169fh7VrVtfxerko02obldlut8GQl9Oo5/AmIRwAAFNxEUwokjmN6/xtPwPM7A3+lhdgZm/xVGZ9fKJL2/n0JFdaWmtkZS2GLiwM+fn5mD3rVURERKBXr951bj9q1GgMGzbcedtsNmPK5EmI0ydAp9M1KoshL8flnSoXIQTM5jJotTpIkuQXmWtiZu/wt8z+lhdgZm/xdmZZDs/G6fUwGgtht9sBVPyyNxgM0Ov11bbT6XTQhYVV/ExcHHr36YvDhw7V+7wqlariZ/760jZydOlPKhf9mIqNsNttcschIgpIspRmVFQU0tJaY/u2/wIAdmVnIy4urtah2cLCQjgcFYcZzWYz9u75Ea3S0rye19fVPNNPSIhK7khERAFJtsOzkybdh8zMBVi/fh20Wh2mTp0GAMhatBBdu6aja3o6dmV/jy1bNkOpVMJut6NHz1645ppr5Yrsk3hqPCIi75GtNJOSkzFz1uxa90+eMtX5/ZDrh2LI9UO9GcsvKSQFC5OIyAt8eiEQ1U8IAZvNBpVKhajoWLnjEBEFBZ5Gzw9VHpItLDRA/DXnS0RETY+l6WeqzmFGRcVAUvCvkIjIW/gb149w0Q8RkbxYmn7EbrfDZrWxMImIZMKFQH5ACAEACAkJgT4+EZIkyZyIiCg4caTp4yoPyRqNBQDAwiQikhFL04dVncPU6cLkjkNEFPRYmj6Ki36IiHwPS9NHlZebWZhERD6GC4F8jBACkiQhNFQLlUqNkBD+FRER+QqONH1IxSHZApjNZZAkiYVJRORjWJo+4sIcZjkUPMsPEZFP4m9nH8BFP0RE/oGl6QNMpiIWJhGRH+CkmQ8ID4tAaKgWarVG7ihERHQRHGnKRAiB4mIj7HY7FEolC5OIyA+wNGVQOYdpLiuF3WaTOw4REbmIpellNRf9qDUcYRIR+QuWphdVfg6Ti36IiPwTFwJ5kSRJ0IZqodOFsTCJiPwQS9MLhBAoN5chVKtDqFYndxwiImoglmYTqzqHqVKrERKikjsSERE1EOc0m1DNRT8sTCIi/8bSbCI8NR4RUeBhaTYhCRILk4gogHBO08OEELDbbQgJUSE6Jk7uOERE5EEcaXpQ5SHZwgIDhBByxyEiIg9jaXpI1TnMyKgYSJIkdyQiIvIwlqYHcNEPEVFwYGl6gN1mg81qZWESEQU4LgRqhMp5yxCVCvr4ZjwkS0QU4DjSbKDKQ7JFRYUAwMIkIgoCLM0GqDqHqeW5ZImIggZL001c9ENEFLxkm9M8d+4sMhcsgMlUDJ1Oh6nT7kdKSmqt7b7+ais++WQ9hBC4/IqOmDBhIkJC5JuKLTeXsTCJiIKUbCPNxW+/jYyMDPzrzQUYOXIUFmYuqLVNbk4OVq1aiRkzXsWbb2WiyGjE1q1fypD2wqKfUK0OcfoEFiYRURCSpTSLiopw/Pgx9O3XHwDQvUcPGAz5+PPcuWrbZWd/j6u7piM6puJkAQMHDcLOHTu8nlcIAYfDgfJyMyRJ4tVKiIiClCzHOfMNBkRHx0CpVAKoWHmq1+thMBjQrHlz53YGgwHx8fHO2wnxCTAYDPU+r9VqhdVqdd42m82Nzlo5hwkIrpAlIgpyAfU5zfXr12HtmtW17s835KJMq3X7+SpHmEDFoVlTcRFMKGpsTK+x220w5OXIHcMtzOwd/pbZ3/ICzOwtnsqsj090aTtZSjNOr4fRWAi73Q6lUgkhBAwGA/R6fbXt9Ho9/sy5sDNy83JrbVPVqFGjMWzYcOdts9mMKZMnIU6fAJ3O/Y+GFBcZYTaXIjomDqbiIpd3qq8w5OUwsxcwc9Pzt7wAM3uLtzPLMqcZFRWFtLTW2L7tvwCAXdnZiIuLq3ZoFqiY69zz4w8wFhZCCIEvt2xB7969631elUoFnU7n/NI2YHRZVVh4BGJi9Fz0Q0REAGQ8PDtp0n3IzFyA9evXQavVYerUaQCArEUL0bVrOrqmpyMxsRnG3TQezz//LACgQ4fLkTFwUJPmEkKgxFSEsPAIKJVK57wrERGRbKWZlJyMmbNm17p/8pSp1W5nZAxERsZAr2SqeuICTagWajULk4iILuAZgf5S80w/arVG7khERORjWJqoLMwCnumHiIguKqA+ctJQkiQhVBMKnS6MhUlERPUK6pGmEAJmcxkAQMvCJCKiSwjakWbVOUy1Sg2ljCeBJyIi/xCUI82ai35YmERE5IqgK01eD5OIiBoq6EoTQgACLEwiInJb0ByXFELAbrcjJCQE0TFxvGIJERG5LShGmpWHZAsLDBCCl/giIqKGCYqRZlFRAZQKBUeYRETUKEEx0uSiHyIi8oSAHmkKUXHxaI1GC7vdgbKysgY/l9lsbtTPy4GZvYOZm56/5QWY2Vs8mVmr1V7yaGRAl2Z5eTkA4KGHHpQ5CRER+bp331sOnU530W0km80qvJTH6xwOBwoLCxEaGtqouUyz2YwpkydhUdbiRl/Y2luY2TuYuen5W16Amb3F05mDfqSpUCgQFxfnsefTarWX/F+Ir2Fm72DmpudveQFm9hZvZg6KhUBERESewNIkIiJyEUvTBSqVCmPH3QSVSiV3FJcxs3cwc9Pzt7wAM3uLHJkDeiEQERGRJ3GkSURE5CKWJhERkYtYmkRERC4K6M9puuvcubPIXLAAJlMxdDodpk67HykpqbW2+/qrrfjkk/UQQuDyKzpiwoSJCAmRZ1e6kvngwQOYNXMmkpKSnPfNnDkLao3G23GxbNk72PPjD8jLy8Prr7+BVmlpdW7nS/vYlcy+tI8BwGKx4J//nI8zp09DrVYjMjIKEydOQrPmzWttu2fPj1j+/ntwOBxITW2JqdPu9/rn9FzNm5ubiwfun4bU1Avv8ccefwLNmjXzat5Kr74yA0ZjISRJAa1Wi7vvuQdpaa1rbedL72dXMvva+7nSN998jUULM/H4E0+iW7futR73xnuZpVnF4rffRkZGBgZccy2yv/8eCzMXYPac16ttk5uTg1WrVuK11+YiKjoar782B1u3fokhQ6732cwAkJSUhLlvzJMhYXU9evTAyJE34oXnn613G1/bx65kBnxnH1fKyBiILl2ugiRJ+GLT58jKWoSXXp5RbZtysxlZixbipZdnIDm5Bd5ZugQfr12DO+68yyfzAoBWG+oz+/mRRx9DWFgYAGD3rl1YmLkAc9+YX20bX3s/u5IZ8L33c25uLr7auhXt2rWv83FvvZd5ePYvRUVFOH78GPr26w8A6N6jBwyGfPx57ly17bKzv8fVXdMRHRMDSZIwcNAg7NyxQ47ILmf2JR06XH7JszT50j4GXMvsa9RqNa666mrnKcHatW+PvLzcWtv9tO8ntGqVhuTkFgCAwYOHYOdO7+9rV/P6msryAYCyslIAtU/B5mvvZ1cy+xqHw4G3sxbinnvurffjJd56L3Ok+Zd8gwHR0TFQKpUAAEmSoNfrYTAYqh0iMhgMiI+Pd95OiE+AwWDwel7A9cwAkJPzJ5568nEoFAoMuOZaDB48RI7ILvGlfewOX97Hn3/2Gbp2Ta91f819HZ+QgMJCI+x2u/N9JYf68gLA+fPn8fT0J+FwOJCe3g2jR4+BQsasC956EwcPHgAAPP107aMRvvh+vlRmwLfez//5z6e47LK/oXWbNvVu4633MkszCKSltUZW1mLowsKQn5+P2bNeRUREBHr16i13tIDhy/t43bqP8eeff+KFF1+SO4pLLpY3JiYGWW8vQVRUFEpMJvzjH/Px6X8+xciRN3o9Z6X7H6i4itK3336DFSuW4+lnnpMti6suldmX3s8nT57EruxsvDzjFa+/dl14ePYvcXo9jMZC2O12ABXX4jQYDNDr9dW20+v1yMvLc97OzcuttY23uJpZp9NB99chmbi4OPTu0xeHDx3yel5X+dI+dpWv7uONGzdg965deObZ56CpYxFHzX2dl5uLmJho2UaZl8qrUqkQFRUFAAiPiMA1116LQ4d+9XbMOg0YcA0OHDgIk8lU7X5ffj/Xl9mX3s+HD/2KvLxcPPTg/Zg2dTJ+++1/WPx2FrZs/qLadt56L7M0/xIVFYW0tNbYvu2/AIBd2dmIi4urdZize48e2PPjDzAWFkIIgS+3bEHv3vKMJlzNXFhYCIfDAaDiUjp79/xY76pVX+BL+9hVvriP//PpRuzcsQPPPf9CtXmsqjp37oLffz+OM2dOAwA2b/4CvXr38WZMJ1fyFhUVwWazAQCsVit279qFtFby7OfS0lIUFBQ4b+/evQsREeEIDw+vtp0vvZ9dzexL7+dBg4dg8ZJ3kLkwC5kLs9CuXXtMum8yBtU4XOyt9zJPo1fF2TNnkJm5ACUlJmi1OkydOg2pLVsia9FCdO2ajq7pFXMsW7d+iQ2frAdQsUhk4qT7ZFs+7krmLzZ9ji1bNkOpVMJut6NHz14YN+6mRl1jtKEWv52FvXv3wGg0IiIiAqGhWry1INOn97ErmX1pHwNAfn4+pkyehMTERISGVlxnUKVSYdbsOVi18iPExMZi0KDBAIAff/gBH3zwPux2B1JSU3D/tAecowxfy7trVzZWr1oJhUIBu92OK67oiDvuvEuW86Xm5eVi/rx5sFgsUCgkREZG4o477kKrtDSffT+7mtnX3s9VvfTiCxh6ww3o1q27LO9lliYREZGLeHiWiIjIRSxNIiIiF7E0iYiIXMTSJCIichFLk4iIyEUsTSIiIhexNImIiFzE0iRqArNnz8att97a4J8fM2YslixZ6sFEDbd9+/Zq1690J9uKFSvQp4/rZ2X54Ycf0K1bdyQnt0BWVhamTJmC6dOnu52ZqKmwNIlkVlcxfPzxWkycOMHt56pZcJVqlnhUVDSaNWuOpKRk59dtt93m0ms0NJsrXnnlVYwdOwZnzpzG5MmTm+Q1iBqDVzkhClJbtmzGlVdeKXeMak6cOIFJkybKHYOoXhxpUtBasGABunS5CsnJLdCpU2csXrzY+diJEycQFRWNlStXonPnLkhNTcWUKVNgtVoBACUlJbjlllvQpk1bpKSk4vrrr8cvv/xS5+s8/fTTmDJlSrX75s//B8aMGYusrCysXr0GS5e+g6SkZHTv3gMAcMMNN2DhwoXO7X/6aR+GDRuOli1boXXrNnjiiSc8vTtcVjVb5cj2vffeR4cOl6NVqzQ8//wL9f7sO+8sw5VXdsL//ve/Wo+1a9ceJ06cwL33TkBSUjKOHj1aa5u9e3/CoEGDkZqaim7dumPt2rUAAJvNhuTkFs7n3bRpE6KiorF161YAwMGDB5Gamuq8IhBRQ7E0KWilpKTg00834vTpU3jrrTfx/PMvIDs7u9o2X365Fdu3b8OuXbvw3/9uw+rVqwFUXEl+7Nhx2L//Z/z22/9w5ZVX4v/+724IUftUznfccQc2bvwUJSUlzvs+/PBD3H777Zg8eTJuumkcJky4F2fPnsGuXdm1fv7s2bMYMWIERo4ciSNHDuPAgV8watQoD++NhjOZSnDkyGHs3bsHmzd/gaVLl2L79u21tps1axaWLl2KL77YhPbt29d6/Lff/oeUlBZ4552lOHv2DNq2bVvtcaPRiDFjxmDMmNE4duwY5s+fhwcffAjZ2dkICQlBz549sW1bxetu27YNaWlp1W737t1b1gtrU2BgaVLQGjlyJFq0aAFJktCvXz9cd9212L59R7VtnnrqSURERKB58+a47rrrsG/fPgBAZGQkxowZjbCwMISGhuLpp5/G0aNHce7cuVqv06FDB1x22WXYsGEDAGD37t0wGAwYOvR6l3KuWrUanTp1wsSJExAaGgqdTodevXo17g8P4PrrhyI1NdX5NWfOnAY9jxACzz33HEJDQ3HZZZehW7duzv0EAHa7Aw8++BC2bduOzz//HElJSQ16nS1btkCv1+O+++6DSqVCnz59MHbsWHz44UcAgL59+zrLetu2bZg+/alqt/v169eg1yWqiqVJQWv16tXo27cfWrZshdTUVGzZ8iUKCvKrbZOQkOD8PixM5xwtms1mPProY+jYsSNatEhxzg3m51f/+Uq33347PvzwQwDAihUf4qabxtV5keW6nDp1Cm3atHFpW5VKBavVVut+q9WGkJDql8/atOlznDx50vnV0FWqkZER0Ol0zttV9xMAnDlzGitXrsQTTzyBmJjoBr1GxfOcrbXIqVWrVjh79iyAitLcsWMHDAYDDIZ8jBs3DidPnkRhoRE7d37H0iSPYGlSUDp16hQmT56CGTNm4Nixozh58iQGDRpY5+HVuixYsAD79u3DF198gdOnT2H//v0AUO/Pjx07Bj/9tA+HDx/G+vXrqq1UVSgu/s8wJSUFx48fdylXSkoKysrKql3BHgB+//33OlfVekNqaipWrPgAEyZMqPOwrauSk5Nw8uTJavedPHnSOXLt1OlKWK0WLF682HkotkePHli0aCFUKhU6dOjQqD8HEcDSpCBVWloKIQTi4/VQKBTYsmULvv76G5d/vrjYhNBQDaKjo1FSUoIZM1656PaRkZEYMWI4JkyYgNTUlujUqZPzsfj4BPzxxx/1Fu5NN43D3r178c47y3D+/HmUlZXhu+++q3Pb5ORk9OnTG88++ywKC42w2WzYsmULNm3ahLFjx7j85/O0gQMHYsmSJbjzzrvw7bf/beBzDEJeXh6WLFkKm82G7777DmvWrMEtt9wMAFAqlejVqxcWLcpC3759AQD9+/fDokVZ6NOnj09cQJn8H0uTgtLf/vY3PP74Yxg+fARatUrDunXrcP31rs0xAsD990+DQqFEu3bt0bNnT3Trln7Jn7njjjvwyy8HcPvt1T8Peeedd+Ls2XNo2bJVnXOVycnJ2LhxA9auXYN27dqhY8crnfOjdVm2bBkkSULPnj3RunVrzJw5C8uWvYPOnTtX227QoMHVPqd5zTXXuvaHb6CMjOuwbNky3H333fjqq6/d/vmYmGh8/PFarF69GmlprfHQQw9j/vx56Nmzp3Obvn37ori42Hkotn///tVuEzWWZLNZXTseRUSNcurUKVx11dU4cuQwYmNj5Y5DRA3AkSaRF9jtdvzzn//CqFE3sjCJ/BjPCETUxP744w/07NkLLVu2xJo1q+WOQ0SNwMOzRERELuLhWSIiIhexNImIiFzE0iQiInIRS5OIiMhFLE0iIiIXsTSJiIhcxNIkIiJyEUuTiIjIRf8P4xO7QX487Y4AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# tabench.viz returns library-style Figures (not pyplot-registered); display each inline.\n", "# 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 anchor recomputed above: on-diagonal == reproduced.\n", "display(viz.plot_flow_scatter((\"analytic UE\", ref_flows), {\"bfw\": final.link_flows}))" ] }, { "cell_type": "markdown", "id": "7158ef45", "metadata": {}, "source": [ "## Takeaways & pointers\n", "\n", "- **Certified, not self-reported.** The gap above came from `Evaluator`, recomputed\n", " from the emitted flows in this notebook — the self-report was only diffed against\n", " it.\n", "- **BFW earns its place**: it reaches machine-precision UE on Braess in the handful of\n", " iterations printed above; on Winnipeg it heads the solver ladder (see the\n", " [README](../../README.md) table — run it, don't quote it).\n", "- **Where next.**\n", " - The tail it fixes: [`fw`](03-fw.ipynb) · the one-conjugate variant: [`cfw`](04-cfw.ipynb)\n", " · the simple baseline: [`msa`](02-msa.ipynb).\n", " - Lineage and \"what it does differently\": the Mitradjieva & Lindberg (2013) entry in\n", " the [model compendium](../../docs/MODELS.md).\n", " - Oracle validation (best-known flows, cross-solver agreement):\n", " [docs/VALIDATION.md](../../docs/VALIDATION.md).\n", " - The full matrix: `tabench run --scenario siouxfalls --models fw,cfw,bfw` or\n", " `run_experiment(...)` 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": "bfw" } }, "nbformat": 4, "nbformat_minor": 5 }