{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "(user_guide_optimization_aco)=" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Ant Colony Optimization (ACO)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "📖 {ref}`Optimization API Reference `" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ant Colony Optimization (ACO)** is a metaheuristic inspired by how real ant colonies find short paths between their nest and a food source. A single ant explores more or less at random, but it deposits a chemical trail (pheromone) as it moves. Ants that happen to take a shorter path complete more round trips per unit time, so their pheromone accumulates faster.\n", "\n", "Because ants are more likely to follow trails with stronger pheromone, short paths get reinforced, and over many iterations the colony's collective behavior converges toward good paths -- without any single ant \"knowing\" the best route.\n", "\n", "Algorithmically, every ACO variant repeats the same three-step loop:\n", "\n", "1. **Construct solutions** -- each of `nAnts` ants builds a candidate solution, using the current pheromone information to bias (but not fully determine) its choices.\n", "2. **Evaluate** the constructed solutions with the objective function.\n", "3. **Update the pheromones** -- existing pheromone evaporates a little (so the colony can forget bad decisions and keep exploring), and the ants that constructed good solutions deposit new pheromone that reinforces the choices they made.\n", "\n", "This loop is implemented once, in {py:class}`~sigmaepsilon.math.optimize.aco.AntColonyOptimization`, which also takes care of bookkeeping shared by all variants: tracking the best solution found so far (the *champion*), counting iterations and function evaluations, and stopping either after `maxiter` iterations or once the champion hasn't improved for `maxage` iterations in a row (stagnation). What differs between problem types is *what* a \"solution\" is and *how* pheromones are represented, so the base class leaves `construct_solutions` and `update_pheromones` abstract, and two concrete subclasses fill them in:\n", "\n", "* {py:class}`~sigmaepsilon.math.optimize.aco.ContinuousAntColonyOptimization` (**ACOR**), for\n", " unconstrained-shape, box-constrained problems over continuous real-valued variables.\n", "* {py:class}`~sigmaepsilon.math.optimize.aco.CombinatorialAntColonyOptimization` (**Ant System**),\n", " for permutation problems defined over a distance matrix, the classic example being the\n", " Traveling Salesman Problem (TSP)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## When to use it (and when not to)\n", "\n", "ACO is a good fit when:\n", "\n", "* the search space is not smooth enough (or not known in closed form) for gradient-based\n", " methods, so you need a derivative-free, population-based search, and\n", "* the problem has either a natural continuous, box-constrained structure (use ACOR), or a natural *sequencing / permutation* structure with a notion of pairwise cost between elements (use the combinatorial variant) -- routing, scheduling, assignment-like problems.\n", "\n", "It is usually **not** the right tool when:\n", "\n", "* the objective is linear (or convex) and constraints are linear -- use [Linear Programming](lp.ipynb) (`linprog`/HIGHS), which will find the *exact* optimum, faster and deterministically.\n", "* the problem is smooth and gradient information is available -- a gradient-based nonlinear solver will typically converge faster and more reliably than any metaheuristic.\n", "* you need a real-valued box-constrained search but don't have a combinatorial structure -- the\n", " library's [genetic algorithms](bga.ipynb) solve the same class of problems as ACOR and are worth comparing against; neither is strictly better; ACOR tends to do well when good solutions cluster together in a few regions, while GAs with crossover can be better at\n", " combining unrelated partial solutions.\n", "\n", "As with any metaheuristic, ACO gives you *no optimality guarantee* -- only a good solution found within a finite budget of iterations and function evaluations." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Continuous ACO (ACOR)\n", "\n", "`ContinuousAntColonyOptimization` implements ACOR (Socha & Dorigo, 2008). Instead of a\n", "pheromone matrix, it keeps a **solution archive**: the `archive_size` best solutions found so\n", "far, sorted by fitness. In each iteration:\n", "\n", "* every ant picks one archive member as a \"seed\", with better-ranked members picked with higher\n", " probability (the `q` parameter controls how strongly the choice is biased toward the best\n", " solutions -- small `q` means an almost greedy pick, large `q` gives near-uniform choice among\n", " archive members),\n", "* the ant then samples a new candidate solution from a Gaussian centered on that seed, with a\n", " per-dimension standard deviation derived from how spread out the archive is along that\n", " dimension, scaled by `xi` (larger `xi` means wider sampling, i.e. more exploration),\n", "* the newly-constructed solutions are merged into the archive together with the previous\n", " members, and only the `archive_size` best survive -- this *is* the pheromone update: the\n", " archive itself plays the role of the pheromone trail, since it is what future iterations\n", " sample around.\n", "\n", "So the archive both memorizes the current best-known solutions and, through its spread,\n", "controls how far new solutions can stray from them -- shrinking automatically as the population\n", "converges." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "([0.9406787636842728, 0.8836126174149843], 0.0036787582098673152)" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sigmaepsilon.math.optimize import ContinuousAntColonyOptimization as ACOR\n", "\n", "\n", "def rosenbrock(x, a=1.0, b=100.0):\n", " return (a - x[0]) ** 2 + b * (x[1] - x[0] ** 2) ** 2\n", "\n", "\n", "ranges = [[-5, 5], [-5, 5]] # box constraints for x0 and x1\n", "\n", "acor = ACOR(\n", " rosenbrock,\n", " ranges,\n", " archive_size=30,\n", " nAnts=20,\n", " q=0.3,\n", " xi=0.7,\n", " maxiter=200,\n", " minimize=True,\n", " seed=42,\n", ")\n", "result = acor.solve()\n", "result.phenotype, result.fitness" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Rosenbrock function has its minimum at $(1, 1)$ with value $0$; the result above should\n", "land close to it. `solve` returns the champion as an\n", "{py:class}`~sigmaepsilon.math.optimize.aco.AntSolution` (with `.phenotype` and `.fitness`); the\n", "same information is also available afterwards via `acor.best_phenotype()` /\n", "`acor.best_candidate()`, and `acor.state` exposes the run's iteration/evaluation counters." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "(23, 490, True)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "acor.state.n_iter, acor.state.n_fev, acor.state.success" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If your objective function can evaluate a whole batch of candidates at once (e.g. vectorized\n", "NumPy code), pass `vectorized=True` so all `nAnts` candidates of an iteration are evaluated in a\n", "single call instead of one Python-level call per ant; for expensive, non-vectorizable objectives\n", "you can instead parallelize across ants with `n_jobs` (`-1` uses all available CPUs)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Combinatorial ACO (Ant System / TSP)\n", "\n", "`CombinatorialAntColonyOptimization` implements the original Ant System algorithm (Dorigo et\n", "al., 1996) for problems defined over a symmetric `distance_matrix`, most naturally the\n", "Traveling Salesman Problem: visit every node exactly once and return to the start, minimizing\n", "total travel distance.\n", "\n", "Here the pheromone really is a matrix $\\tau_{ij}$, one entry per directed edge between nodes,\n", "initialized to `tau_init`. Alongside it, a fixed heuristic desirability $\\eta_{ij} = 1 /\n", "d_{ij}$ favors short edges regardless of pheromone. Each ant builds a full tour node by node,\n", "starting from a random node and, at every step, picking the next unvisited node $j$ from the\n", "current node $i$ with probability proportional to\n", "\n", "$$\n", "\\tau_{ij}^{\\alpha} \\cdot \\eta_{ij}^{\\beta}\n", "$$\n", "\n", "so `alpha` controls how strongly the ants trust accumulated pheromone (experience) and `beta`\n", "controls how strongly they trust the raw distance (greediness). After all ants have built a\n", "tour, pheromone evaporates everywhere by a factor `(1 - rho)`, and every ant deposits\n", "`Q / tour_length` on each edge of its tour -- so shorter tours reinforce their edges more\n", "strongly, and edges nobody uses keep fading away." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "([11.0,\n", " 14.0,\n", " 3.0,\n", " 4.0,\n", " 2.0,\n", " 13.0,\n", " 8.0,\n", " 12.0,\n", " 0.0,\n", " 7.0,\n", " 6.0,\n", " 5.0,\n", " 1.0,\n", " 10.0,\n", " 9.0],\n", " 377.30547906545553)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "from sigmaepsilon.math.optimize import CombinatorialAntColonyOptimization as AntSystem\n", "\n", "rng = np.random.default_rng(0)\n", "n_cities = 15\n", "coords = rng.uniform(0, 100, size=(n_cities, 2))\n", "distance_matrix = np.linalg.norm(coords[:, None, :] - coords[None, :, :], axis=-1)\n", "\n", "\n", "def tour_length(tour):\n", " return sum(\n", " distance_matrix[tour[i], tour[(i + 1) % len(tour)]] for i in range(len(tour))\n", " )\n", "\n", "\n", "aco = AntSystem(\n", " tour_length,\n", " distance_matrix,\n", " alpha=1.0,\n", " beta=3.0,\n", " rho=0.3,\n", " nAnts=30,\n", " maxiter=150,\n", " minimize=True,\n", " seed=0,\n", ")\n", "result = aco.solve()\n", "result.phenotype, result.fitness" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`result.phenotype` is the visiting order of the cities; let's plot the resulting tour." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgUAAAIQCAYAAAARhx0lAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAdZtJREFUeJzt3Ql4TOf3B/Bv9kRWQhLZJHZqp1WqpaUUVUu15aet6m6rparU1qJVqv52Wt1bqqWWUEvtqnZKaVFLECGJLSvZ5/+cdzojEwlJzGS27+d5RjI3V3JzZzL3zPuec14HjUajAREREdk9R7s/A0RERKQwKCAiIiKFQQEREREpDAqIiIhIYVBARERECoMCIiIiUhgUEBERkcKggIiIiBQGBURERKQwKCAyg9TUVLz66qsICgqCg4MDBg8ebJGPw9mzZ9XxffPNN0Xa/+eff0a5cuXU76cTERGBl156CZZOjtHLy8vch2H1/vnnHzg7O+Po0aPmPhQqAQYFVCxycZCLRN5bQEAAHn30Uaxdu9ZkZ/PGjRt4//33sXXr1iK/MMn+clGzRB999JE6l3379sX333+PF154AdYuJycH48aNw8CBAy324lrc55G5LF++HO3atUNwcDDc3NwQGhqK7t2733ahld8j/99j3tuHH36o37dVq1aF7ufi4nLXY1qwYAFatmyJwMBAdUyRkZHo06fPbX9jtWvXRseOHTF27FgjnhEqLc6l9pPIpowfP169KMjSGfHx8eoC16FDB6xatQpPPvmkSV7MP/jgA/2LW1GCAtlf9pV3qpZm8+bNePDBB9VF1FbIY3/ixAm8/vrrsFTFfR6Zy5EjR1C2bFkMGjQI5cuXR1xcHL766is88MAD2LVrF+rXr6/2q1Wrlgoq85Ntv/32G9q2bavfNmrUKDU6lVdaWhrefPNNg/0K8+eff6q/+aeeekodW3R0tAoUVq9ejcOHD6sARke+p7wenD59GlWqVLnHs0GliUEBlUj79u3RpEkT/f1XXnlFvYP48ccfTRIUWJv09HS4urrC0bHgwbiEhAT1jsqWfP3113jooYcQEhJi7kOxegW9y5YLuowYzJs3D/Pnz1fb5G/u+eefv21fCXyqVauG+++/X7/t8ccfv22/H374QX3s1avXXY9p7ty5t23r0qWLeh347rvvMGLECP32Nm3aqMDh22+/VW8gyHpw+oCMws/PDx4eHmouMa/c3FxMnz4d9913H9zd3dWL2BtvvIHr168b7Ld//341XCrviuT7yDuSl19+WX1NhicrVKigf7HTDXnKMHBBZNTimWeeUZ/LtIZu/7xDxvICJ8ckw6DyDqd///5ITEw0+D6FzYXLO8y87zJ1Q7iLFy/G6NGj1UWxTJkySE5Ovu3/6vaVd1m//vqr/th0Q7ASLOgCLDlf8o5QXlgL+h75h8ALmv/XzZPHxsaqF3D5XM7lsGHD1HB/XvL7y/6+vr7q8ezdu/dt5+ROQdC6devUxaAo5PtKHkVYWJh6DKpWrYrJkyer50v+32fq1Kn4/PPP1TtO2VcudPv27bvtey5ZskQFWnLe6tSpo4bg5ffRjRQV9XlUlHNlDjJNJ8+ruz0me/fuxalTp4p0oV+0aBE8PT3RuXPnEh2T7tzmPyaZjpC/kZUrV5bo+5L5cKSASiQpKQlXrlxR0wdyIZs1a5ZKLsv/rkUCALlIydzjW2+9pS6Gs2fPVkORf/zxh3rxkP8vw5fyAizvNuSCJC/gy5YtU99Dtsu7I5l/79q1K7p166a216tXr8Bje+SRR9TPmjlzJt577z01xCp0H+UiIBcFuYDJ95Qhb/n+cqHRHVNJTJgwQY0OyEUkIyNDfZ6fbrh3yJAh6l3f22+/rf8db968qV5I5QV9wIABKjCSC51c2ORFV4aSS0IuaBJwNW3aVF1gN27ciE8//VRdZOX3F/I4yoVhx44dauhXjlMuqhIYFMWBAweQmZmJRo0aFWkIX+am5eIrz4/w8HDs3LkTI0eOxKVLl1QQmf/ClZKSovaVi/iUKVPUc+DMmTP6x0oCrOeeew5169bFpEmTVNApwVXeUYuiPI+Kcq4KI89/CY7uRo5ZAq+ikMc9KytLTR/IeZFAs3Xr1nf8PwsXLlQf7xYUXL58GRs2bFDnTQKDorp69ao6T+fPn9ePAhR0TI0bN1ZBgRyzj49Pkb8/mZmGqBi+/vprjTxt8t/c3Nw033zzjcG+v//+u/rawoULDbavW7fOYPvy5cvV/X379hX6cy9fvqz2GTduXJGOc8mSJWr/LVu2GGxPSEjQuLq6atq2bavJycnRb589e7ba/6uvvtJvq1SpkqZ37963fe+WLVuqm478DPm/lStX1ty4caNIxyffu2PHjgbbpk+frr7PDz/8oN+WmZmpadasmcbLy0uTnJxs8PPy/27R0dFquzxGOnL8sm38+PEG+zZs2FDTuHFj/f0VK1ao/aZMmaLflp2drXn44Ydv+54F+eKLL9R+R44cKfB3zXseJ0yYoPH09NT8+++/BvuNGDFC4+TkpDl//rzB7+Pv76+5du2afr+VK1eq7atWrdJvq1u3riY0NFSTkpKi37Z161a1n/z8ojyPinquCqP7/3e75X3u3E2NGjX0/0+eA6NHjzZ43uYnj1lgYKDmgQceuOv3njVrlvq+a9as0RSH/K3rjkkem5kzZxa436JFi9Q+e/bsKdb3J/PiSAGVyJw5c1C9enX1uSQaytykzHl6e3vr34HJu1x5RyRzmTKqkPcdhAzNbtmyBf/73//UyICQhCUZLi/pO/WikHd+8o5Whq7zzve/9tpralRB3nHKqEZJyLtqmfooqTVr1qgSxZ49e+q3ybmQUQ/Ztm3bthLna8i7/7wefvhhgwQ1+dky9ZP33bCTk5OqJPj999+L9O5RyDzy3cjzQn6+7Jv3eSEjNx9//DG2b99u8C5X3snm/b7yf4WMFIiLFy+qxDx5/PJWPchohIwcFDSNcy/nqjDDhw8vcH4/v6Kco7x5GnL88rvK5zKaJO/SC8tV2bRpk/p7lHNxNzICI6MnBeUa3IlUGcmIyLFjx9TfvSQr3un3zPsYk+VjUEAlIlnQeRMN5aLVsGFDNewtFy4ZOj958qSaZpC50ILItIHuxfvpp59WQ/r/93//p4bQZU5XAgaZQzamc+fOqY81atQw2C7HW7lyZf3XS0KG++/12CQ5LP8Lvm7ao6THJnPsurn0vC/YefM65HtXrFjxtlLC/OfpbmQa4m7kefHXX3/ddkz5nxc6Mr2Q/9iF7vh150XyEvKTbQcPHjTquSqM5DMYO3m0WbNm+s979Oihfy7I1EZhUwcSzEkgdScSZEgVg/y95s8DuhvJ09ElG8uUk+RvyPNGvldBzwWZ8iHrwaCAjEIuZPJiMWPGDPWiL0l8kjQmAYFujjM/3YuvvGgsXboUu3fvVmVt69evV0mGMpcr28xV817Yi5m8U5MX3vzuZZTAWMdVkIKO1dj8/f3VR7l4Sq7EncjzQt6dyjvrguhGoO52/EUJQIrrXs6VBMDyTv5uJACVBk/FJcHJY489pv6eCgoK5GdLHoiMuEii6t1GCURRkhHvRHIt5M2AHFP+oEAXSEnyMFkPBgVkNNnZ2eqjrpudvGDIcL2UqRXlgil1+3KThivyoiUvWJLRL9MSxX23Udj+lSpVUh8luVBGBnRkSkGSIPNmz8uLcEGZ3vLONO//NRY5NnkHLRfNvKMFx48fNzh23Tvl/Md2L6Mc8r1l6Fkeu7xBmJynoqhZs6b6KOdQhuzvRJ4X8nOKWqlwN7rzIgma+eXfZsp3rZIImr9SpCAyMlbS5kly4ZfgoyBRUVEqIbOoVQfyOMjf272SY5LE2vzkuSDP4/xBHlk2liSSUUiGtDRLkXdBuiHOZ599Vr17laz8ggII3UVN3lHkf9fXoEED9VH3YiOlWKKoJXK6bOr8+8uFSI5RKhPy/swvv/xSvdhKJzYdedGUkQoJGHQk7yEmJgamIM1eJMv8p59+MjhPUtkhF2q5mOgugvKOVube71ZHXpyfLT9LsvN15LGTn10Ukici51VKS+9GnhcydC0jQvnJ46ULLotKSkplCFtq5fO2V5YcDMk1yKu4z6PikJEPyea/201GwO4m/xSKkIocCdzyTtvlv9DL7yeVFXcilT+SDyDTc4WRpkNy05HHpKApFCl/lHNc0DFJRYqMGBa10oIsA0cKqEQk2Uj3DlZewOQFSaYNpKRQV34kFzEpI5MSsUOHDqmyQ0mck/0k2UymGqR1q7y7kguavJjJhVje7UinNPk+crESMtIg87VywZR3HjL8KhcCuRVEggq5cErtu1zsJTdBhl5lOkNK3yR/4YknnlDd2eTdsPx8qX/PmygmIxQyrSH7yYVMXiQlscpUHdqkE+Bnn32mShDlBVVqwOXnS5mklKNJEqeQF1npwyAXbHnnK8cjwUpBF5Ki6tSpkxrRkcdPLj5yrqUktLB3pQXNxcvjKyNDd2tW884776h3tZJ7Ir+rBBSSrCYXF/l95ecXd8hZ2kbL/Lb8DpIoKhcwKX2V50feQKG4z6PiMGZOgYy2SJmfPI9lZEj+ZiRwleBbkjHzu3btmvqblNycu023FaVkUVdiqOufIedQekpIroJc6CXolsdLkh/l+ThmzBiD/y/HKUFZv379SvT7kxmZufqBbKAk0d3dXdOgQQPNvHnzNLm5ubf9n88//1yVdHl4eGi8vb1V+djw4cM1Fy9eVF8/ePCgpmfPnprw8HBV7hQQEKB58sknNfv37zf4Pjt37lTfR0oKi1KeuGDBAlUmKGVu+Uv4pASxZs2aGhcXF1XC1bdvX83169dv+x6ffvqpJiQkRB3XQw89pI6psJJEKYMsqoJKEkV8fLymT58+mvLly6vfU85VQeWAUlr39NNPa8qUKaMpW7as5o033tAcPXq0wJJEKf/LT85d/j//q1eval544QWNj4+PxtfXV33+559/FqkkUSxbtkzj4OCgLym8U2mnlA6OHDlSU7VqVfV7yu/bvHlzzdSpU1UZZt6SxE8++eS2n1XQ47948WL1mMpjVadOHU1UVJQ6R7KtKM+j4pwrU5Of2aRJE/XYOjs7a4KDgzU9evTQ/PXXXwXuP3/+fHWM8jvfiZQzyvO5UaNGd9xPHrO8pZwZGRmaQYMGaerVq6eeH/J3I19/5ZVX1OOU39q1a9XxnDx5ssi/M1kGB/nHnEEJEdkGmW6Qd8oyqlLQlJE5yDttSWiVYXsqPVI9JKNYkvhI1oU5BURkFDJdI1MH0sMi75B9aZDh6vy5CJLMJwv1WPLCR7ZI8hVkOstSAkMqHo4UEJHVk7lvSSKVnBBJPJR8F1k0SOa7ZblhXckkEd0ZEw2JyOpJMp4kLH7xxReqp78kwkkliSTlMSAgKjqOFBAREZHCnAIiIiJSGBQQERGR9eYUSBtYWRlNmrlwsQ0iIiJD0m1AGsFJ4m1hq2raTFAgAYF01yIiIqLCSVv2uy1SZvVBga7dq/yyupa6REREpJWcnKzePOuulzYdFOimDCQgYFBARERUsOJOsTPRkIiIiBQGBURERBZu+/btajVTSRyUd/8rVqww+Pr777+PmjVrqsZd0sxLVoAtCQYFREREFi4tLQ3169dXa4sURJYCl+XCZUnrHTt2IDw8XG2/cuWK7Xc0lAQK6Wkua70zp4CIiOyJw38rUMpqlIW5cOGCSjRcuXJlsUYNOFJARERkQzIzM/HNN9+oz+vWrWv71QdERERkSJas7tGjB27cuIGgoCC1rbgLgjkaO9lBZiPGjh2LihUrwsPDQy1nevLkSYN9rl27hl69eqmhfz8/P7zyyiulvv46ERGRLXn00Udx6NAh7Ny5E61bt1bbZNVQkwYFd0t2mDJlCmbOnKnWMt+zZ4/KhGzXrh3S09P1+0hA8Pfff2PDhg0qspFA4/XXXy/uoRAREdF/5HpbtWpVPPjgg/pr9HfffQeTTh+0b99e3QoiowTTp0/H6NGj0blzZ/0BBQYGqhEFGdY4duwY1q1bh3379qFJkyZqn1mzZqFDhw6YOnWqGoEgIiIi4+QXFIdREw2jo6MRFxenpgx0pEqgadOm2LVrl7ovH2XKQBcQCNlfFmyQkYWCZGRkqIqDvDciIiJ7kZqaqqYG5Ka73srn58+fVyP47733Hnbv3o1z587hwIED6N+/v9rvThUKJg8KJCAQMjKQl9zXfU0+BgQEGHzd2dkZ5cqV0++T36RJk1RwobtxMSQiIrIn+/fvR8OGDdVNDB06VH0uOXxOTk44fvw4nn76adWvQPL+JHdP1KpVy/aqD0aOHKlOQP6FHoiIiOxBq1at1BR9YZYtW1ZgP5/iMupIga4EIj4+3mC73Nd9TT4mJCQYfD07O1tFNbp98nNzc9MvfsRFkIiIiEzDqEFBZGSkurBv2rTJIFqRXIFmzZqp+/IxMTFRzXnobN68Gbm5uSr3gIiIyF7k5GiwdWsKfvzxmvoo983JuSTJDqdOndLf1yU7SE6A9FoePHgwJk6ciGrVqqkgYcyYMaqiQJfsIPMbTzzxBF577TVVtpiVlYUBAwaoygRWHhARkb1Ytuw6Bg26gAsXsvTbQkNdMGNGKLp1K2uWYyr22gdbt25VDRLy6927t2qrKN9u3Lhx+Pzzz9WIQIsWLTB37lyV/KAjUwUSCKxatUpVHUhyhPQ28PLyKtIxcO0DIiKy9oCge/do5L8COzhoPy5dGnlPgUFJr5NcEImIiKgU5eRoEBFx1GCEIH9gICMG0dF14OT0X5RQSkEBF0QiIiIqRb//nlpoQCBk9CAmJkvtV9oYFBAREZUSjUaDXbvSirTvpUuFBw6mYhV9CoiIiKzZpUtZWLjwGr777iqOHLm1FtCdVKzogtLGoICIiMgE0tNzsXJlIr799hrWr09Gbq52u4uLdPJ1wM2bmjvmFDz8cNGS742J0wdEZDU+/vhjtWS7lD4TWer0wB9/pOL1188hKOgIevQ4i7VrtQFBs2aemD8/DPHx9fDDDxH6SoO8dNumTw8tcZLhveBIARFZBVlZ9bPPPkO9evXMfShEtzl7NgPffSfTA9dw+nSGfnt4uCtefLEcXnihHKpXd9dvl3LDl15KxtdfXzX4PjJCIAGBufoUMCggIosnTdN69eqFBQsWqOZoRJYgJSUHS5fK9MBVbNt2q1LA09MR3bv7oXdvf7Rs6QVHx4Lf8Z87p13WuF+/8mjRwkvlEMiUgTlGCHQYFBCRxZNlYDt27KiWWWdQQObuMbB5c4oKBJYtS9TnBciw/2OPeaN373Lo1s0Pnp5Od/w+169nY9u2FPX50KGBqFLFDZaAQQERWbTFixfj4MGDavqAyFyOHbupEgZ/+OEaYmNvlQrWqOGmRgSef74cwsJci/z91q1LRk4OcN997hYTEAgGBURksWJiYjBo0CBs2LAB7u635mOJSsPVq9lYvPi6GhXYt++GfnvZsk7o0aOsCgYeeKCMSn4trqioJPXxqaeKv7yxKTEoICKLJaupylLrjRo10m/LycnB9u3bMXv2bGRkZMDJ6c7DtETFkZmZq6oFJBBYvToZWVna6QFnZ6B9e181PfDkk75wc3O8558hnnrKz6IeIAYFRGSxWrdujSNHjhhs69OnD2rWrIl3332XAQEZrYzw4MGbqrHQokXXceVKtv5rDRt6qBGBnj3LIiDAOM2Etm9PRVJSDgICnNVIgyVhUEBEFsvb2xt16tQx2Obp6Ql/f//bthMV18WLmVi4UDs98Pfft7oMBgU5o1evcioYqFvXw+gnVjd10KmTb6GVCebCoICIiOzGzZu5WLFC22Vww4ZbXQbd3BzQpYuUEZbD44/7qI6DphqVsNR8AsGggIisytatW819CFRCkyZNwrJly3D8+HF4eHigefPmmDx5MmrUqGHScyoX4h070tT0wM8/X0dy8n+RAICHHvJUIwLPPOMHPz/TXxKPHLmp+hO4uzugTZuiL2lcWhgUEBFRqdi2bZvqOXH//fcjOzsb7733Htq2bYt//vlHTQsZ25kzGfj+e+0iRGfOaBsFiUqVtF0G5Va1aulWtUT9N0ogoxFlyljeSgMMCojILA1gZK14WTnOErq4UelYt26dwf1vvvkGAQEBqsrkkUceMcrPkAS+pUslT+Caeo7peHk54plnpIywnHq+mWsuP8qCpw4EgwIiKlXLll3HoEEXcOFClkG/9xkzzNfvncwjKUl7gSxXrtw9B5kbN2q7DC5fnoj09FtdBtu0kS6D/ujSxfeuXQZLI7FR+h3IcUlZoyViUEBEpRoQdO8eDU2+FWOlQ5xsX7pUu1AM2b7c3Fy12uVDDz1U4kqSv/+WMkJtl8GLF28FmTVr3uoyGBpa9C6DpiZ9D0TTpp4ICjJOeaOxMSggolIh7+ZkhCB/QCBkm7x7Gjz4Ajp39uNUgh2Q3IKjR49ix44dxfp/0kPgxx+vqemBAwdudRksV84JPXtKGWE5NGlSsi6DphYVlWjRUweCQQERlQqZ3807ZVBQYBATk4VWrf5F7doeqFDBWTV3kY+GNxe4uFjeCz4V3YABA7B69WrVmTI0NLRIHQB//VXbZfDXX5OQ/V9vIeky2LGjdBn0R4cOPvfUZdDU0tJy1BSHYFBARHZPkgqLQkrH5HYnfn5OBoHCreDBpcDtrq6We7GwJ1IaOHDgQCxfvlyVlkZGRt5x3/37b6jpARkZuHo1R/+1xo3LqMoB6TIoj7k1+O23FGRkaFC5sitq17bcdTw4UkBEpUKqDIpi0KAKKFvWGQkJWbh8OdvgJkPH0mwmMTFH3U6ezCjS9/TxcdQHDAWPPsj2WwGFuzuDCFNNGSxatAgrV65U3Srj4uLUdl9fX9W3QMTGZqocAZkeOHYs3eD58/zzZfHii9LN0vhdBktv6sDPIqc2dBw0Eo5ZmeTkZPUkksxVHx/La/5ARAXnFEREHFVJhQW96sjrpFQhREfXKTSnIDdXg2vXcnD5smHAkJBgGDzI12WbBBGyPG1xSflaYSMQtwcVLhZZb26JCrsYzp//Jby8uqjpARli1z0/pMFP165+alRAGv2YqstgaTz3g4KOqOfj5s3V8Oij3hZ7neRIARGVCrnQS9mhVBnItaGgwGD69NA7JhlKbXn58s7qVqvW3X+mBBEyonAreLh99MEwqMhS89WpqblITc1EdPSthjd3IkFBQSMQeUcf8t48PR0t+t2iqeR9DyqPjeSZyIjAsGHXkZp6Vv816SMggYD0FfD1tf5VMHfvTlMBgUx7tWjhBUvGoICISo2UG0rZYf4+BR4eDvjhhwijlyNKEFGunLO6FaWTrly0pPlNwaMPBQcVmZka3LiRi7NnM9WtKOT3LSz/Ie8IhG67jFzYShBx6lT6f10Grxmcr8hIbZfBF17wR5UqbrAlUf81LJJkSEtPkuX0ARGZraOh3MaOvQQvLwdcuVLforPHCwsiUlJyCwwWDIOKLP02STYrLlmspygjENrAwkXlUJRmEHG3DpUSaMmaAzI98Mcft5JIvb0d8eyzkidQTr2DtrQVA42lVq2/cfx4BhYvjsBzz91boyZTTx8wKCAis5Eh5NDQo+pism5dVbRrZ9s5QhJEyNREUUYgtEFFFm7eLH4Q4eqqnWYpbAQi/zYZ1i5pEFFYh8pp00LVCIdMD6xceavLoKOjtu+/BAKyKqGt52P8+286atT4R5VPSuBbWtMhzCkgIqsj7wxlTfnPP7+isrNtPSiQC6+3t5O6Va7sVuT69ruNPuQNJtLSctWUhnT4y9vl707kgiVBREEjEAUlW5Yt66Qeu8I6VEqA8Oyz0QbbpAxPGgv16lUOISGW02XQ1Fat0k4dtGrlbRX5EcwpICKz6txZFxQkYfZsjc3MnRuL9OuXW0RE0YIIyW/IX52Rf/Qh7zaZ/pDkyri4bHUrCicnwN/fSVWC3Kl+TUYF+vYtj5de8le9BezxsY36L59AnufWgEEBEZnVY495q2x8eXf555830ahRGT4i90CG4ytVclO3okhPzy2wnLPgoCILycm5qswzIeHutZ7SU6J797Jo0sT4yyJbg6tXs7Fjh3alRhkRswYMCojIrKRRkEwbLFuWqOaeGRSU/vkPC3NVt6LIyMhV5XVSPfDeexeN1snSFq1Zk6QCo/r1PYocpJmbbWd4EJFV0PWC1w21kuWSChHJCWjWzNOonSxt0cqVSRa/1kF+DAqIyOxkURuZfz506CbOnSta62IyLyk7lCqDwtIEZHtYmLY80R6lp+di3TrtUskMCoiIikEy3x96yMsgW5uso0OlyB8Y6O7frUOlLdu6NUVVggQHu1jVlBhHCojIIuiys3VDrmQtHSojERJiOEUgIwiy3dgdKq1J1H9TYZJgaE1Nmdi8iIgswsmT6ahevfSbvJDpOxraG41Gg7Aw7eJfv/5aBR06lH5OAZsXEZFVq1bNHTVruql2sGvXJqFHj9JpB0v3TgIAac5DWlJaKwGBlIdKya014fQBEVmMzp391EdWIZA1i4pKVB/btfNWJZ/WxLqOlohsmi5Le82aZGRlFb/nP5EliPovn+Cpp7RBrjVhUEBEFqNpU0/Va19W1du+PcXch0NUbDExmWr6QEpsO3a0vrU8GBQQkUXNTT/5JBsZkfVa9V9JbfPmnmoRKWvDoICILLY0UbK4iayJNU8dCAYFRGRR2rTxgYeHA86dy8SRIzfNfThERZacnIPNm1OsrothXgwKiMiiSBnX449r52LZyIisyfr12gTZ6tXdUKOGO6wRgwIisjhcIImse+rAF9aKQQERWRxJNpT++fv330BsbKa5D4forrKzNfj1V+vOJxAMCojI4gQGuuDBB7VL83KBJLIGf/yRiuvXc+Dv71TkZaUtEYMCIrJIXCCJrHHqoGNHXzg7W++6DwwKiMgi6eZlJZs7JSXH3IdDVCgpndUlxVpzPoFgUEBEFqlmTXdUreqGzEyNyuomslTHj6fj9OkMuLo6oG1b6+timBeDAiKySA4ODvopBC6QRJYs6r+pg9atveHtbd1LfjMoICKLpRuKlaxuye4mskRRNlCKqMOggIgsVvPmXiqb+9q1HJXdTWRpEhKysGtXmvpct26HNWNQQEQWS7K4JZtbsLshWaLVq2WNDqBx4zIIDXWFtWNQQEQWLW9eARdIIksTZUNTB4JBARFZNMnmdnNzUNndx46lm/twiPRu3szFb79pK2MYFBARlQIvLyeV1S04hUCWZNOmFNy8qUFYmAvq1/eALeBIARFZPC6QRJYoKipRv9aBlNDaAgYFRGTxOnXSztfu2ZOGuLgscx8OEXJzNfp1OWxl6kAwKCAiixcc7Ir77y+jsrwl25vI3Pbvv4G4uGx4ezuiZUsv2AoGBURkZQskaYdsiSyh6uCJJyQR1nYupbbzmxCRTdOtUb9xYwrS0rhAEllGPkHnztrnpa1gUEBEVqFOHXdERLgiPV2DDRtSzH04ZMeiozNw5Eg6nJyA9u2tewGk/BgUEJFV4AJJZGlTBw8/7IVy5ZxhSxgUEJHVTSFIsmFODhdIIvOIsrEuhnkxKCAiqyHvzPz8nHD5cjZ279YuQkNUmq5fz8a2bSkGQaotYVBARFbDxcUBHTpo53BZhUDmsG5dMnJygNq13VGlipvNPQgMCojIquiyvXVDuESlKcqGpw4EgwIisipSFy4jBidOZODECS6QRKUnMzMXa9fa1gJI+TEoICKr4uPjhEcf1XaQ42gBlabff09FUlIOAgKc8cADnjZ58hkUEJHV0SV46RrIEJWGqP+mDp580hdOTraxAFJ+DAqIyOrohm537kzD5ctcIIlMT6PR2Hw+gWBQQERWJyzMFQ0beiA3F/j1V+0cL5EpHT2ajrNnM+Hu7oA2bbxt9mQbPSjIycnBmDFjEBkZCQ8PD1SpUgUTJkxQUZaOfD527FhUrFhR7dOmTRucPHnS2IdCRDZMV4XA0kQqDVH/TVU9/rgPPD2dbPakGz0omDx5MubNm4fZs2fj2LFj6v6UKVMwa9Ys/T5yf+bMmZg/fz727NkDT09PtGvXDunpzCQmoqLRDeH+9lsKbt7M5Wkjk1q50vanDkwSFOzcuROdO3dGx44dERERge7du6Nt27bYu3evfpRg+vTpGD16tNqvXr16+O6773Dx4kWsWLHC2IdDRDaqQQMPhIW54MaNXGzaxAWSyHQuXszEvn039EmGtszoQUHz5s2xadMm/Pvvv+r+4cOHsWPHDrRv317dj46ORlxcnJoy0PH19UXTpk2xa9cuYx8OEdnwAkmsQqDSsHq1Nm+ladMyCApysemTbvTlnUaMGIHk5GTUrFkTTk5OKsfgww8/RK9evdTXJSAQgYGBBv9P7uu+ll9GRoa66cj3JyKSodw5cy5j1aok5OZq4Ohom2ViZBn5BE/Z4FoHJh8p+Pnnn7Fw4UIsWrQIBw8exLfffoupU6eqjyU1adIkNZqgu4WFhRn1mInIOrVq5QVvb0fExWXrh3eJjCktLQcbN+oWQLLtqQOTBAXvvPOOGi3o0aMH6tatixdeeAFDhgxRF3YRFBSkPsbHxxv8P7mv+1p+I0eORFJSkv4WExNj7MMmIivk6uqI9u25QBKZzoYNKcjI0CAy0hX33edu86fa6EHBjRs34Oho+G1lGiFXCooBVaooF3/JO8g7HSBVCM2aNSvwe7q5ucHHx8fgRkQkuEASmVJUnoZFksdi64yeU9CpUyeVQxAeHo777rsPf/75J6ZNm4aXX35ZfV1O6uDBgzFx4kRUq1ZNBQnS1yA4OBhdunQx9uEQkY2TkQInJ+Dvv9Nx+nSGTS5nS+aRk6PB6tVJdpNPYJKgQPoRyEW+X79+SEhIUBf7N954QzUr0hk+fDjS0tLw+uuvIzExES1atMC6devg7m77QzNEZFxlyzqjZUtvbN6cohLChgwxTGImKqk9e6SNdjZ8fZ3w8MPaRbhsnYMmb6tBKyHTDZJwKPkFnEogohkzEjB48AW0bOmFrVur84SQUYwYEYvJk+PRs2dZLFoUaRfXSa59QERWT5cVvmNHKq5ezTb34ZCN5RN07mz7VQc6DAqIyOpFRrqhbl135OQAa9ZoX8iJ7sXJk+k4diwdzs7AE08wKCAisiqsQiBTjBK0auWtcgrsBUcKiMimphDWrUtGRgYXSCLjlSLaEwYFRGQTGjcug4oVXZCamostW7hAEpXc1avZKj9FdOrEoICIyOrIuge6d3W6d3lEJbFmjaylAdSr54GICPvqe8GRAiKyGXmDAiustiYLEWWnUweCQQER2YzHHvOGp6cjYmOzcPDgzWL933nz5qFevXr6VurSdn3t2rUmO1ayTBkZuSovRTAoICKyYu7ujmjXrmQLJIWGhuLjjz/GgQMHsH//fjz22GPo3Lkz/v77bxMdLVmirVtTVV6K5KdInoq94UgBEdkUXaOZ4uYVyLotHTp0UGuyVK9eXa3h4uXlhd27d5voSMkSRUUl6hMMJU/F3jAoICKb0qGDvJgDhw/fxNmzGSX6Hjk5OVi8eLFao6Ww1VvJ9mg0GrvOJxAMCojIppQv74wWLbSL16xaVbzRgiNHjqjRAVmu/c0338Ty5ctRu3ZtEx0pWZo//7yJCxeyUKaMI1q39oY9YlBARDZH9y5v5criBQU1atTAoUOHsGfPHvTt2xe9e/fGP//8Y6KjJEudOmjXzlvlp9gj+/yticgugoJt21KQmFj0BZJcXV1RtWpVNG7cGJMmTUL9+vUxY8YMEx4pWZIo/dSBH+wVgwIisjnVqrmjVi13ZGcDa9dqy8tKIjc3FxkZJctLIOsSE5Oppg8cHICOHYu+1LCtYVBARDapuFUII0eOxPbt23H27FmVWyD3t27dil69epn4SMkS6PJPmjf3RIUKLrBXDAqIyKanEKRlbWbm3RdISkhIwIsvvqjyClq3bo19+/Zh/fr1ePzxx0vhaMnc7L3qQMdZ/xkRkQ154AFPBAQ4IyEhG9u3p6JNmzsPCX/55ZeldmxkWZKTc7B5s3YRLXvOJxAcKSAim+Tk5KBf4Y4LJNGd/PZbMrKyNKhWzQ01atjXAkj5MSggIpulGwr+6afrWLToKrZuTUFODhdKosKnDhwk09COMSggIpuVlqbNJZAphF69zuHRR08iIuIoli27bu5DIwuRna3Br78yn0CHQQER2SS58Pfqdfa27bKCYvfu0QwMSNm5MxXXruWgXDknNG+u7YRpzxgUEJHNkSmCQYMuQFPATIFu2+DBFziVQPqul08+6QtnZ/ueOhAMCojI5vz+e6rqYV8YCQxiYrLUfmTfCyDpggJ7L0XUYVBARDbn0qUso+5Htun48XScPp0BV1cHtG1rv10M82JQQEQ2p2JFF6PuR7ZddfDYY97w9nYy9+FYBAYFRGRzHn7YC6GhLqqPfWEqVnRW+5H9YhfD2zEoICKbbFw0Y0ao+rywwEAWS5JFcMg+JSRkYdeuNPW5rskVMSggIhvVrVtZLF0aiZAQwymC4GAXNUpw+XK26ltw7hxXQbRHv/6arBJOGzXyQGioq7kPx2Jw7QMisunAoHNnP1VlIEmFkkMgUwZxcVkqIDh5MgOtWp3E1q3VUKmSfbe3tTdRUYnqo72vdZCfg0ZqMqxMcnIyfH19kZSUBB8fZowSUfHFxmaqgODUqQxERLgyMLAjN2/monz5v3DjRi4OHqyJhg3LwNYkl/A6yZwCIrJLISHaQKBqVTecPZvJqQQ7IisiSkAgyagNGniY+3AsCoMCIrLrwGDLFm1gEB3NwMBecAGkwjEoICK7Jklm+QOD8+dZlWCrcnM1+nwCyTchQwwKiMju6QKDKlW0gUGrVv8yMLBR+/ffQFxcNry9HdGyJftU5MeggIjovxEDyTFgYGAfUwdPPOEDNzdeAvPjGSEiKiQwePRRjhjYbikiGxYVhEEBEVEhUwlnzjAwsCXR0Rk4ciQdTk5Ahw4MCgrCoICIKJ+wMG1gULmyqz4wYEtk67dqlXbqoEULL5Qrx959BWFQQERUSGCwdWt1fWAgyYcMDKwbF0C6OwYFRESFYGBgOxITs7FtW4r6nAsgFY5BARFRMQID6WNg6hGD7du3o1OnTggODoaDgwNWrFhR6L5vvvmm2mf69OkmPSZrt25dsloZs1Ytd1Sr5m7uw7FYDAqIiIqUY6ANDE6fzlCBwYULpgsM0tLSUL9+fcyZM+eO+y1fvhy7d+9WwQPdGacOioZBARFREYSHawODyEhtYCCLKd1LYHCn0YD27dujUaNGmDdvnrrftWtXHDp0yOD/x8bGYuDAgVi4cCFcXAyXhyZDWVkarFmTrD5nKeKdMSggIipGYCBTCcYIDO42GiBfb9GiRYFfy83NxQsvvIB33nkH9913Hx+/u9i+PQVJSTkICHBG06aePF93wJoMIqISBAZSjaALDKThkfQ3KA4ZDZBbYeSiL8aNG3fb1yZPngxnZ2e89dZbfOyKMXXw5JO+cHJy4Dm7A44UEBGVaCqhmn7EwNQ5BnkdOHAAM2bMwDfffKOmHejONBqNPijg1MHdMSggIiqBSpXc9IHBqVPawCA21vSBwe+//46EhASEh4er0QK5nTt3Dm+//TYiIiJM/vOtzdGj6Th7NhPu7g5o08bb3Idj8RgUEBHdY2AQEaENDGQqwdSBgUwr/PXXXyrxUHeTZEXJL1i/fr1Jf7Y1r3UgAYGnp5O5D8fiMaeAiOgeAwPJKZCAQBcYyP2QkOLlGOSVmpqKU6dOGWw7ceIEypUrp0YI/P39Db4m1QdBQUGoUaNGiX+mrbo1deBn7kOxChwpICIyUmBgrBGD/fv3o2HDhuqm06NHD4wdO5aPVTFcupSFvXtv6JMM6e44UkBEZMSpBMkt0OUYyP3CRgzyjwZER0erqQAZDWjVqhWuXr2K8+fP4+LFi+jYsSMWL16sRgLi4uLUqEBeZ8+e5WNYgNWrtaMEDzxQBhUrspdDUXCkgIjISCIitIFBpUquOHnyzsmH+UcDhg4dqj7XjQZERUWp+xIQ6EYK5P78+fP5eBUzn4BVB0XnoJF6DSuTnJwMX19fJCUlwcfHx9yHQ0Rk4OxZ7RTCuXOZqFZNO7UQGOiC339PVUPa8q714Ye9WDNvQmlpOShf/i+kp2vw11+1ULeuh109S5NLeJ3k9AERkQlGDHTJhzJi0KTJcbX90qVs/T6hoS6YMSMU3bqV5fk3gQ0bUlRAIHkedepwAaSi4vQBEZERZWbmYvr0eHz6aTxefLEs/P0dVTCQNyAQsbFZ6N49GsuWXef5N4G8DYvY5KnoOFJARGQkw4dfwLRpCcjJufu+MnErDQkHD76Azp39OJVgRDk5Gn2SoZxbKjqOFBARGSkg+OSTogUEeQODmJgslWtAxrNnTxouX86Gr6+Tyt2gomNQQERkhCkDGSEoKUk+JONPHXTo4AMXF64PURwMCoiI7tHcuZeLNUKQH2vojYsLIJUccwqIiO7R/v3arnnFJTkFUoXAIW7jOXkyHceOpcPZGXjiCZasFxeDAiKie6iF//DDOPz4Y/ErCHSrHk+fHsokQyNatUo7ddCypTf8/HiJKy6eMSKiYpKebytXJmHQoAs4f75kaxzICIEEBOxTYFycOrg3DAqIiIrh9OkMvPVWDNasSVb3w8NdVROiP/5IxdSphScbvv12BTz5pB87GprQ1avZ2LFDW8nRqRMXQCoJBgVEREWQnp6LyZPjMWlSHDIyNCqrfdiwAIwaFQRPTyd06eKnpgTy9ylwcpJ1DQIwZUooz7OJrV2bpM593bruiIx04/kuAQYFRER3sWZNEgYOjMGZM9qpgtatvTF7dhhq1jRsnysX/okTg1U1gowoVKnihn79KsDVlYVepUGmdMRTT7FhUUkxKCAiKoTkCwweHIPly7UXm+BgF0ybFoJnny1baOtcCQAGDw7kOS1lGRm5WLdOO6XDVRFLjkEBEVEhzYgmTIjDjRu5agpg8OAAjBtXEd7eTjxfFmjr1lSkpuaqng9NmpQx9+FYLQYFRER5bN6cgv79z+P48Qx1X3oIzJ0bhjp17GvpXWsTFZWoTzB0dGQXw5JiUEBEBODixUy8/XYsFi/W9hwICHDG1KkheP75clxlzwpKRFmKaBwMCojIrmVlaTBrVgLGjbukhp8dHaGSAydMqMjmN1bi0KGbuHAhC2XKOOKxx7zNfThWjUEBEdktWZ1QpgqOHElX95s2LYO5c8PRqBHnpK2JbpSgbVtveHiw0uNeMCggIrsTH5+F4cNj8d1319R9f38nfPxxCF5+2Z/z0VacT8BSxHvHoICI7EZOjgbz51/BqFEXkZSUo5oNvfqqPyZNCoG/P18OrdGFC5k4ePCmeiw7duQCSPeKfwVEZBf27ElDv37n1QVENGrkoaYKmjb1NPehkREWQGrWzBMBAS48l/fIJJMvsbGxeP755+Hv7w8PDw/UrVsX+/fvN8gUHTt2LCpWrKi+3qZNG5w8edIUh0JEdk764b/++jk0a3ZCBQS+vk6YMycMe/fWZEBgU10MudaBRQYF169fx0MPPQQXFxesXbsW//zzDz799FOULVtWv8+UKVMwc+ZMzJ8/H3v27IGnpyfatWuH9HRtsg8R0b3KzdXgiy+uoEaNv7FgwVVoNEDv3uXw77+1VXWBkxNr2a1dcnKO6ishGBRY6PTB5MmTERYWhq+//lq/LTIy0mCUYPr06Rg9ejQ6d+6stn333XcIDAzEihUr0KNHD2MfEhHZmT//vIF+/WKwe3eaui8L5MyZE64aEZHt+O23ZFVSWrWq223rUJCFjBRERUWhSZMmeOaZZxAQEICGDRtiwYIF+q9HR0cjLi5OTRno+Pr6omnTpti1a5exD4eI7EhiYrZauKhJk+MqIPDyclRrFRw4UIsBgQ2XInbu7MsGU5YaFJw5cwbz5s1DtWrVsH79evTt2xdvvfUWvv32W/V1CQiEjAzkJfd1X8svIyMDycnJBjciorwjkN99dxU1avyD2bMvIzcX6NGjLE6cqI0hQwLVMsdkW7KzNfj1V+YTWPz0QW5urhop+Oijj9R9GSk4evSoyh/o3bt3ib7npEmT8MEHHxj5SInIFhw9elNNFUgjIlGzppta1rh1a5an2bKdO1Nx7VoOypVzQvPmnBay2JECqSioXbu2wbZatWrh/Pnz6vOgoCD1MT4+3mAfua/7Wn4jR45EUlKS/hYTE2PswyYiK5OSkoO3376ABg2OqYBAWtxOmhSMw4drMSCwo6mDjh194ezMkSCLHSmQyoMTJ04YbPv3339RqVIlfdKhXPw3bdqEBg0aqG0yHSBVCDLVUBA3Nzd1IyKSqYKff76OoUNjcfFiljohXbv6Yvr0MISHu/IE2clzgKWIVhIUDBkyBM2bN1fTB88++yz27t2Lzz//XN2Eg4MDBg8ejIkTJ6q8AwkSxowZg+DgYHTp0sXYh0NENuTEiXQMGBCDjRu1ZWhVqrhh1qxQtG/PGnV7cuJEBk6dyoCrqwPateM0kUUHBffffz+WL1+uhvzHjx+vLvpSgtirVy/9PsOHD0daWhpef/11JCYmokWLFli3bh3c3VlSQkS3u3EjFxMnXsLUqQmqBM3NzQEjRwbh3XcD4e7OBXDsda2DRx/1hre3k7kPx6Y4aGQcxsrIdIOUMUp+gY8Po0QiWx8mHjToAs6fz1TbOnTwwcyZYWqUgOxTixYn8McfaaozpTSiIuNdJ7n2ARFZpDNnMlTPgTVrtCXIki8wY0Yoa9LtXEJCFnbu1Dal6tSJ00bGxqCAiCxKenouJk+Ox6RJccjI0KgeA8OGBWDUqCB4enKo2N79+muyalndsKEHwsKYWGpsnIwjIouxdm0S6tQ5hvffv6QCgtatvfHXX7Xw0UchDAjIIJ9At9ZBTk6OSlaX/DVZYK9KlSqYMGGCmnqi4uNIARGZneQLDB4cg+XLtbXnwcEuqj3xs8+WZfta0rt5Mxe//aatPOnc2U+/3o500ZWuuffdd59akbdPnz5qPl266VLxMCggIrPJzMzFtGkJmDAhTlUYODkBgwcHYNy4iswqp9vIiojyPAkNdUGDBh5q286dO9Xieh07dlT3IyIi8OOPP6pyeCo+Th8Qkdle4OvXP4aRIy+qF3pZwfDQoVqYOjWUAQHdsYuhTB1IzxshfXGkGZ40yROHDx/Gjh070L59e57FEuBIARGVqosXM/H227FYvPi6uh8Q4IypU0Pw/PPlOFVAhcrN1WDVKl1QoJ06ECNGjFDldzVr1oSTk5PKMfjwww8NeuNQ0TEoIKJSIU2HZs1KwLhxl5CamgtHR6ga8wkTKsLPjy9FdGcHDtzApUtZajnsVq1uLYD0888/Y+HChVi0aJHKKTh06JDqmitdcku6CJ89418iEZmcLFjUv/95HDmSru43bVoGc+eGo1GjMjz7VKypgyee8IGb262Z73feeUeNFvTo0UPdr1u3Ls6dO6dW12VQUHwMCojIZOLjszB8eCy+++6auu/v74SPPw7Byy/7w9GRK9tRyfIJ8rpx4wYcZdgpD5lGyM3N5ektAQYFRGR0OTkazJ9/BaNGXURSUg4kJ+zVV/0xaVII/P35skPFc/ZsBv7666aacurQwTAo6NSpk8ohCA8PV9MHf/75J6ZNm4aXX36Zp7kE+NdJREa1Z08a+vU7j4MHb6r7jRp5qKmCpk09eabpnkYJWrTwui2onDVrlmpe1K9fPyQkJKhcgjfeeANjx47l2S4BBgVEZBRXr2Zj5MhYfPHFVdWG1tfXCR99JC/Q5eHkxKkCMv7UgfD29lYr8cqN7h2DAiK651Kxr766ihEjYnH1ao7a1rt3OUyZEoKAABeeXboniYnZ2LYtpdCggIyLQQERldiff95Av34x2L1bu2pd3brumDMnXDUiIrrXvBSpWvnll+vIzgZq1nRDtWruPKkmxqCAiEr07m3MmEuYO/cyJMlbasfHj6+IAQMC1KqGRPdi2bLrGDToAi5cyNJvi43NUtu7dSvLk2tCDAqIqMhk5bnvv7+Gd96JRUJCttrWo0dZfPppCIKDuYwt3Tu58HfvHq3yUvJKSclV25cuBQMDE+LaB0RUJEeP3kSrVifRu/c5FRDIcO7GjVXx44+RDAjIaFMGMkJwp1WPBw++oPYj02BQQER3lJKSg2HDLqBBg2PYvj0VZco4YtKkYBw+XAutW/vw7JHRSA5B3imD/CRYiInJUvuRaXD6gIgKnSpYsiQRQ4ZcwMWL2hfqrl19MX16GMLDOVVAxidrGxhzPyo+BgVEdJsTJ9IxYEAMNm7UloJVqeKGWbNC0b49S8LItKNSRVGxIktdTYVBARHp3biRi4kTL2Hq1AS1qqGbmwNGjgzCu+8Gwt2ds41kuufduHEXMW1awh33k3bZoaEuLHk1IQYFRKSmClauTFJJXufPZ6oz0qGDD2bODFOjBESmsmFDMt544zyio7XPu+bNy2DXrhvq87wJhxIQiOnTQ9kh04QY+hPZuTNnMvDkk6fRtesZFRBIvsDy5ZWxenUVBgRkMleuZOPFF8+ibdtTKiCQEYBVq6rgjz9qYunSSISEGE4RyNdlO/sUmBZHCojsVHp6LiZPjsekSXHIyNCopkPDhgVg1KggeHo6mfvwyIZHpRYuvIYhQ2JVYCAjAAMGVMCHHwbD21v7vJMLf+fOfqrKQJIKJYdAumRyDQ3TY1BAZIfWrk3CwIEXcPp0hrrfurU3Zs8OQ82abCNLphMdnYG+fWOwfn2yul+njjsWLKiEBx+8fQVNCQBatfLmw1HKGBQQ2RGZHhg8OAbLl2tXnQsOdsG0aSF49tmycNBN2hIZWXa2BjNmJGDs2EsqqVASWMeMCcI77wTC1ZWz2JaEQQGRHcjMzFWZ3RMmxKkXZScn6QwXgHHjKuqHbIlMtWjWa6+dx4ED2uTBli298Pnn4ahenaNSlohBAZGN27w5Bf37n8fx49qpApmbnTs3DHXqeJj70MiGSfD5/vvaMsOcHMDPzwmffBKCl1/2h6MjR6UsFYMCIht18WIm3n47FosXX1f3AwKcMXVqCJ5/vhynCsikNm7UlhmeOaMtM3z2WT/MmBGGoCA2HbJ0DAqIbIw0HZo1KwHjxl1CamouHB2Bfv0qYMKEivDz4588mc7Vq9kYOvQCvvvumr6MUEalOnXy42m3EnyFILIhUsIlUwVHjqSr+02blsHcueFo1KiMuQ+NbLzMcNGi62oFw8LKDMk6MCggsgHx8VkYPjxW/w7N398JH3/M+VsyvbNntWWG69Zpywzvu88dX3xRcJkhWT4GBURWTNaVnz//CkaNuoikpBz1Du3VV/0xaVII/P35502mLTOcOTMBY8ZoywxdXbVlhsOHs8zQmvFVg8hK7dmThn79zuPgwZvqfqNGHmqqoGlTvkMj0zp06AZeffVWmeEjj2jLDGvUYJmhtWNQQGSFyVwjR8biiy+uqgVjfH2d8NFHwXjjjfJsA0smJSMCH3xwCZ9+Gq/KDOW5J2WGr7zCMkNbwaCAyErk5mrw1VdXMWJELK5e1a4737t3OUyZEoKAAJZ6kWlt2iRlhjH61tjdu/upVTRlXQKyHQwKiKykK1y/fjHYvTtN3a9b1x1z5oRzXXkqlZGpt9++gG+/1SaxyuqFUmb41FMsM7RFDAqILFhiYrZK5Jo79zJycwEvL0eMH18RAwYEqFUNiUxZZvjjj9oyw8uXtWWG0u9Cpqp8fFhmaKsYFBBZ6AvyDz9cwzvvxCI+Pltt69GjLD79NATBwa7mPjyycefOacsM1669VWa4YEE4mjXzMvehkYkxKCCyMEeP3kT//jHYvj1V3a9Z000ta9y6tY+5D43soMR11qzLGD36ItLStGWGo0cH4d13WWZoLxgUEFmIlJQcldk9fbp2AZkyZRxV3ffQoQFcXpZM7vBh7WqG+/bd0C+cJWWGNWuyzNCeMCggsoCpgiVLEjFkyAVcvJiltnXt6ovp08MQHs6pAjKtmzdzMX78JXzyya0yQ6lokSZYXM3Q/jAoIDKjEyfSMWBADDZuTFH3q1Rxw6xZoWjf3pePC5XKstqymuGpU9oyw6ef9sOsWSwztGcMCojM1ARm4sRLmDo1Qa1q6ObmgJEjtXO37u6OfEzIpK5dy8awYbH4+uur+jLDOXPC0LkzywztHYMColKeKli5MgmDBl3A+fPateY7dPBRTWBklIDI1M+/n366rp5/CQnaMsO+fcurtTJYZkiCQQFRKTlzJgMDB8ZgzRptmZfkC8yYEYrOnX3hIK/ORCYkQWjfvuf1z7/atbVlhs2bs8yQbmFQQGRi6em5mDw5HpMmxSEjQ6OaDg0bFoBRo4Lg6ckmMGT6MsPZsy+rlTR1ZYby3JOpKjc3TlWRIQYFRCa0dm0SBg68oO8X37q1t+o5wDIvMkeZYYsWnqrMsFYtDz4AVCAGBUQmGqodPDgGy5cnqfvBwS6YNi0Ezz5bllMFVGplhlOnxiM7G/DxcVRlhq+9Vp5lhnRHDAqIjCgzMxfTpiVgwoQ4VWHg5AQMHhyAceMqwtubUwVU+mWG3bpJmWEo22NTkTAoIDLii3H//udx/HiGviOcrCZXpw6Haqn0ywxldErKDLt0YZkhFR2DAqJ7dPFiJt5+OxaLF19X9wMCnDF1agief74cpwqo1MsMha7MULoTEhUHU0/JrqWkpGDw4MGoVKkSPDw80Lx5c+zbt69I/1eaDk2bFo8aNf5RAYGjIzBgQAWcOFEbL7zgz4CASiV3pVOn0+jZ86wKCGrVcseOHdUxd244AwIqEY4UkF179dVXcfToUXz//fcIDg7GDz/8gDZt2uCff/5BSEhIof9vx45U9Ot3HkeOpKv7TZuWUS/EjRqVKcWjJ3uVv8xQylylzHDECJYZ0r1x0MjYk5VJTk6Gr68vkpKS4OPD5WSpZG7evAlvb2+sXLkSHTt21G9v3Lgx2rdvj4kTJ972fxISsjB8eCy+/faauu/v74SPPw7Byy9z8RgqHUeO3MSrr57D3r3aMsOHHvJUTYhYZkjGuE5ypIDsVnZ2NnJycuDubrg0rEwj7Nix47Z3Zp99dkW9M0tMzFHtYWUVOZm39ffnnxGVThOsCRMuYcqUW2WGkyeH4PXXWWZIxsNXM7JbMkrQrFkzTJgwAbVq1UJgYCB+/PFH7Nq1C1WrVtXvt3dvGvr1i8GBA9p3Zo0aeaipgqZNPc149GRPtm5Nweuvn8fJkxn6pbVlNcOQEC6tTcbFREOya5JLIDNokj/g5uaGmTNnomfPnnB0dMTVq9mq3vvBB0+ogEAyuaXEa+/emgwIqFRcv56tpgoeffSkCggqVnTBL79EYtmyKgwIyCQ4UkB2rUqVKti2bRvS0tLUHFzFihXx7LPPwcUlFDVq/I2rV3PUfr17l1Md4QICXMx9yGQHJFBdsiQRb70Vg/h4bZnhm2+WV/krLDMkU2JQQATA09NT3bZti8WyZWuRk/OWZBKgbl13zJkTrhoREZWGmJhMVdmyerV2NcOaNd2wYEEltGjB5yCZHoMCsmvr169X78oqVqyCsWP3IipqPIBK8PTsjAkTQjBgQIAq9yIyNUlmnTv3Mt577yJSU7Vlhu+9F4iRI4O4miGVGgYFZNcSE2WIdgQSEmIBSNlOa3Tr9h5mzarFXvFUqmWGr712Dnv2aJNZmzfXlhnWrs0W2VS6GBSQ3Tp69Cbmzm2IhIRf9MO0sqxx69bsfUGlV2Y4cWIcJk+OU2WG3t7aMsM33mCZIZkHgwKyOykpOfjgg0uYPj0BOTlAmTKOGDMmCEOHBsDVlQU5VDq2bdOWGf77r7bMsEsXXxWUssyQzIlBAdnk3Ozvv6fi0qUsVcIlSYJOTg76jO4hQy7g4sUsfb339OlhCA9nvTeVXpmhdMX84gvtaobyHJ09OxTdupXlQ0Bmx6CAbMqyZdrV4i5c0F70RWioC4YPD0RUVBI2bkxR26pUcVNrzLdv72vGoyV7IkHp0qWJGDjwVpmhTBN8/HEw/Pz4UkyWgc9EsqmAoHv3aORfzUMChLfeuqA+d3NzUNnc774bCHd3ThVQ6ZUZ9u8fg1WrkvT5K59/XomlrmRxGBSQzUwZyAjBnZb3cnd3wOHDtVC9uuFaB0SmfF7Om3cZI0feKjMcOTIQ773HMkOyTAwKyCZIDkHeKYOCpKdrVC4BgwIqreqW1147j92709T9Zs20ZYb33ccyQ7JcHD8lmyBJhcbcj2j79u3o1KkTgoOD4eDggBUrVuhPSlZWFt59913UrVtXdcKUfV588UVcvHhRlRmOGXMRjRodVwGBlBnKmhk7dlRnQEAWjyMFZBMkg9uY+xHJehj169fHyy+/jG7duhmckBs3buDgwYMYM2aM2uf6dUlwHYTHHntSltnCiRPaMsPOnbVlhqGhrG4h68CggGyClB36+zvpFzDKz8FBW4XANQyoqNq3b69uBfH19cWGDRv09xMTsxEcPAp793YGcBZBQWEqGOjWzU+NMhBZCwYFZBN27pRVDgsPCMT06aGqXwGRMcsMf/lFW2YYFyetsh3w0ksR+L//q8EyQ7JKzCkgm+gb36nTaWRlAU2alFEjAnnJ/aVLI9kchozqwoVMdOlyBs88E424uDS4uc1Gmzbd8fXX9zEgIKtl8qDg448/VsNngwcP1m9LT09H//794e/vDy8vLzz99NOIj4839aGQDTp7NgPt2p1CUlIOWrTwxPbt1XH2bB1s2VINixZFqI/R0XUYEJDR5OZqMGfOZdSu/Y9qiOXklIVq1cahVi03/PLLFzzTZNVMOn2wb98+fPbZZ6hXr57B9iFDhuDXX3/FkiVL1NzcgAEDVCLPH3/8YcrDIRtz+XKWCgikoqBOHXdERVWBh4c2zm3Vytvch0c26O+/tWWGu3ZpywwfeMAVXl7v48qVeGzcuBk+PlxMi6ybyUYKUlNT0atXLyxYsABly97q6Z2UlIQvv/wS06ZNw2OPPYbGjRvj66+/xs6dO7F7925THQ7Z4KJGHTqcVovJVKrkivXrq6JsWabIkOksWnQNDRseVwGBl5cjpk8PRMWKYxAffwYbN25UI59E1s5kQYFMD3Ts2BFt2rQx2H7gwAFV45t3e82aNREeHo5du3aZ6nDIhmRm5qJbtzPYv/8Gypd3xm+/VUVwMEu+yPhvbA4dOoSvvtqp7i9Z8jeyso6jdes0HD5cDZs398OBA/uxcOFC5OTkIC4uTt0yMzP5UJDVMslbq8WLF6saXpk+yE/+aFxdXeHn52ewPTAwUH2tIBkZGeqmk5ycbIKjJmuZz+3d+5xa2MjT0xFr1lRhh0Iyia1b96BTp7xvaqapf0NDe8PRMQxRUVHqfoMGDQz+35YtW9CqVSs+KmSVjB4UxMTEqCYeUsPr7m6cHvOTJk3CBx98YJTvRdZd/iXLHi9efF31kF+2rDLuv9/T3IdFNvg8W7ZMygwDZGxTbXv1VX9MmRJiMEUl+xHZGqNPH8j0QEJCAho1agRnZ2d127ZtG2bOnKk+lxEBGV5LTEw0+H9SfRAUFFTg9xw5cqTKRdDdJPAg+zNpUjxmzrysPv/220po25ZJXWRcsbGZ6Nr1jFptUxJYq1d3w9at1bBgQSXmrJBdMPpIQevWrXHkyBGDbX369FF5A9IrPCwsDC4uLti0aZMqRRQnTpzA+fPn0axZswK/p5ubm7qR/friiysYNeqi+nzGjFD07FnO3IdEVrxyoSygJRd9aXstXS6lwdX8+VcwYkQsUlJy4ewMvPtuEEaPDuIS22RXjB4UeHt7o06dOgbbZMEQyczVbX/llVcwdOhQlCtXTpXwDBw4UAUEDz74oLEPh2zAihWJeOON8+rz994LxFtvybAuUfEtWyZrFFwwWFEzMNAZfn5O+vUKmjYto0YG6tblaoZkf8xSw/V///d/cHR0VCMFkkDYrl07zJ071xyHQhZu+/YU9OgRjdxc7bzuxInB5j4ksuKAQKYF8qcCxMdnq5u7u4PKG+jXrwLbYZPdctBYYbaMVB9I0yPJL2CzENv111838MgjJ1W3QlltbunSynB25toFVLIpg4iIowYjBPnJVEJMTB0GBGQTSnqd5NoHZJGiozPwxBOnVUAgc74//hjJgIBKTHII7hQQCMkxkP2I7BmDArI4CQm32hfXrSvtiyvr2xcTlYQ8l4y5H5Gt4istWWT74pMnMxAR4Yp166pyxTm6ZzI1YMz9iGwVgwKyGBkZ2vbFBw5o2xfLegZsX0zGIFNQsoS2lB4WRLaHhWnLE4nsGYMCssj2xWvXsn0xGY+Tk4PqbyHyBwa6+9OnhzLJkOwegwIyOymAkdrxn37Sti9evrwymjRh+2Iyrm7dymLp0kiEhBhOEcgIgmyXrxPZOwYFZHYffRSH2bMvq3ds331XCY8/zvbFZBpy4T97tg42bqwKl/9iA5mmYkBApMWggMxqwYIrGD36kvpchnd79GD7YjL9VELr1j5o2LCMun/kSDpPOdF/GBSQ2Sxfnog339S2Lx41Kui/VemISkeDBtqg4M8/b/CUE/2HQQGZxbZtKejZU9u++LXX/DFhQkU+ElSqGjbUrm1w6NBNnnmi/zAooFJ3+PANPPXUaWRkaNCliy/mzg2HQ2G1YkQmwpECotsxKCAztC8+heTkXFUTvmgR2xeTedSr5wFHR+2CSHFx7GRIJBgUUKm2L27b9hTi4rLVCzLbF5M5lSnjiOrV3dTnzCsg0mJQQKXavvjUKbYvJsuhq0BgXgGRFoMCKpX2xV27atsXV6jgjN9+q8oe82QRGjTQJhtypIBIi0EBmXwd+xdfPItNm1Lg5SXti6uiWjV3nnWyCBwpIDLEoIBM3r74558T9e2LGzfWDtcSWdJIgazKKVNcRPaOQQGZzIcfxmHOHG374u+/r4Q2bdi+mCxLhQou+rUQ/vqL/QqIGBSQSXz++RWMGaNtXzxzZiiee47ti8kyMa+A6BYGBWR0y5ZdR9++2vbFo0cHYcAAti8my8W8AqJbGBSQ0dsX/+9/Z1X74tdfL4/x49m+mCwbRwqIbmFQQEZz6NCt9sVdu0r74jC2LyarGSk4ejQdWVkacx8OkVkxKCCjOHMmA+3ba9sXP/KItn2xLFFLZOkiIlzh4+OIzEwNjh1jsiHZNwYFZJT2xe3a3WpfvHJlZbi786lF1sHR0UG/OBI7G5K94ys33ZPk5Bw1QiDtiyMjXbFuXVX4+TnzrJKV5hVwpIDsG4MCuuf2xQcP3lTti9evZ/tisvYKhBvmPhQis2JQQCVuX/zCC2exeTPbF5PtjBTI9IF04iSyVwwKqNjkRfOtt2KwZIm2ffGKFWxfTNatdm139VxOTMzBuXOZ5j4cIrNhUEDFNnFiHObOvaLaF//wQwRat2b7YrJurq6OuO8+7UJdzCsge8aggIrls88uY+xYbfviWbPC8OyzZXkGySYwr4CIQQEVs31xv34x6vMxY4LQv38Fnj+yGaxAIGJQQEW0dWsKeva81b74gw/YvphsC0cKiBgUUBFImVbnzqdVx7du3fzYvphsUv362gqEmJgsXL2abe7DITIL5hTQHZ0+nYEnntC2L27Z0gsLF0awfTHZJB8fJ1Sp4laifgVz5sxBREQE3N3d0bRpU+zdu9dER0lkWgwKqFDx8dr2xfHx2epd1MqVVdi+mGxaSfIKfvrpJwwdOhTjxo3DwYMHUb9+fbRr1w4JCQkmPFIi02BQQHdsXywjBdK+eO3aqvD1deLZIpvWsKFHsUcKpk2bhtdeew19+vRB7dq1MX/+fJQpUwZfffWVCY+UyDQYFFCh7Yvl3VJAgDN++43ti8k+6BZGKupIQWZmJg4cOIA2bdrotzk6Oqr7u3btMtlxEpkKgwK6rX3x889r2xd7ezuqEYKqVbVNXYjsZaTg+PF03LyZe9f9r1y5gpycHAQGBhpsl/txcXEmO04iU2FQQAbtiwcOjMHSpYlwdZX2xVXQqJH2nRORPahY0UUt7iWlt0eOcMVEsj8MCkhv/Pg4zJt3q33xY4958+yQXXFwcMiTV3D3oKB8+fJwcnJCfHy8wXa5HxQUZLLjJDIVBgWkzJ9/Ge+/r21fPHt2GJ55hu2Lyd7zCu6ebOjq6orGjRtj06ZN+m25ubnqfrNmzUx6nESm4GyS70pW5ZdfbrUvHjs2CP36sX0x2a/ijBQIKUfs3bs3mjRpggceeADTp09HWlqaqkYgsjYMCuzcli0p+N//zkKWkH/jjfJ4/322Lyb7phsp+Ouvmyrx1snJ4Y77P/fcc7h8WRYKG6uSCxs0aIB169bdlnxIZA0cNJJdZmWSk5Ph6+uLpKQk+Phw2d6SkuHRli3/RUpKLp5+2g8//RTJboVk9yQQ8PE5jBs3cnHsWG3UrMnqG7I+Jb1OMqfATklTImlOJAFBq1ZeKrHwbu+IiOyB/B3Uq6frbFi8dsdE1o5BgR2Ki8tC27Yn9e2LpfTQ3Z1PBSKd+vW1owOLFl1TK4TK6AGRPeCVwE7bF585k4nKlV2xbh3bFxPltWzZdfz8c6L6fPXqZDz66ElERBxV24lsHYMCO5KenosuXU6rrGpt++JqCApyMfdhEVkMufB37x6N69dzDLbHxmap7QwMyNYxKLCz9sVbtqSq9sUyQqBbJpaItH8jgwZdUJU4+em2DR58gVMJZNMYFNgBKTAZMCAGv/yibV8sSyA3bMj2xUR5/f57Ki5cyLrD3xEQE5Ol9iOyVQwK7MAHH1zC/Pna9sULF0bg0UfZvpgov0uXsoy6H5E1YlBg4+bNu4wPPtCu1jZnThi6d2f7YqLCFkMy5n5E1ohBgQ1buvQ6+vfXti8eNy4IffuyfTFRYR5+2AuhoS5qRK0wXl6OaNHCkyeRbBaDAhu1eXMKevXSti9+883yGDeO7YuJ7ta0aMaMUPV5YYFBamou3n33osrTIbJFDApskHRhk9LDzEwNunf3U6seypKwRHRn3bqVxdKlkQgJMZwiCAtzUWuDiGnTEjBiBAMDsk1cEMnGnDqVjiee0LYvfvRRti8mKklg0Lmzn6oykKRCySGQqQUZSZAOoLKi6JQp8XB2BiZODGbATTaFQYGNtS9u1+4UEhKy0aCBtn2xmxsHg4iKSwKAVq1ur9KRvJzsbA3eeusCPvpIAgMHfPBBME8w2QxeMWxEUlKOGiHQtS9eu7YqfHyczH1YRDZn4MAATJsWoj4fPz4O48dfMvchERkNgwIbal98+PBNBAayfTGRqQ0ZEohPPtEGBuPGXcJHH2nLfomsHYMCG2jNKlUGW7dq2xfLCAHbFxOZ3rBhgZg0STt1MGrURUyZwsCArB+DAismZVHSh2DZMrYvJjKHESOCMGGCttxXShWnTYvnA0FWjUGBFXv//Uv47DNt++JFi9i+mMgcRo+uiPff1wYGb78di5kzE/hAkNViUGCl5s69rJKctJ+H4emn2b6YyFzGjg3C6NFB6nNZaXHOnMt8MMgqMSiwQkuWXFerHgp5h/Lmm2xfTGRO0hxs/PiKGDEiUN2Xv8/PPmNgQNaHQYEVti9+/nlt++J+/cqrdyhEZBmBwUcfBWPYsAB1/803Y/Dll1fMfVhExcKgwIocPHgDnTvfal88cybbFxNZWmAwZUoIBg/WBgavvXYe33xz1dyHRVRkDAqsqH1x+/an1IIsjz3mjR9+iFBd14jI8gIDaW40YEAFNaL38svn8P33DAzIOjAosALSf71tW2374oYNPbB8eWW2Lyay8MBg5sxQ9O1bXgUGL710DosWXTP3YRHdFYMCK2hfLCME0dGZqikR2xcTWU9gICuUvvaaP3JzgRdeOIuffmJgQJaNQYGFty+WHIJb7YurIjDQcElXIrJcjo4OmD8/HH36aAMD6T76yy/XzX1YRIViUGDh7Yu3bUuFj48j1q2risqV3cx9WERUgsBgwYJwvPhiOeTkAD16RGPFikSeR7JIDAostH2xrNku7Yvd3BywcmUVNGhQxtyHRUQlJEnBX31VCf/7X1lkZwPPPhuNVasYGJDlYVBggWTVtc8/v9W+uKB13YnI+gKDb7+NwHPPlUVWlpQVR2PNmiRzHxaRAQYFFmb27ARMmKBtXzxvXhi6dWP7YiJb4ezsoMqJpc+I9Bvp1u0M1q9PNtnPi4iIUAmP+W/9+/c32c8k68agwIL8/PN1vPXWBfX5Bx9UxBtvsH0xkS0GBosWRaJrV19kZGjQpctpbNxomsBg3759uHTpkv62YcMGtf2ZZ54xyc8j62f0oGDSpEm4//774e3tjYCAAHTp0gUnTpww2Cc9PV1Fqv7+/vDy8sLTTz+N+Hj7XnJUXhR07Yv796+AMWPYvpjIVrm4OGDx4kg89ZQv0tM1eOqp09iyJcXoP6dChQoICgrS31avXo0qVaqgZcuWRv9ZZBuMHhRs27ZNXfB3796totKsLGm80xZpaWn6fYYMGYJVq1ZhyZIlav+LFy+iW7dusFcHDtxA165n1DzjM8/4YcaMUDXER0S2y9XVET//HImOHX1w86YGTz55Gtu2GT8w0MnMzMQPP/yAl19+ma8vVCgHjaS6m9Dly5fViIFc/B955BEkJSWp6HXRokXo3r272uf48eOoVasWdu3ahQcffPCu3zM5ORm+vr7qe/n4+MCanTyZjoce+heXL2ejdWtv/PprFXYrJLKzfiTypmDdumR4emrLj1u08DL6z/n555/xv//9D+fPn0dwcLDRvz9ZlpJeJ02eUyAHJMqVK6c+HjhwQI0etGnTRr9PzZo1ER4eroICe2xfLAFBo0YeWLaM7YuJ7I27u6P623/8cW+kpeWqDqa7dqUa/ed8+eWXaN++PQMCMl9QkJubi8GDB+Ohhx5CnTp11La4uDi4urrCz8/PYN/AwED1tYJkZGSoqCfvzdolJmbjiSdO4exZbfviNWuqwsfHydyHRURm4OHhiBUrqqjFzmTRs3btTmHPnltTrvfq3Llz2LhxI1599VWjfU+yTSYNCiS34OjRo1i8ePE9Jy/KMIjuFhYWBmt286a0Lz6Dv/66iaAgti8mIqBMGUdERVVGy5ZeSEnRBgb79xsnMPj666/VNG7Hjh15qsk8QcGAAQNUpuuWLVsQGhqq3y4ZsJLwkpho2M1Lqg/kawUZOXKkmobQ3WJiYmDN7Yv/979obN/O9sVEZMjT0wmrV1dBixaeajG0xx8/hYMHb9zziK0EBb1794azszNPOZVuUCB5ixIQLF++HJs3b0ZkZKTB1xs3bgwXFxds2rRJv01KFiX5pVmzZgV+Tzc3N5UokfdmjeTc9O17HitWJKn2xVFRVVC/PtsXE9EtXl5OajqxWTNPJCZKYHAShw+XPDCQaQN5fZWqA6JSrz7o16+fqixYuXIlatSood8uw/4eHh7q8759+2LNmjX45ptv1AV+4MCBavvOnTuL9DOstfpgzJiLmDgxDo6OwNKlldG1q2FeBRGRTnJyDtq2PYk9e27A398JW7ZUR9262tdQIlNdJ40eFBRWXy/DVy+99JK+edHbb7+NH3/8USURtmvXDnPnzi10+sAWgoJZsxL03Qo/+ywcr79e3tyHRERWkJAsUwj7999AhQrO2Lq1GmrXZmBAVhQUlAZrCwp++ukaevbUdiscP74ixoypaO5DIiIrcf269DA5iT//vInAQAkMqqNaNTf8/nuqKmuuWNEFDz/spRZcIrrX6ySzTkxsw4ZkvPDCOX374tGj2b6YiIqubFlnbNhQTQUGhw/fRLNmJ+Du7oC4uGz9PqGhLqoTKhdQo3vFBZFMSMqJZBU0aV/87LNsX0xEJePv74yNG6shPNxFJR/mDQhEbGyWWop52bLrPMV0TxgUmLB9cYcOp1UjEmlf/N13ERzeI6ISK1vWCVlZBX9NNwk8ePAFVfZMVFIMCkzg4sVMffvixo3LYPlyti8monujyyEojAQGMTFZaj+ikmJQYML2xVWrSvviKvD2ZvtiIro3dwoISrIfUUEYFBi5ffFTT53BkSPp+vbFAQEuxvwRRGSnpMrAmPsRFYRBgZFkZ2vQs2e0Grrz8dEufxoZ6Wasb09Edk7KDqXKoJBWMIp8XfYjKikGBUZsX7xypbZ98apVbF9MRMYlfQik7FAUFhjcd5+76phKVFJ8+hjBmDGX8MUXV9Uf4+LFkXjkEW9jfFsiIgPSh2Dp0kiEhBhOEUgbZLF+fQo++qjgJeiJioJBQTFs374dnTp1QnBwsGrnvGLFCtW++MMPtX+E8+aF4eDBaahYsaJa56FNmzY4efJkcX4EEdFdA4OzZ+tgy5ZqWLQoQn2Mj6+HmTO1owijR1/CV19d4VmkEmFQUAxpaWmoX78+5syZo+7//nsKBg3SrmcwYUJFXL/+FWbOnIn58+djz5498PT0VOs6yFoPRETGnEpo1cobPXuWUx/l/sCBARgxIlB9/fXXz2P16iSecCo2rn1QQjJS4OT0KXJyWmHAgAqYMSMEISEhaqGnYcOGqX2k53RgYKBaDbJHjx4l/VFEREXOb3rppXP47rtr8PBwwObN1fHgg548e3YouYRrH3CkoAT27UtTH6Vz2HPPlVXJP2fPnkVcXJyaMtCRB6Rp06bYtWtXSX4MEVGx36x88UUltG/vg5s3NejY8RSOH+dIJRUdg4Ji+vdfbftiUa+eB779thIcHWVxEm1egYwM5CX3dV8jIjI1FxcHLFkSifvvL4Nr13JUMzXpskpUFAwKStC++MoV7WIkI0YEwc2Np5CILIunpxN+/bWKWmL53LlMFRhIt1Wiu+EVrZjti+UPTP7QhIfHrdMXFKRdEjk+Pt7g/8l93deIiEpLhQouWL++ququKl1Wu3Q5g/T0XD4AdEcMCorYvrhTp9P69sXyh5ZfZGSkuvhv2rTJINFDqhCaNWtWlB9DRGRU0lV1zZqq8PZ2xLZtqXjhhbNcRZHuiEFBEdoX9+gRjR070uDjk4EZM9KQlHRMfS06OhqHDh3C+fPnVYLP4MGDMXHiRERFReHIkSN48cUXVU+DLl263O3HEBGZRMOGZbBiRRWVa7B0aaJaXlmqFIgK4lzgVlLkD+fNN88jKkrbvnj8+Ot47rmO+rMzdOhQ9bF3796q7HD48OGql8Hrr7+OxMREtGjRAuvWrYO7uzvPKBGZzWOPeeP77yuhR4+zmD37MoKDXTByJKc16XbsU3AHo0bF4qOP4lX74mXLKqNzZ7877U5EZNFmzEhQIwXi668r4aWX/M19SGQi7FNgZDNnJqiAQHz2WTgDAiKyeoMGBWD4cG3Z9KuvnsOaNex6SIY4ffBfEyJZ8vjSpSy1FnlsbKa+ffGHHwbj1VfL5zttRETWadKkYPVa9/331/DMM9HYvLkamjZl10PSsvugYNmy6yoAuHAhC/kNHFgBI0caNiMiIrJm0mztyy8rISEhG+vXJ6uuhzt31kD16sx9IjuvPpCAoHv36AIDAvHII16qqoCIyJZoKxEi0aRJGVy9moN27U6p0QMiR3ueMpARgsIqcyQWGDr0Amt6icgmeXlpux5WreqGs2cz0b79KSQl5Zj7sMjM7DYokByCwkYIhAQLMTFZaj8iIlsUEKDtehgQ4IzDh2+ia9fTyMhg10N7ZrdBQVGHyjikRkS2rHJlN6xdWxVeXo7YsiUVL754Frm5bG5kr+w2KJAqA2PuR0RkrRo1KoPlyyurXIOff07EkCHsemiv7DYoePhhL4SGuqjcgYLI9rAwF7UfEZGta9PGRy0FL2bOvIwpUwwXdyP7YLdBgZOTA2bMCFWf5w8MdPenTw9V+xER2YOePcth2rQQ9fmIERfx7bdXzX1IVMrsNigQ3bqVVWU5ISGGUwQygiDb5etERPZkyJBADBsWoD5/5ZVzWLuWXQ/tiV0HBUIu/GfP1sHzz2sDgM6dfRAdXYcBARHZrcmTQ9CrV1nk5ED1ctm7N83ch0SlxO6DAiFTBA8/7K0+lz8CThkQkb13Pfzqq0po29YbN27komPH0zh5Mt3ch0WlgEHBf8LDtVMI58+zqxcRkaurI5YurYzGjcvgypVs1fUwLo6vj7aOQcF/wsNd1cfz5zPN+XgQEVkMb29t18MqVdwQHa3tepiczK6HtoxBwX/CwrRBQWJiDp/0RET/CQy81fXw0KGb6NbtDLse2jAGBXki4rJlndTnMTEcLSAi0pGRgjVrtF0PN21KwUsvnWPXQxvFoCAPTiEQERVMcguWLasMZ2dg8eLrePvtWGgKW1GOrBaDgjwYFBARFe7xx33wzTcR6vPp0xPw6acJPF02hkFBHgwKiIjurFevcpg6Vdv18J13YvH99+x6aEsYFOTBskQiort7++1ADB2q7Xr48svnsH59Mk+bjWBQkAdHCoiIiuaTT0Lwv/+VRXY28PTTZ7B/P7se2gIGBQUEBefOsfqAiOiOFw9HB3z9dSW0aeONtLRcdOhwGqdOseuhtWNQUEBQcOFCJnJymFVLRHS3rodSkdCokQcuX9Z2PYyPZ9dDa8agII+KFV3g5KRd/+DSJT6xiYiK0uNFehhUruyKM2cy0aHDKaSksOuhtWJQkIcshBQaynbHRETF7Xq4bl1VVKjgjIMHtV0PMzNzeRKtEIOCfCpVYlBARFRc1aq5Y82aKvD0dMTGjSno04ddD60Rg4J8WIFARFQyTZp44pdftF0PFy26juHDY3kqrQyDgnzYq4CIqOTatfPBV19VUp9Lx8NPP4032emMjY3F888/D39/f3h4eKBu3brYv3+/yX6ePXA29wFYGo4UEBHdmxde8EdcXLYaKRg2LBZBQS6qE6IxXb9+HQ899BAeffRRrF27FhUqVMDJkydRtmxZo/4ce8OgIB8GBURE927YsABcvJil1kh46aWzKgmxbVsfo53ayZMnIywsDF9//bV+W2RkpNG+v73i9EE+DAqIiO6dg4MDPv00BD163Op6eODADaOd2qioKDRp0gTPPPMMAgIC0LBhQyxYsMBo399eMSjIJyxMW31w/XoOa22JiO7lAuPogG++qYTWrb2RmipdD0/h9OkMo5zTM2fOYN68eahWrRrWr1+Pvn374q233sK3337Lx+weOGiscEHs5ORk+Pr6IikpCT4+xhuO0ilb9jASE3Pw99+1ULu2h9G/PxGRPUlOzkHLlv/i0KGbqFLFDTt3VkdAgMs9fU9XV1c1UrBz5079NgkK9u3bh127dsHeJZfwOsmRggJwCoGIyHh8fJywdm1VREa6qpECWSchNfXeuh5WrFgRtWvXNthWq1YtnD9//h6P1r4xKDBCWeL27dvRqVMnBAcHq3m0FStWGPdRIiKyclKBIF0Py5d3VrkFkmNwL10PpfLgxIkTBtv+/fdfVKqkLYekkmFQcMfVEos295WWlob69etjzpw5JXwYiIhsX/Xq7vj11yooU8YRv/2WgpdfLnnXwyFDhmD37t346KOPcOrUKSxatAiff/45+vfvb/TjticsSbzj9EHRRgrat2+vbkREdGcPPCBdDyPRqdNpLFx4HcHBLpgyJbTYp+3+++/H8uXLMXLkSIwfP16VI06fPh29evXiQ3APGBQUgDkFRESm88QTvvjyy0ro3fscPvkkQa1QO2RIYLG/z5NPPqluZDycPigAgwIiItN68UV/fPxxsPp86NBYLF58jafcAnCk4A5BwYULmcjJ0agllYmIyLiGDw9UXQ9nzryMF188p5IQH33UG7//nopLl7LUCMLDD3vxNbgUMSgogDwRnZygunDFxWUhJEQbJBAR0b15//338cEHHxhs8/aujJSUJSrPQMoXExKy9V8LDXXBjBmh6NaNaxqUBk4fFMDZ2QGhobpkw8xSeSCIiOzFfffdh0uXLulvx47tQp067khP1xgEBCI2Ngvdu0dj2bLrZjtee8KgwAh5BampqTh06JC6iejoaPU5m2gQEd3O2dkZQUFBeW4VcO1awc2MdD13Bw++oKZzybQ4fWCEBkayfrcs36kzdOhQ9bF379745ptvjPNIERHZCFniWJq9ubu7o1mzZnjqqVEqt6AwEhjExGSpXINWrbxL9VjtDYMCI4wUtGrVCla4hAQR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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "tour = [int(i) for i in result.phenotype] + [int(result.phenotype[0])]\n", "fig, ax = plt.subplots(figsize=(6, 6))\n", "ax.plot(coords[tour, 0], coords[tour, 1], \"o-\", color=\"mediumblue\")\n", "for i, (x, y) in enumerate(coords):\n", " ax.annotate(str(i), (x, y), textcoords=\"offset points\", xytext=(5, 5))\n", "ax.set_title(f\"Best tour found (length = {result.fitness:.1f})\")\n", "ax.set_aspect(\"equal\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A note on parameters\n", "\n", "Both variants share `nAnts`, `maxiter`, `miniter`, `rho`, `maxage` and `minimize` /\n", "`seed` from the base class; `rho` is unused by ACOR (kept only for a uniform constructor\n", "signature) since ACOR's \"pheromone update\" is the archive replacement described above, not an\n", "evaporation/deposit rule. There is no universally correct parameter set -- as with any\n", "metaheuristic, expect to tune `nAnts`/`maxiter` against your evaluation budget, and the\n", "exploration/exploitation knobs (`q`, `xi` for ACOR; `alpha`, `beta`, `rho` for Ant System)\n", "against how rugged your search space is. Setting `seed` makes runs reproducible, which is\n", "useful while tuning." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Case study: GA vs. ACO on the TSP\n", "\n", "The [genetic algorithm](bga.ipynb) guide mentions that ACOR and GA solve the same class of\n", "box-constrained, real-valued problems. For the *combinatorial* side there's an analogous overlap:\n", "`CombinatorialAntColonyOptimization` isn't the only way to attack the TSP with a metaheuristic from\n", "this library -- {doc}`Building a Custom Genetic Algorithm ` shows how to write a\n", "permutation-encoded `GeneticAlgorithm` subclass (order crossover + swap mutation) for exactly the\n", "same problem. This section runs both on the *same* set of cities and compares them head to head, to\n", "turn \"neither is strictly better\" into an actual number." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The permutation GA, recapped\n", "\n", "We reuse the `PermutationGeneticAlgorithm` built in {doc}`custom_ga`: `populate` seeds the first\n", "generation with random permutations and breeds the rest via order crossover; `crossover` copies a\n", "random slice from one parent and fills the rest from the other parent's order, guaranteeing a valid\n", "tour; `mutate` swaps two random positions. Everything else (`select`, elitism, `seed`-based\n", "reproducibility, champion tracking, `evolve`/`solve`) is inherited from\n", "{py:class}`~sigmaepsilon.math.optimize.ga.GeneticAlgorithm` unchanged -- see {doc}`custom_ga` for the\n", "full derivation." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "from sigmaepsilon.math.optimize.ga import GeneticAlgorithm\n", "\n", "\n", "class PermutationGeneticAlgorithm(GeneticAlgorithm):\n", " __slots__ = ()\n", "\n", " def __init__(self, fnc, n_cities, **kwargs):\n", " placeholder_ranges = [[0, n_cities - 1]] * n_cities\n", " super().__init__(fnc, placeholder_ranges, **kwargs)\n", "\n", " def populate(self, genotypes=None):\n", " nPop = self.nPop\n", " if genotypes is None:\n", " genotypes = np.array(\n", " [self.rng.permutation(self.dim) for _ in range(int(nPop / 2))]\n", " )\n", " else:\n", " genotypes = np.asarray(genotypes, dtype=int)\n", "\n", " nParent = genotypes.shape[0]\n", " if nParent < nPop:\n", " offspring = []\n", " parent_pairs = self.random_parents_generator(genotypes)\n", " while (len(offspring) + nParent) < nPop:\n", " parent1, parent2 = next(parent_pairs)\n", " offspring.extend(self.crossover(parent1, parent2))\n", " genotypes = np.vstack([genotypes, offspring])\n", " return genotypes\n", "\n", " def crossover(self, parent1, parent2):\n", " n = self.dim\n", " if self.rng.random() > self.p_c:\n", " return parent1.copy(), parent2.copy()\n", "\n", " i, j = sorted(self.rng.choice(n, size=2, replace=False))\n", "\n", " def order_crossover(donor, filler):\n", " child = -np.ones(n, dtype=int)\n", " child[i:j] = donor[i:j]\n", " remaining = [city for city in filler if city not in child[i:j]]\n", " child[child == -1] = remaining\n", " return child\n", "\n", " child1 = order_crossover(parent1, parent2)\n", " child2 = order_crossover(parent2, parent1)\n", " return self.mutate(child1), self.mutate(child2)\n", "\n", " def mutate(self, child):\n", " if self.rng.random() < self.p_m:\n", " child = child.copy()\n", " i, j = self.rng.choice(self.dim, size=2, replace=False)\n", " child[i], child[j] = child[j], child[i]\n", " return child" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Running both on the same cities\n", "\n", "We reuse the exact `coords` / `distance_matrix` / `tour_length` from the Combinatorial ACO example\n", "above, and give both algorithms a comparable budget: `maxiter=150` (the hard cap), with each\n", "algorithm free to stop earlier via its own stagnation rule (`maxage`). `nAnts=30` for the ant colony\n", "and `nPop=60` for the GA are both in the same ballpark of \"candidates constructed per generation\".\n", "We track the champion's fitness after every `evolve` call so we can plot the convergence curves\n", "alongside the final tours." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "import time\n", "\n", "\n", "def run_with_history(optimizer, maxiter):\n", " \"\"\"Run `evolve` step by step, honoring the optimizer's own stopping criteria.\"\"\"\n", " history = []\n", " for _ in range(maxiter):\n", " optimizer.evolve(1)\n", " optimizer.state.n_iter += 1\n", " history.append(optimizer.champion.fitness)\n", " min_iter_reached = optimizer.state.n_iter >= optimizer.miniter\n", " if optimizer.stopping_criteria() and min_iter_reached:\n", " break\n", " return history\n", "\n", "\n", "aco_tsp = AntSystem(\n", " tour_length,\n", " distance_matrix,\n", " alpha=1.0,\n", " beta=3.0,\n", " rho=0.3,\n", " nAnts=30,\n", " maxiter=150,\n", " minimize=True,\n", " seed=0,\n", ")\n", "t0 = time.perf_counter()\n", "aco_history = run_with_history(aco_tsp, 150)\n", "aco_elapsed = time.perf_counter() - t0\n", "\n", "ga_tsp = PermutationGeneticAlgorithm(\n", " tour_length, n_cities, nPop=60, minimize=True, maxage=30, seed=0\n", ")\n", "t0 = time.perf_counter()\n", "ga_history = run_with_history(ga_tsp, 150)\n", "ga_elapsed = time.perf_counter() - t0\n", "\n", "print(f\"ACO: length={aco_tsp.champion.fitness:.1f} n_iter={aco_tsp.state.n_iter} n_fev={aco_tsp.state.n_fev} time={aco_elapsed:.4f}s\")\n", "print(f\"GA: length={ga_tsp.champion.fitness:.1f} n_iter={ga_tsp.state.n_iter} n_fev={ga_tsp.state.n_fev} time={ga_elapsed:.4f}s\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On this 15-city instance, ACO both finds a *shorter* tour and does so with roughly an order of\n", "magnitude fewer function evaluations: it converges (and hits its `maxage=10` stagnation limit) after\n", "21 iterations x 30 ants = 630 evaluations, while the GA runs for 86 generations x 60 individuals =\n", "5160 evaluations before its own `maxage=30` triggers -- and still lands on a longer tour. The wall-clock\n", "times for this single run (`aco_elapsed` / `ga_elapsed` above) are similar despite the very different\n", "evaluation counts, since `tour_length` is cheap here and per-evaluation Python overhead dominates; the\n", "10-seed comparison below measures this more carefully. Let's look at the convergence curves and the\n", "resulting tours side by side." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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mbBxYwJ++umKupb7RNbAPpqI6BZlZwFnNgKHftKu5X4JYSkPIiIiclgySaS4cOGCRU1uud+sWbOcdaQ0irnMzExcuXIl5/m5eXl5qQsRERXdggVXMWpUFKKitNFrIizMAzNnhmHgwCBuUidQUv2zYB9NRHQLji0A1o8CEqOuL/MLAzrOBOrknWj+VjFjmoiIblm7du3w448/cktawcGDBxEWFqZmsqdbV6NGDXXwum7dOot60FKb8u6771b35Vrqze/atStnnfXr1yM7O1vVuiQiIusGpQcPjrAISovo6Ay1XB4nx8f+mYjIBklQeslgy6C0SIzWlsvjVsbANBGRHZNJYWTyu169euX7eHp6OqZPn47bbrtN1SUuX748WrdujW+++caiPrGUIXj88cfV7Oaenp6oVq0aRo0ahcuXLxfYhiVLlqjsFpmkJr8af9K+9957r1h/X/v27TF69OhCTaDz0EMPqfZ7e3urwG6/fv1w+PDhYr1vcdthDTL7/F133YUPP/ywVN7PESQmJmLv3r3qon8f5HZkZKQqeyKf3eTJk9V3df/+/Rg+fLj6rvTv31+t36BBA3Tv3h1PPfUUduzYga1bt+K5555T32lZj4iIrEPKdUimtCmfqh36stGjo1jWw0GwfyYisiPZWVqmNPIrrXVt2YbRVi/rwcC0tZ3/G1jQE4jeavWXJiLK7euvv8bzzz+PzZs34+zZs3mC0t26dcO7776LESNG4M8//1RBt5EjR+Ljjz/GgQMH1HonT55Us50fO3YMP/30E44fP445c+aoDFPJJJXhkjcza9YsPPbYY2qG9Nz+7//+D6+++qq6LikSYO/SpYuq87tgwQIcOXIE//vf/9CkSROVBWuPZHvOnj1bDVelgu3cuRPNmzdXF/HSSy+p2+PHj1f35Tso/0/k/8Edd9yhDpRXrVqlTmLofvjhB9SvXx+dOnVCz5490aZNG3zxxRfc/EREVrRlS2KeTOncwekzZzLUemT/2D8TEdmR6C15M6UtmICEM9p61mQiU1xcnIT+1fUt+/1Jk+l9mEy/dOaWJbJxKSkppoMHD6pre5SQkGDy8/MzHT582HT//febpkyZYvH4tGnTTK6urqbdu3fneW56eropMTFR3e7evbspLCzMlJycbLHOuXPnTL6+vqann376hm2IiYkxubi4mP799988j23cuNFU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QD/wfOA14en3BsY8nMsYzbhEPzAu8XmtKLw/eG+MJmPaFNoODlZcXJw8zTxogfwF1A30Of0eKHiu0+8nQ6a0b36W4HVLP/B84HXBe4Pn3yMZ83CuYzTjM/3A84HXBe8P7o3RpFIBAAAAAAAAALyKwDQAAAAAAAAAwKsITBeDiIgIPf300/YlvIM+dwf9Tp8HCp7r4PnD64j3E95XGVsYY+Ff+HxHP/B84HXB+4P775NMfggAAAAAAAAA8CoypgEAAAAAAAAAXkVgGgAAAAAAAADgVQSmAQAAAAAAAABeRWDaw958803VqlVLkZGRuvzyy7V8+XJP30XAGjFihC699FJFR0ercuXK6t69u9auXZvvmPT0dPXt21cVKlRQVFSUevTood27d7vWZn/04osvKigoSAMGDMjbRr973vbt23XbbbfZz+VSpUqpUaNG+uGHH/L2W5aloUOHqlq1avb+Dh06aP369cXQksCRnZ2tp556SrVr17b7tG7duho+fLjd17nod5ypQPtcwFhduEAeOxnPAnd8+frrr9WlSxdVr17dfv5PmTIl3/7T+Zv379+vW2+9VTExMSpbtqzuuecepaamevkvgb9ijOb7NONzYH/fZHyu7hvjswWPGT9+vBUeHm795z//sX799Vfrvvvus8qWLWvt3r2bXvaAxMRE64MPPrBWr15t/fTTT9Z1111nJSQkWKmpqXnHPPDAA1Z8fLy1YMEC64cffrBatGhhtWrViv73kOXLl1u1atWyGjdubPXv359+Lyb79++3atasad11113Wd999Z23atMmaM2eOtWHDhrxjXnzxRSs2NtaaMmWK9fPPP1tdu3a1ateubR05cqS4muX3nn/+eatChQrWjBkzrM2bN1uff/65FRUVZY0aNSrvGPodZyIQPxcwVhcUyGMn41lgjy8zZ860nnzySWvSpEkmAm9Nnjw53/7T+Zs7duxoNWnSxPr222+txYsXW/Xq1bN69+7twl8Df8MYzfdpxme+bzI+T/KJ8ZnAtAdddtllVt++ffOuZ2dnW9WrV7dGjBjhybvBMXv27LFfRF999ZV9/cCBA1ZYWJj9YT/Xb7/9Zh+zbNky+u0cHTp0yKpfv741b94866qrrsr7ck2/e97jjz9uXXnllUXuz8nJsapWrWq9/PLLedvM4xAREWGNGzeuGFoUGDp37mz97W9/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vv8KFSrYt5+ampq3/6677lL37t3173//W9WqVbOP6du3b959FSU9PV1z5849aWD6ueeeU+XKlRUdHa17771XTzzxRIEM5DFjxuiCCy5QZGSkGjRooLfeeitv3x9//GH/PSY7/eqrr7b7okmTJlq2bFm+2/DXPgYAAAAAAPAXBKaBYmACp3FxcRo2bJhd5sEsxsaNG9WxY0f16NFDv/zyiz799FM7iPrwww/n+/8mYGkCritXrrSDo4YJ5ppA6Jo1azRq1CiNHj1ar776qr2vV69eevTRR3XRRRfl3Z/ZdiITnE1MTFS5cuX0/fff6/PPP9f8+fML3P/ChQvttppLU57D3G9uELYoCxYsUI0aNexgcmE++eQTPf/88/rXv/6lFStWKCEhQW+//XaBY4YOHWof99tvv+mFF16w/37ThuM9+eST+vvf/66ffvrJDiT37t1bWVlZft/HAAAAAAAAfsMC4BFXXXWV1b9//7zrNWvWtF599dV8x9xzzz1Wnz598m1bvHixFRwcbB05ciTv/3Xv3v2U9/fyyy9bzZs3z7v+9NNPW02aNClwnHmZT5482V5/7733rHLlylmpqal5+7/44gv7/nft2mVfv/POO+02ZGVl5R1z4403Wr169Tppe+677z7r73//e5H7L7/8cqtv3775tl1xxRX52ly3bl1r7Nix+Y4ZPny41bJlS3t98+bN9t8zZsyYvP2//vqrve23337z+z4GAAAAAADwF9SYBrzIlIEwWbwmM/i4H4eUk5OjzZs32yUsjEsuuaTA/zWZv6+99pqdZWvKQpgMYVOG4kyYLGSTJVymTJm8bVdccYV9/2vXrlWVKlXsbSYrOCQkJO8YU27ClKcoivkbpk+frs8++6zIY8ztP/TQQ/m2XXbZZfryyy/zMo3N33bPPffovvvuyzvG/J2xsbH5/l/jxo3ztc3Ys2ePna3tr30MAAAAAADgTwhMA15kgp3333+/XfP4RKa0Ra7jg5qGqaF866232jWOTZkIE6gdP368/t//+3/F0s6wsLB8100NZRNYLcry5cvtIG6rVq3O+j5zazCb8hmXX355vn3HB3BPbF9u/e7c9vlrHwMAAAAAAPgTAtNAMQkPD1d2dna+bRdffLFdv7hevXpndFtLly5VzZo17drKuczkiqe6vxOZbGFTx9hkJ+cGZr/55hsFBwfr/PPP19maOnWqOnfuXCCAfDxz+6bmsplwMJe5nstkElevXl2bNm2yA8Rny1/7GAAAAAAAwJ8w+SFQTGrVqqWvv/5a27dv159//mlve/zxx+0AqJkIz0zct379ejuoe+LEeCeqX7++tm7damfwmjITptzE5MmTC9yfKVVhbtfc39GjRwvcjgn4RkZG6s4779Tq1avtiff69eun22+/Pa/ExNmYNm2aunbtetJjzP28//779kR/5u9+7rnn7JIbuRnPhslWHjFihP33rVu3zi5t8cEHH+iVV1457bb4ax8DAAAAAAD4EwLTQDEZNmyY/vjjD9WtW1eVKlXKq4381Vdf2UHX1q1bq1mzZho6dKidKXwyJug7cOBAO7jatGlTO/D61FNP5TumR48e6tixo66++mr7/saNG1fgdkqXLq05c+Zo//79uvTSS9WzZ0+1b99eb7zxxln/nSaIu2HDBrv8xcmYgO3gwYP197//3c5qNgHeu+66yw7i5rr33ns1ZswYOxjdqFEjXXXVVXb2ce3atU+7Pf7YxwAAAAAAAP4myMyA6HYjAJRcJpt5/vz5mjlz5hn/32uuuUZVq1bV//3f/xVL2wAAAAAAAOCbqDEN4JzExcXZmdCncvjwYb3zzjt2ZrWpRW2yjU1Ae968eTwCAAAAAAAAAYaMaQBeceTIEXXp0kUrV65Uenq6PRHgkCFDlJSUxCMAAAAAAAAQYAhMAwAAAAAAAAC8iskPAQAAAAAAAABeRWAaAAAAAAAAAOBVBKYBAAAAAAAAAF5FYBoAAAAAAAAA4FUEpgEAAAAAAAAAXkVgGgAAAAAAAADgVQSmAQAAAAAAAABeRWAaAAAAAAAAAOBVBKYBAAAAAAAAAPKm/w9zEjH8OEHGYgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(1, 3, figsize=(15, 4.5))\n", "\n", "axes[0].plot(aco_history, label=\"ACO (Ant System)\", color=\"mediumblue\")\n", "axes[0].plot(ga_history, label=\"GA (permutation)\", color=\"darkorange\")\n", "axes[0].set_xlabel(\"iteration / generation\")\n", "axes[0].set_ylabel(\"best tour length so far\")\n", "axes[0].set_title(\"Convergence\")\n", "axes[0].legend()\n", "\n", "aco_tour = [int(i) for i in aco_tsp.champion.phenotype] + [int(aco_tsp.champion.phenotype[0])]\n", "axes[1].plot(coords[aco_tour, 0], coords[aco_tour, 1], \"o-\", color=\"mediumblue\")\n", "axes[1].set_title(f\"ACO tour (length={aco_tsp.champion.fitness:.1f})\")\n", "axes[1].set_aspect(\"equal\")\n", "\n", "ga_tour = [int(i) for i in ga_tsp.champion.phenotype] + [int(ga_tsp.champion.phenotype[0])]\n", "axes[2].plot(coords[ga_tour, 0], coords[ga_tour, 1], \"o-\", color=\"darkorange\")\n", "axes[2].set_title(f\"GA tour (length={ga_tsp.champion.fitness:.1f})\")\n", "axes[2].set_aspect(\"equal\")\n", "\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Is seed 0 a fluke? Robustness over multiple runs\n", "\n", "A single seed can always be flattering to one side or the other. Let's repeat the exact same\n", "comparison for 10 different seeds and look at the spread of the results, not just their mean." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " mean std min max mean n_fev mean time [s]\n", "ACO 377.38 0.21 377.31 378.01 648 0.1505\n", "GA 402.12 17.86 386.98 448.84 5070 0.1531\n" ] } ], "source": [ "aco_lengths, ga_lengths = [], []\n", "aco_times, ga_times = [], []\n", "aco_fevs, ga_fevs = [], []\n", "\n", "for seed in range(10):\n", " a = AntSystem(\n", " tour_length, distance_matrix, alpha=1.0, beta=3.0, rho=0.3,\n", " nAnts=30, maxiter=150, minimize=True, seed=seed,\n", " )\n", " t0 = time.perf_counter()\n", " run_with_history(a, 150)\n", " aco_times.append(time.perf_counter() - t0)\n", " aco_lengths.append(a.champion.fitness)\n", " aco_fevs.append(a.state.n_fev)\n", "\n", " g = PermutationGeneticAlgorithm(tour_length, n_cities, nPop=60, minimize=True, maxage=30, seed=seed)\n", " t0 = time.perf_counter()\n", " run_with_history(g, 150)\n", " ga_times.append(time.perf_counter() - t0)\n", " ga_lengths.append(g.champion.fitness)\n", " ga_fevs.append(g.state.n_fev)\n", "\n", "print(f\"{'':4}{'mean':>10}{'std':>10}{'min':>10}{'max':>10}{'mean n_fev':>12}{'mean time [s]':>15}\")\n", "print(f\"{'ACO':4}{np.mean(aco_lengths):10.2f}{np.std(aco_lengths):10.2f}{np.min(aco_lengths):10.2f}{np.max(aco_lengths):10.2f}{np.mean(aco_fevs):12.0f}{np.mean(aco_times):15.4f}\")\n", "print(f\"{'GA':4}{np.mean(ga_lengths):10.2f}{np.std(ga_lengths):10.2f}{np.min(ga_lengths):10.2f}{np.max(ga_lengths):10.2f}{np.mean(ga_fevs):12.0f}{np.mean(ga_times):15.4f}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Across 10 seeds, ACO isn't just better on average -- it's dramatically more *consistent*: a\n", "standard deviation of about 0.2 vs. the GA's ~18, on a mean tour length that is itself noticeably\n", "shorter (~377 vs. ~402). Wall-clock time per run is comparable for both (a few tenths of a second on\n", "this problem size), so ACO's advantage in evaluation count doesn't translate into much of a wall-time\n", "win here -- the per-evaluation Python overhead dominates at this scale. What *does* scale is the\n", "evaluation *count*: ACO needing ~650 evaluations against the GA's ~5000 to reach a better answer\n", "matters a great deal once `tour_length` is expensive (e.g. a real routing cost function instead of a\n", "Euclidean distance sum)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Final verdict\n", "\n", "For this particular problem shape -- a symmetric-distance-matrix TSP -- `CombinatorialAntColonyOptimization`\n", "is the better default, and the gap is not marginal:\n", "\n", "* **Solution quality**: consistently shorter tours across seeds, not just a lower mean.\n", "* **Consistency**: an order of magnitude lower run-to-run variance, which matters if you only get to\n", " run the optimizer once (e.g. inside a larger pipeline) rather than take the best of many restarts.\n", "* **Sample efficiency**: roughly 8x fewer objective evaluations to reach a better answer -- decisive\n", " once the objective itself is expensive.\n", "* **Effort**: zero custom code. `CombinatorialAntColonyOptimization` is used directly out of the box,\n", " whereas the GA route requires writing and validating a permutation-aware `populate`/`crossover`/\n", " `mutate` (as {doc}`custom_ga` walks through) before it can be applied at all.\n", "\n", "This isn't a verdict against the GA framework in general -- {py:class}`~sigmaepsilon.math.optimize.ga.GeneticAlgorithm`'s\n", "pluggability (custom selection strategies, elitism, arbitrary genotype representations) is exactly\n", "what made a permutation GA possible here in the first place, and for problems that don't map onto a\n", "pairwise-cost/pheromone structure (or that need crossover-driven recombination of unrelated partial\n", "solutions, e.g. bin-packing-like problems with block structure), a custom GA may well be the only\n", "metaheuristic option in this library, ACOR included. But *for the TSP specifically*, ACO's pheromone\n", "mechanism is a much closer structural match to the problem than a permutation genotype bent into\n", "shape with order crossover -- and the numbers above bear that out. If you're choosing a metaheuristic\n", "for a new routing/sequencing problem in this library, start with\n", "{py:class}`~sigmaepsilon.math.optimize.aco.CombinatorialAntColonyOptimization` and only reach for a\n", "custom GA if ACO's pheromone-matrix representation genuinely doesn't fit your problem's structure." ] } ], "metadata": { "kernelspec": { "display_name": "sigmaepsilon-math-NMVzm02N-py3.12", "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.12.7" } }, "nbformat": 4, "nbformat_minor": 4 }