{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import copy\n", "from functools import partial\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import numpy.random as rnd\n", "\n", "from alns import ALNS\n", "from alns.accept import HillClimbing\n", "from alns.select import RouletteWheel\n", "from alns.stop import MaxIterations" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "SEED = 5432" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# The cutting-stock problem\n", "\n", "The [cutting-stock problem (CSP)](https://en.wikipedia.org/wiki/Cutting_stock_problem) is well-known problem in operations research. In simple terms, it asks how many pieces of material are needed to cut an ordered amount of differently-sized beams, such that the wastage is minimised. Many different formulations exist, e.g. for the one-, two-, and even three-dimensional case. Here we solve an instance of the one-dimensional problem, obtained from the data [here](http://www.math.tu-dresden.de/~capad/cpd-ti.html#1D). It is known that the optimal solution for this problem requires the use of only 74 beams." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "OPTIMAL_BEAMS = 74" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Each available beam is of length: 1000\n", "Number of beams to be cut (orders): 180\n" ] } ], "source": [ "# The first line lists the number of lines for beam orders.\n", "# The second line is the length of the available beams. Each\n", "# following line is an order of (length, amount) tuples.\n", "with open('data/640.csp') as file:\n", " data = file.readlines()\n", "\n", "NUM_LINES = int(data[0])\n", "BEAM_LENGTH = int(data[1])\n", "\n", "# Beams to be cut from the available beams\n", "BEAMS = [int(length)\n", " for datum in data[-NUM_LINES:]\n", " for length, amount in [datum.strip().split()]\n", " for _ in range(int(amount))]\n", "\n", "print(\"Each available beam is of length:\", BEAM_LENGTH)\n", "print(\"Number of beams to be cut (orders):\", len(BEAMS))" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "To use the ALNS meta-heuristic, we need to have destroy and repair operators that work on a proposed solution, and a way to describe such a solution in the first place. \n", "Let's start with the solution state." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Solution state" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "class CspState:\n", " \"\"\"\n", " Solution state for the CSP problem. It has two data members, assignments\n", " and unassigned. Assignments is a list of lists, one for each beam in use.\n", " Each entry is another list, containing the ordered beams cut from this \n", " beam. Each such sublist must sum to at most BEAM_LENGTH. Unassigned is a\n", " list of ordered beams that are not currently assigned to one of the\n", " available beams.\n", " \"\"\"\n", "\n", " def __init__(self, assignments, unassigned=None):\n", " self.assignments = assignments\n", " self.unassigned = []\n", " \n", " if unassigned is not None:\n", " self.unassigned = unassigned\n", "\n", " def copy(self):\n", " \"\"\"\n", " Helper method to ensure each solution state is immutable.\n", " \"\"\"\n", " return CspState(copy.deepcopy(self.assignments),\n", " self.unassigned.copy())\n", "\n", " def objective(self):\n", " \"\"\"\n", " Computes the total number of beams in use.\n", " \"\"\"\n", " return len(self.assignments)\n", "\n", " def plot(self):\n", " \"\"\"\n", " Helper method to plot a solution.\n", " \"\"\"\n", " _, ax = plt.subplots(figsize=(12, 6))\n", "\n", " ax.barh(np.arange(len(self.assignments)), \n", " [sum(assignment) for assignment in self.assignments], \n", " height=1)\n", "\n", " ax.set_xlim(right=BEAM_LENGTH)\n", " ax.set_yticks(np.arange(len(self.assignments), step=10))\n", "\n", " ax.margins(x=0, y=0)\n", "\n", " ax.set_xlabel('Usage')\n", " ax.set_ylabel('Beam (#)')\n", "\n", " plt.draw_if_interactive()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def wastage(assignment):\n", " \"\"\"\n", " Helper method that computes the wastage on a given beam assignment.\n", " \"\"\"\n", " return BEAM_LENGTH - sum(assignment)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Destroy operators\n", "\n", "We will consider two simple destroy operators, **random_removal** and **worst_removal**. Random removal randomly removes currently assigned beams, whereas worst removal removes those beams that are currently cut with the most waste. Both remove a fixed percentage of the current solution state, controlled by a degree of destruction parameter." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "degree_of_destruction = 0.25\n", "\n", "def beams_to_remove(num_beams):\n", " return int(num_beams * degree_of_destruction)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def random_removal(state, random_state):\n", " \"\"\"\n", " Iteratively removes randomly chosen beam assignments.\n", " \"\"\"\n", " state = state.copy()\n", "\n", " for _ in range(beams_to_remove(state.objective())):\n", " idx = random_state.randint(state.objective())\n", " state.unassigned.extend(state.assignments.pop(idx))\n", "\n", " return state" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "def worst_removal(state, random_state):\n", " \"\"\"\n", " Removes beams in decreasing order of wastage, such that the\n", " poorest assignments are removed first.\n", " \"\"\"\n", " state = state.copy()\n", "\n", " # Sort assignments by wastage, worst first\n", " state.assignments.sort(key=wastage, reverse=True)\n", "\n", " # Removes the worst assignments\n", " for _ in range(beams_to_remove(state.objective())):\n", " state.unassigned.extend(state.assignments.pop(0))\n", "\n", " return state" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Repair operators\n", "\n", "We define two equally simple repair operators, **greedy_insert** and **minimal_wastage**. The first considers each currently unassigned ordered beam, and finds the first beam this order may be inserted into. The second does something similar, but finds a beam where its insertion would result in the smallest beam wastage." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "def greedy_insert(state, random_state):\n", " \"\"\"\n", " Inserts the unassigned beams greedily into the first fitting\n", " beam. Shuffles the unassigned ordered beams before inserting.\n", " \"\"\"\n", " random_state.shuffle(state.unassigned)\n", "\n", " while len(state.unassigned) != 0:\n", " beam = state.unassigned.pop(0)\n", "\n", " for assignment in state.assignments:\n", " if beam <= wastage(assignment):\n", " assignment.append(beam)\n", " break\n", " else:\n", " state.assignments.append([beam])\n", "\n", " return state" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "def minimal_wastage(state, random_state):\n", " \"\"\"\n", " For every unassigned ordered beam, the operator determines\n", " which beam would minimise that beam's waste once the ordered\n", " beam is inserted.\n", " \"\"\"\n", " def insertion_cost(assignment, beam): # helper method for min\n", " if beam <= wastage(assignment):\n", " return wastage(assignment) - beam\n", "\n", " return float(\"inf\")\n", "\n", " while len(state.unassigned) != 0:\n", " beam = state.unassigned.pop(0)\n", "\n", " assignment = min(state.assignments,\n", " key=partial(insertion_cost, beam=beam))\n", "\n", " if beam <= wastage(assignment):\n", " assignment.append(beam) \n", " else:\n", " state.assignments.append([beam])\n", "\n", " return state" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Initial solution" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Initial solution has objective value: 81\n" ] } ], "source": [ "rnd_state = rnd.RandomState(SEED)\n", "\n", "state = CspState([], BEAMS.copy())\n", "init_sol = greedy_insert(state, rnd_state)\n", "\n", "print(\"Initial solution has objective value:\", init_sol.objective())" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/YAAAIPCAYAAADZ8kUxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA7lUlEQVR4nO3df5RVdb0//ufww8FRGSm5gz8wwN+CovxQa674W64/WGmWWmJ6rZv26VZYWZDxSSWFLLVcSlrdUrNPLb1q6aWyC2m3a6YJGpqUFnAh1AkRZxRoENjfP/h6LiOojM1wZg+Px1pnLff7vc8+r+PaHs9z3vu8dk1RFEUAAACAUupR7QIAAACAt06wBwAAgBIT7AEAAKDEBHsAAAAoMcEeAAAASkywBwAAgBIT7AEAAKDEBHsAAAAoMcEeAAAASqzqwb61tTUXXnhhhg8fniOOOCKHHnpo7rrrrsp8URS57LLLMmLEiBxyyCEZP358mpubq1gxAAAAdB01RVEU1Sxg8uTJufXWW/PYY4+lvr4+jz76aA477LA8/PDDGT58eK6++urcfPPN+c1vfpNtt9025513Xp5//vncfffdm3X8devW5ZlnnskOO+yQmpqaTn43AAAAbO2KoshLL72UXXbZJT16dP56eq9Of4U38dhjj2X06NGpr69Pkhx88MGpr6/PL37xiwwbNizTpk3LlClTsu222yZJPvOZz2To0KF5/PHHc8ABB7zp8Z955pkMHDiwU98DAAAAvNbixYuz2267dfrrVD3Yn3baaZk0aVIWLVqU3XffPffee2+WLl2ahoaGzJ07N0uXLs2oUaMq+++3337ZbrvtMnPmzM0K9jvssEOSZNeP3pQetXWd9j4AgC3riUvHVrsEANiklpaWDBw4sJJHO1vVg/25556blStX5sADD8zOO++cp556Ku9973tz+umn58c//nGSpKGhobJ/TU1NGhoasmDBgk0er7W1Na2trZXtl156KUnSo7ZOsAeAbqRv377VLgEA3tCW+jl41Zvnffvb3860adMye/bszJs3L3PmzMlhhx2WHj16ZOXKlUmS2traNs+pra2tzL3W1KlTU19fX3m4DB8AAIDurKrBviiKfPazn83555+fPfbYI0kyfPjw/OQnP8kVV1yRurr1K+wbrsC/uv3q3GtNmjQpzc3NlcfixYs7900AAABA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/+hHP5oDDjggF110UcaPH59tt902/fr1S69evfLKK69k+fLlaW1tzbve9a5885vfzKhRozq7bgAAACDt+I39P/7jP+bBBx/MkiVL8pvf/CZNTU1pbm7OjjvumAEDBuSd73xnBgwY0Jm1AgAAAK/R7uZ5u+66a0477bTOqAUAAABop7+7Kz4AAAB0hDfqmL+llalDf7vvYw8AAAB0HYI9AAAAlJhgDwAAACXWocH+yiuvfMvPve6661JTU5P777+/zfiNN96YkSNHprGxMSeddFKWLFnyd1YJAAAA3cdbap73q1/9Ko8++miam5tTFEVl/KabbspnP/vZdh/vmWeeyVe+8pWNxu+8885ceumlmTt3bnbaaadcdtllOfnkkzN79uz06OFiAwAAAGh3sP/kJz+Zf/u3f8v++++f7bbbrs3ciy+++JaK+PjHP57Pf/7zueCCC9qMf+lLX8o555yTnXbaqfLaU6ZMyYwZMzJu3Li39FoAAABsWWXqMF9G7Q729957bxYtWpS3ve1tG82dc8457S7gnnvuSe/evTN27Ng24y+88EIeffTRXHzxxZWx+vr67L333pk5c6ZgDwAAAHkLwX748OGbDPVJMmnSpHYda8WKFbn44otz7733prW1tc3cggULkiQNDQ1txgcMGFCZ25TW1tY2x2ppaWlXTQAAAFAm7f6h+sUXX5yrrroqv/71r7NgwYIsWrSo8jjvvPPadazJkyfnggsuyM4777zR3MqVK5MktbW1bcZra2src5syderU1NfXVx4DBw5sV00AAABQJu1esV+yZEm++tWvpqmpKTU1NZXxoijabL+ZOXPm5KGHHspXv/rVTc7X1dUlyUYr+a2trRv9tn9DkyZNyqc+9anKdktLi3APAABAt9XuYD9hwoRMmTIljY2NlfCdrA/273//+zf7ODNmzMiqVaty9NFHJ0n+9re/VY6/4447VrrkNzU1tXnec889l+OOO+51j1tbW7vRKj8AAAB0VzXFhver2wxHH310fvGLX2xybt68edlvv/3eUiELFy7M4MGDc9999+XII49MkowYMSL/9E//lCuuuCLJ+tX3t7/97bnrrrty8sknb9ZxW1pa1l+SP+G29Kite/MnAAAAwN9h7ucPT319fZqbm9O3b99Of712/8b+hBNOyAMPPLDJuS9/+ct/d0Eb+sIXvpCbb745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AACUmGAPAAAAb1FXaKAn2AMAAECJCfYAAABQYoI9AAAAlFgpgv1dd92V0aNH5/DDD88RRxyR3//+99UuCQAAALqEXtUu4M08/PDDOeecczJ79uzstddeueWWWzJ27NjMmzcvO+ywQ7XLAwAAgKrq8iv206ZNy0knnZS99torSTJ+/PisWbMmN910U3ULAwAAgKzvjP/qoxq6fLCfNWtWRo0aVdnu0aNHRo4cmZkzZ1axKgAAAOgauvSl+MuWLUtLS0saGhrajA8YMCC//e1vN/mc1tbWtLa2VrZbWlo6tUYAAACopi69Yr9y5cokSW1tbZvx2traytxrTZ06NfX19ZXHwIEDO71OAAAAqJYuHezr6uqSpM0K/Kvbr8691qRJk9Lc3Fx5LF68uNPrBAAAgGrp0pfiv/3tb099fX2amprajD/33HMZMmTIJp9TW1vbZoW/KIokybrWTa/wAwAAQEdpaWmp/CT81Tza2bp0sE+So48+OrNnz65sF0WROXPm5OKLL96s5y9btixJsuQb53ZGeQAAAFBR/7X//edly5alvr6+01+zywf7iRMn5rjjjsuf/vSn7Lnnnvn+97+fnj175pxzztms57/tbW9LkixatGiL/AuFamhpacnAgQOzePHi9O3bt9rlQKdwnrM1cJ6zNXCeszVobm7O7rvvXsmjna3LB/tDDjkkN910U84888xsu+226dGjR+69997ssMMOm/X8Hj3WtxGor6/3wUG317dvX+c53Z7znK2B85ytgfOcrcGrebSzdflgnySnnnpqTj311GqXAQAAAF1Ol+6KDwAAALyxbh/sa2tr88UvfrFNp3zobpznbA2c52wNnOdsDZznbA229HleU2yp/vsAAABAh+v2K/YAAADQnQn2AAAAUGKCPQAAAJRYtw72d911V0aPHp3DDz88RxxxRH7/+99XuyRol9tuuy3HH398jjnmmIwePTrve9/7snDhwsp8URS57LLLMmLEiBxyyCEZP358mpub2xyjubk5Z599dg455JCMGDEil156abTWoCu67rrrUlNTk/vvv7/N+I033piRI0emsbExJ510UpYsWdJmfvXq1fnkJz+ZUaNGZeTIkfnEJz6R1atXb8HKYfPMnz8/p512Wo466qgMHTo0hx12WB555JEkPs/pHlpbW3PhhRdm+PDhOeKII3LooYfmrrvuqsw7zymj1atXZ+LEienVq1eb7+Gv6ojvKUuWLMnJJ5+cxsbGjBgxIjfccEP7Cy26qYceeqjYYYcdiqeeeqooiqK4+eabi1133bVoaWmpcmWw+Xr37l387Gc/K4qiKNauXVucffbZxT777FP87W9/K4qiKK666qriwAMPLFauXFkURVH88z//czFu3Lg2xxg3blzx4Q9/uCiKolixYkUxdOjQ4qqrrtqC7wLe3JIlS4rdd9+9SFLcd999lfE77rij2HnnnYulS5cWRVEUl156aXHQQQcVa9eurezz8Y9/vBg7dmyxZs2aYs2aNcWxxx5bfPzjH9/SbwHe0F//+tdi0KBBxS9/+cuiKIrilVdeKY466qjiBz/4QVEUPs/pHr7whS8UgwYNKl588cWiKIpizpw5xTbbbFM89thjRVE4zymfBQsWFIcddljxwQ9+sEhSLFiwoM18R3xPWbt2bXHQQQcVX/rSl4qiWP//i4aGhuKOO+5oV63dNtifeuqpxZlnnlnZXrt2bdHQ0FBce+21VawK2ue9731vm+3f/va3RZLi17/+dbFmzZqif//+xQ033FCZ//3vf18kKebOnVsURVH87ne/K5IUf/jDHyr7XH/99UX//v2LNWvWbJk3AZvhPe95T3HDDTdsFOwPPvjgYuLEiZXtF198sejVq1dx9913F0VRFM8//3ybP4AVRVHMmDGj6N27d7Fs2bItVj+8mU9/+tPF+9///jZjTz/9dLFkyRKf53QbJ598cvG+972vzVj//v2Lq6++2nlOKT3++OPF008/Xdx3332bDPYd8T3lxz/+cdG7d+/ipZdequxz0UUXFSNGjGhXrd32UvxZs2Zl1KhRle0ePXpk5MiRmTlzZhWrgva5/fbb22z36dMnyfpL3ebOnZulS5e2Oc/322+/bLfddpXzfNasWdl+++2zzz77VPYZPXp0li5dmrlz526BdwBv7p577knv3r0zduzYNuMvvPBCHn300TbneH19ffbee+/KOf5f//VfeeWVV9rsM3r06Lzyyiv55S9/uWXeAGyGO++8M2PGjGkztueee2aXXXbxeU63cdppp+VXv/pVFi1alCS59957s3Tp0jQ0NDjPKaVhw4Zlzz333ORcR31PmTVrVvbZZ59sv/32bfaZM2dOli9fvtm1dstgv2zZsrS0tKShoaHN+IABA7JgwYIq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gQMH5oMf/GCS5Ic//GG++tWv5tFHH82QIUPy0EMP5fDDD88HPvCBfPvb306S3HvvvfnUpz6Vxx57LLvttlv+/Oc/Z/jw4fnP//zPvPOd76zaeweA7siKPQBsZZYsWZIVK1Zk6dKlSZKjjjoqV155ZWX+9ttvz7Bhw5Ik2223XU488cT89Kc/rcxfe+21OeWUUzJkyJAkyaGHHppDDz20zWtcccUVOfPMM7PbbrslSfbYY48cddRRmT59eqe+NwDYGlmxB4BupKamZqPL5pP1l9/36LH+7/njx4/P9773veyxxx5597vfnbPOOisnnXRSZd+//OUv+cQnPpHnn38+vXv3zsKFCzN48ODK/Lx58zJ27Ng2x999993bbD/xxBP5y1/+kiOPPLIy9vzzz2ffffftiLcJAGzAij0AdCM77LBDXnrppY3Gm5ub07dv3yRJ//79M3v27PzHf/xHevfunfe+970544wzkiT/8z//k+OOOy6HH354Hnjggdx///0599xzN/nHgg3V1NRsNDZ+/Pjcf//9lccTTzyRf//3f++AdwkAbEiwB4BuZNiwYXn88cc3Gn/88cez//77J0kefvjhLF68OMccc0y+973v5c4778y///u/Z9myZXnkkUeyatWqStBPktWrV7c51n777Zf58+e3GVu0aNFGdfzxj39sM3bfffflG9/4xt/1/gCAjQn2ANCNfOhDH8oPf/jDPPDAA5Wx5cuXZ/LkyTnvvPOSJD/5yU9y/fXXV+ZfeeWV7LTTTunXr1/23Xff1NTUZNasWUmSVatWtfl9fZJ84hOfyI9+9KNKuP/tb3+bxx57rM0+F198ce6+++787ne/S5KsWLEin//8512KDwCdoKZ4s2vrAIBSmT59em644YYURZG+ffumZ8+e+T//5//kzDPPTLJ+xf6SSy7Jiy++mG222Sbr1q3Ll7/85Uq3+htvvDHTpk3LwIED09DQkKIoMnPmzJx00kn5/ve/nyT50pe+lG9961sZPHhwRo4cmeeeey51dXX51re+Vanj1ltvzZVXXpntt98+PXr0yEc/+tGcddZZW/5fCAB0c4I9ANAuq1atyrp167LddttVxo4//vgcccQRufjii6tYGQBsnVyKDwC0y6xZs/Kv//qvle0nnngiDz74YE4//fQqVgUAWy+3uwMA2mXffffN888/n8MOO6xyKf8dd9yRvfbaq9qlAcBWyaX4AAAAUGIuxQcAAIASE+wBAACgxAR7AAAAKDHBHgAAAEpMsAcAAIASE+wBAACgxAR7AAAAKDHBHgAAAErs/wMZLKXgV1HDagAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "init_sol.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Heuristic solution" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "alns = ALNS(rnd_state)\n", "\n", "alns.add_destroy_operator(random_removal)\n", "alns.add_destroy_operator(worst_removal)\n", "\n", "alns.add_repair_operator(greedy_insert)\n", "alns.add_repair_operator(minimal_wastage)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "accept = HillClimbing()\n", "select = RouletteWheel([3, 2, 1, 0.5], 0.8, 2, 2)\n", "stop = MaxIterations(5_000)\n", "\n", "result = alns.iterate(init_sol, select, accept, stop)\n", "solution = result.best_state\n", "objective = solution.objective()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+UAAAIiCAYAAACuWWkyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABbEklEQVR4nO3de3zPdf/H8ed3B2PYhhhjbLiY4+YsyuaUVLokIjlM6aQrh4ukSzFS6XSlk9RFSEIuSXV1RclQTklKzmVyiCJ2MIxt798ffvtcvjba2Pb5+H4f99ttt/Z9fz7fz+f1/X4/m557vz/vt8sYYwQAAAAAAIqdj90FAAAAAADgrQjlAAAAAADYhFAOAAAAAIBNCOUAAAAAANiEUA4AAAAAgE0I5QAAAAAA2IRQDgAAAACATQjlAAAAAADYhFAOAAAAAIBNCOUAgAJJS0tTTEyMypcvr4iICLvL8Whz585VTEyMXC6XEhIS7C7nqrVgwQLeRwCAYxHKAQCSpD179mjIkCFq2LChYmJi1KhRI7Vr107Tp09XVlaWtV/ZsmW1efNm3Xrrrfk67v79+1WpUiW99tprRVW6Zs2apVmzZtly7qJ01113afPmzXaX8af27t2rhIQE7d271+5S8tS7d+8rfh+XLFmicuXKaePGjVZbcnKyEhISHPEZeerPAAB4A0I5AECffvqpmjRpooiICG3cuFGbN2/Wli1b9Oqrr+q1117TDTfcoPT09Ms6dkBAgGrUqKGQkJDCLfo8FwskOecuX758kZ0b50L5hAkTHBvKC0NQUJBq1KihwMBAqy05OVkTJkxwdCjnZwAAnM/P7gIAAPbauXOnevXqpaFDh2r06NFu26Kjo/Xf//5XdevW1QMPPKA5c+YU+PiVKlXSN998U1jlXjXnhmdp3769I8J3QfEzAADOR085AHi5hIQEnTp1SsOGDctze5UqVXTnnXdq7ty52rZtW67ty5Yt0/XXX69atWqpZs2amjp1qrVt9erViomJUYkSJRQfH+/2vF9//VUDBgxQjRo1VKdOHTVt2lT//ve/cx3/p59+Uq9evVS9enVFR0crOjpao0aNUlJSknV/+8aNG7Vx40bFxMQoJiZGkydP1vr163Od+5FHHlG5cuXk6+urmJgYrV69WpL0+uuvq1atWgoKCtJDDz1knXvOnDmKjo5WnTp1FBERoXvuuUdHjx696Hv5888/q169enK5XKpataruuusuSVJWVpZiYmJUunRp1alTR1u2bNHRo0c1bNgwxcTEqGnTpmrcuLEGDhyoQ4cOXfT4krRly5Y839O77rpLlStXlsvlyvWc9evXq1OnToqMjFRkZKRuvPHGfAXMpKQk3XvvvYqOjlbTpk0VHR2tYcOGKSUlxdrn+eef1+DBgyVJgwcPtj6D5OTkSx77s88+U+vWrVW7dm1FRESoV69eSkpKctvngw8+0A033KCmTZsqJiZGLVq00Lx58/I83uuvv64GDRqoXr16atSokbp27ap33303137Z2dl6/PHH1apVK1WtWlX9+/dXWlraJWt9/fXXVb9+fblcLqs3eu7cubrpppskSePGjbNe9/k/I392/dx1112qXr26XC6XVq5cqdtvv92693348OGSpH/961+6/vrr1bx5c0VHR+u6667TsmXLrGMU9Gcgx4kTJ/T3v/9dNWvWVFRUlOrUqaMnn3xSmZmZ1j7t27e3rqnNmzfrxhtvVN26dVW/fn395z//ueR7BgAoAAMA8FpZWVmmbNmypmbNmpfcb9asWUaSef755622gQMHmjJlypj4+Hhz5swZt/3eeecdt+fXqFHDDBw40Hp8/PhxExkZaWJjY82JEyeMMcYsWbLEuFwuM2/ePGu/vXv3mgoVKpgBAwaYs2fPGmOM2bJliwkJCTEvvfSStV9sbKyJjY3Ns/YLz/3qq68aSWbz5s1u+40fP95MmjTJejxlyhTjcrnMRx99ZIwxJi0tzbRr185ER0ebjIyMi75XZ8+eNaGhoaZ79+5u7WlpaSYsLMykp6cbY4xZu3atqVu3rvn999+NMcacOXPGPPTQQ6ZZs2YmMzPT7bmSzPjx4y/5unJew4X/tK9fv94EBASYUaNGWW0jR440ZcuWNbt3777o6zDGmHnz5pl27dpZn9GJEyfMbbfdluu1rVixwkgyK1asuOTxcnzwwQfGx8fHvPbaa8aYc+9Z7969TdWqVc0ff/xh7delSxfzyiuvWI+3bNliypcvbz788EO3440cOdIEBwebDRs2GGPOvZcPPvigCQ4OdttPkgkPDzerV682xhizb98+ExQUZJ544ok/rTkpKclIMjNnzrxkW478Xj8zZ840kkynTp3M4cOHjTHnPsdhw4YZY4yJioqyjmHMufc6MDDQfPvtt27nK8jPwJkzZ8y1115rGjdubH777TdjjDE7d+40YWFhpnfv3m7Pzbmm7rvvPuvnfPjw4aZs2bLm+PHjF32/AAD5RygHAC/2+++/G0nm2muvveR+n332mZFkhgwZYrUNHDjQSDL79+9327dJkyamRo0aJjs722q7MBSMGzfOSLJCVI4OHTq4/YFg4MCBpkSJEubIkSNu+z3yyCPm9ddftx4XJJAcO3bMlCxZ0jz88MNWW1ZWlomMjDQHDhwwxhiTmppqypQpY2666Sa3Y61atSrPPzpcaPTo0cbPz88KWcYYM336dHP//fdbj0+cOGH27dvn9rzt27cbSWb9+vVu7VcSytu1a2fKly9vTp06ZbWlp6ebMmXKmLvvvvuSr+PYsWNur8EYY/773/8aSVaYM6ZgoTw7O9vUqFHD1K9f36193759RpKZOHGi1bZr165cf6Do3bu36dq1q/X4p59+Mj4+PmbEiBFu+/3xxx8mPDzcrU2SueWWW9zabrrpJtOmTZs/rbsgobwg109OKH/vvfestrS0NOv93b59e65aWrVqZR588EG3toL8DOSc88I/brz44otGklm5cqXVlnNNbdy40Wpbv369kWSWLVuW5/kAAAXD8HUAwGUrV66cqlWr5tbWsmVL/fLLLzp48OBFn7ds2TKVKlVKzZo1c2tv1KiR9uzZo19++UWStHTpUkVGRuqaa65x2++5557TkCFDLrvm2267TXPnzlVGRoYk6YsvvlC9evVUtWpVSdKaNWt04sQJXXfddbnqk6Qvv/zykue45557lJmZqXfeecdqmzFjhu655x7rcenSpbVu3Tp17tzZmvG+R48eks4Ngy8MJ0+e1FdffaXmzZurZMmSVntgYKBq1ar1p68jKChIS5YsUWxsrFXj3/72tyuqcdeuXfrll19yvbfh4eEKDg52q6l06dIaPny4mjVrpsaNGysmJkbLli1zO/cXX3yh7OxstWzZ0u145cuX1759+3KdPyoqyu1xhQoVdPjw4ct6LRdzOddPw4YNre/LlCmjSpUqSZJ8fHw0aNAgNWnSRNHR0YqJidGPP/54RdfI0qVLJUmtWrVya7/22mslnbu14ELnv285P4+F/b4BgLdiojcA8GIVKlRQ2bJl//R/rnO216xZ0609KCgo1745szwfPHgwV2DPcfToUWVmZqpp06Zu7SdOnFBoaKiOHj2qGjVq6OjRo4qMjMz368mvwYMHa968eVq8eLH69OmjGTNmWPdF59QnSW+88YYWLFjg9tzQ0FCdPn36ksevU6eOrr/+er399tt65JFHtH37dqWnp6tFixbWPtOnT9e9996rd955R/369ZPL5dLevXsVGRlp/bHgSh0/flzZ2dn65ptvFBMT47bt2LFjed5/fr7x48fr+eef13/+8x916tRJkpSYmKj27dtfdo057+2SJUu0fv16t22lS5fW2bNnJUnp6elq3769KlSooE8//VShoaGSpPj4eCUmJuY6Xn5nFy9durTbYx8fH7cl/wrD5Vw/ZcuWzdV26NAhXXfddWrbtq1Wrlxp/bzFxcVd0TVysfesQoUKkqQjR47kes7575uPz7k+ncJ+3wDAWxHKAcCL+fj4qGvXrlq4cKEOHTqkKlWq5LnfmjVr5HK5dMstt7i1nz/hV44//vhDkqxe57xcc801Onr06J9ONnbNNdfo2LFjf/IqCq59+/aKjIzUjBkz1LlzZ61du9ZtUrCcnsCRI0dedAK8P3PPPfcoPj5eX3/9tRYvXuzWSy5JM2fOVIMGDdS/f//LOr6vr6+MMW5tF05YVq5cOfn4+Cg2NlaLFy8u8Dlmzpypzp07W4G8MOS8t3feeadeeumli+63Zs0a7dq1SwsXLrQC+aWOVxTXyeUqjOtHkj755BMdOXJEY8eOzfMPYJfr/PescuXKVnvOz27FihUL7VwAgD/H8HUA8HITJkxQqVKl9PLLL+e5/dChQ5o3b54GDRqkunXrum1LTk7WgQMH3No2bNigGjVqXDKUd+nSRcnJybnWtf7pp5905513WjNAd+nSRUlJSblmPJ84caJefPFF67G/v78VUNPT0/XRRx9d8jW7XC7dfffdWr58uSZNmqTevXvL39/f2t6mTRuVKVNG3333Xa7nTpo0Kc9Z4i/Uq1cvBQUFadq0aXr//ffVr18/t+0ZGRlWj2OOP5t5/XyhoaG5guiOHTvcHgcGBur666/X999/r+zsbLdtH374oRISEi55jvzWmPPe5XwG3377rXbt2pXnMXNmIs/rvX3rrbes2ftzeoL/7PydO3eWj4+PNmzY4NZ++PBhtWrVKs8/HBWWC1/39u3btXnz5kK5fqT8vwc5teT3Z6BLly6SlGukwrp16yRJN954Y77qAwAUDkI5AHi5qKgoLVy4UFOnTtVzzz3nNrT2hx9+UNeuXXXdddfp9ddfz/XckiVL6tFHH7WGHM+ePVubN2/Wk08+ecmh0cOHD1etWrX0t7/9TSdOnJB0LuA/9NBDqlq1qvz8zg3kSkhIUNmyZTVy5EgrqG/cuFGvv/66FSwkKTIyUgcPHpQxRl999ZW1nNSlxMfHy+VyacqUKbl6scuWLatnnnlG8+bNs+6/laSPPvpIr732Wq77l/MSGBioPn366N1331WbNm1yDRXu1q2bfvzxR3388ceSpFOnTmnSpEl/etwcHTp00Ndff61ff/1VkrRq1Spt2bIl137PP/+8Dh06pIkTJ1qhbefOnRo+fHiu2wcu1K1bN33++efauHGjpHPD4c//Y0iOiIgIuVwu6w80Dz/8sBXwLuRyufTyyy9r9erVmjlzptW+bt06jRs3znpv27RpowoVKujVV1+1rpEvv/xSy5cvdztezZo1NWLECL399ttWnWfOnNGjjz6qunXrKjg4+JKv8UqEhoaqVKlS1uueOHGiPvroo0K5fiTphhtuUEBAgF544QXrZ+ydd97J8w8eBfkZuOuuu3Tttddq/Pjx1lD1n376SS+++KJ69+6tdu3a5fctAAAUBvvmmAMAOMlPP/1k7r33XlO/fn0THR1tGjRoYNq1a2dmzpxpsrKyrP1SU1NNdHS0KVeunKlRo4Z5//33TcuWLU1kZKSJiIhwmxU9R14zhR86dMjEx8ebatWqmcaNG5smTZqYZ5991u1cxhize/du07NnT1OtWjUTHR1t2rVrZ1atWuW2z86dO02LFi1MVFSUadiwofnkk0/MunXrTHR0tPH39zflypXLcymzrl27XnLm7ffee880adLEREZGmiZNmphbb73V/PDDD/l9Sy85S3VGRoZ59NFHTXh4uGnUqJHp0KGDNft1eHi4efjhh827775roqOjjSQTGhpqOnbsaD0/JSXF9O3b14SFhZmWLVuasWPHmieeeMJIMtHR0WbhwoXWvt9884254YYbTNWqVU3Tpk3Nddddl2vm7bykpKSYe++914SFhZmmTZuaLl26mISEBCPJ1KpVyzzzzDPWvuPHjzfVq1c3DRs2ND179jSnT5++5LGXLVtm2rZta6pXr26aNm1qOnbsmOtzXbdunbnuuutM5cqVTbt27czgwYPNTTfdZPz9/U10dLTZunWr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8T3lPj4+qlatmt1l5FtQUJCjLy6AaxROxzWKqwHXKZyOaxROdzVco3/WQ56Did4AAAAAALAJoRwAAAAAAJsQyh0iICBA48ePV0BAgN2lAHniGoXTcY3iasB1CqfjGoXTeeI16vETvQEAAAAA4FT0lAMAAAAAYBNCOQAAAAAANiGUAwAAAABgE0K5QyxevFgtWrTQ9ddfr9jYWG3dutXukuDBzpw5ozFjxsjPz0979+7Ntf3NN99Us2bN1LZtW9188806ePBgrucPGzZMzZs3V7NmzTR06FCdOXPGbZ+DBw/qlltuUdu2bdW0aVNNmzatKF8SPMj777+vG264QR07dlSLFi3Uq1cvt+vUGKOJEyeqadOmatmypfr166eUlBS3Y6SkpKh///5q2bKlmjZtqgkTJujCKVS2bdumuLg4tWvXTs2bN9cHH3xQHC8PV7klS5aoa9eu6tixo6677jo1bdpU8+bNc9uHaxRO8tprr8nlcikxMdGtnX/rYZeEhATFxMQoLi7O+urRo4e13St/hxrYbv369aZs2bJm165dxhhjZs+ebapWrWpSU1NtrgyeKCkpybRu3doMGDDASDJJSUlu2xctWmSqVKlijhw5YowxZsKECSYmJsZkZWVZ+zz88MOmS5cuJjMz02RmZppOnTqZhx9+2NqelZVlYmJizKRJk4wxxvz+++8mNDTULFq0qOhfIK56/v7+5rPPPjPGnLuW+vfvb+rWrWtOnz5tjDHmxRdfNI0bNzYnT540xhgzaNAg061bN7djdOvWzQwePNgYY0x6erpp0KCBefHFF63tqamppmrVqubdd981xhizc+dOU6ZMGbN+/foif324unXp0sXMnj3bevzRRx8Zl8tlvv/+e6uNaxROcfDgQVO9enUjyaxYscJq59962Gn8+PFu1+OFvPF3KKHcAW677TbTp08f63FWVpYJDQ01r7zyio1VwVNt2bLF7N6926xYsSLPUN6kSRMzZswY63FycrLx8/MzH330kTHGmKNHj7qFJmOM+c9//mP8/f3NH3/8YYwxZsmSJcbf39+kpaVZ+zzyyCOmadOmRfjK4Cl69uzp9vibb74xksyaNWtMZmamqVixopk2bZq1fevWrUaS+eGHH4wxxnz//fdGktmxY4e1z+uvv24qVqxoMjMzjTHGvPzyy6ZKlSomOzvb2qdXr16mR48e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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "_, ax = plt.subplots(figsize=(12, 6))\n", "result.plot_objectives(ax=ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Having obtained a reasonable solution, we now want to investigate each operator's performance. This may be done via the `plot_operator_counts()` method on the `result` object, like below. " ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABFIAAAJZCAYAAACKrRHzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAADOEElEQVR4nOzdeVxU1fsH8M8AwyI7iqAiIKAgoowLIG6MWqilpbnrT7FSK8vSNJdvKa5pi5VmamWpLZaapmVuueDy5euWYu477iIi+z4zz+8P4uYI6CjqoH7er1evnHPPPfc59x6GmYdzz1WJiICIiIiIiIiIiO7IwtwBEBERERERERE9KphIISIiIiIiIiIyERMpREREREREREQmYiKFiIiIiIiIiMhETKQQEREREREREZmIiRQiIiIiIiIiIhMxkUJEREREREREZCImUoiIiIiIiIiITMREChERERERERGRiZhIISIiIjKj+Ph4aDQaWFtbY8CAAeYOh4iIiO6AiRQiIiK6K2fOnMGQIUMQEhICjUaD+vXro1WrVpg/fz70er25wzNZQkICJkyYgLS0NLPG0axZMyQkJKB69eoltvXs2RPh4eFmiOrBW7hwIRYuXFii/MKFC6hatSpmz5798IMiIiIyARMpREREZLI1a9agYcOG8PX1xd69e5GQkICDBw/i888/x+zZsxEdHY3s7Gxzh2mShIQETJw40eyJlNupXr06fHx8zB3GA1FWIsXGxgY+Pj5wc3N7+EERERGZwMrcARAREdGj4fjx4+jevTvefPNNjBo1ymhbaGgo1q5di8DAQLz66qv4/vvvzRTl4+XTTz81dwgPXdWqVbFnzx5zh0FERFQmzkghIiIik0yYMAG5ubl46623St1erVo19O7dGz/++COOHDmCzMxMaDQauLm5wdfXF7/88gsiIyPh7+8PPz8/zJkzp0Qbx48fR+fOneHj44OAgAC0bNkSW7ZsUbYvWbIEGo0GKpUK48ePx4QJE9CsWTM4OzvDxcUFQNFMkz59+iA0NBQNGzZEaGgoJk6ciPz8fKWd4cOHY/z48QCAZ555BhqNBs2aNVO2FxYWYtKkSahTpw6CgoLg5+eHESNGGM226du3L7y9vaFSqbB161Z07dpViW3YsGG3PZdz5syBn58f/P390bJlS2zYsKFEnXbt2sHT0xMqlcqofMWKFYiO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aNFCfH19xdvbW9q3b2/06OOcnByZMGGCNGrUSEJDQyU0NFQaN25s9KhrEZHjx49LWFiYBAUFSUhIiKxevVp27twpoaGholarlXNR/NSgjIwMGTZsmPj4+EhISIg0bNhQvv76a6W9M2fOyJAhQ6RevXoSGhoqISEh8vTTT0t8fLzJ14WIiMgUKpF7XPWLiIiIyAQDBgxAXFwcEhMTzR3KE2/fvn1o3LgxfvnlF3Tt2tXc4RARET2SeGsPERER0WNowoQJOHLkiFFZ8RopGo3GDBERERE9HphIISIiInoMHTt2DJMmTVIWqL1w4QKmT5+O7t27w9/f38zRERERPbqYSCEiIqIHIjMzExqNBr/99hsuX74MjUaD+Ph4c4f1xOjVqxeSk5MRGhqK4OBgREVFoVOnTvjuu+/MHRoREdEjjWukEBERERERERGZiDNSiIiIiIiIiIhMxEQKEREREREREZGJmEghIiIiIiIiIjIREylERERERERERCZiIoWIiIiIiIiIyERMpBARERERERERmYiJFCIiIiIiIiIiEzGRQkRERERERERkIiZSiIiIiIiIiIhMxEQKEREREREREZGJmEghIiIiIiIiIjIREylERERERERERCZiIoWIiIiIiIiIyERMpBARERERERERmYiJFCIiIiIiIiIiEzGRQkRERERERERkIiZSiIiIiIiIiIhMxEQKEREREREREZGJmEghIiIiIiIiIjIREylERERERERERCZiIoWIiIiIiIiIyERMpBARERERERERmYiJFCIiIqpQcnNzodFo4OnpCZVKheDgYGg0GtSrVw8hISEYMmQIDh069EBjiIuLw4QJEx7oMZ5kK1euxGeffWbuMIiIiO4JEylERERUodjZ2SEhIQGvvvoqAGDNmjVISEjA4cOHsWHDBqjVajRs2BAffPDBA4shLi4OEydOfGDtP+mYSCEiokeZlbkDICIiIjJV9erVMXPmTFSpUgVjxoyBp6cnYmJizB0WERERPUE4I4WIiIgeOaNHj0bVqlUxduxY6PV6pTwjIwNvvPEGfH19ERQUhHr16mHOnDlG+2ZlZWHo0KGoX78+GjZsiNDQULz++us4c+YMAKBnz56YN28eAECj0UCj0aBbt27KLUdubm7w9fXFli1b0KZNGwQEBEClUmHlypVK+2+//Tb8/PwQFBSEOnXqYPLk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C1SuXBnff/896tSpc1/b37JlC4YPH44jR47AwcEB3t7e2L17t7IGDBEREd07JlKIiIiIiIiIiEzEW3uIiIiIiIiIiEzERAoRERERERERkYn41B4yO4PBgMuXL8PR0REqlcrc4RAREREREdFjTkSQmZmJ6tWrw8Li7uaYMJFCZnf58mXUrFnT3GEQERERERHRE+bChQvw8vK6q32YSCGzc3R0BFA0gJ2cnMwcDRERERERET3uMjIyULNmTeX76N1gIoXMrvh2HicnJyZSiIiIiIiI6KG5l+UluNgsEREREREREZGJmEghIiIiIiIiIjIREylERERERERERCZiIoWIiIiIiIiIyERMpBARERERERERmYhP7aEKo+niprC0szR3GERERERUhqXTdOYOgYjovsjS6+95X85IISIiIiIiIiIyERMpREREREREREQmYiKFiIiIiIiIiMhETKQQEREREREREZmIiRQiIiIiIiIiIhMxkUJEREREREREZCImUoiIiIiIiIiITMREChERERERERGRiZhIISIiIiIiIiIyERMpREREREREREQmYiKFiIiIiIiIiMhETKQQEREREREREZmIiRQiIiIiIiIiIhMxkUJEREREREREZCImUoiIiIiIiIiITMREChERERERERGRiZhIISIiIiIiIiIyERMpREREREREREQmYiKFiIiIiIiIiMhEVuYOgJ5sS5cuxeTJkwEAx4Ydg4XaAl6veMGxvqOZIyMiKmLQGXBtxTVcX3cddT6oA2t3a6PtuYm5SFqeBCkUFKYVQu2iRo2Xayj1Cq4V4MpPV6DP1kOfo0cl/0qo1qcaLGz+/VtG+t50XP/jOlRqFaRQUKl2JXh084CFNf/eQUREj4cCgwGfXE/GrpwcOFpYIF8Eg9wq4ynHkp/7h126hA1ZmTgSGGRUfjwvDx8nJyPToIclVKhsZYnRVT1QQ61+WN0gAsAZKWRmffr0wenTpwEAgZ8EwsbTBuc+PYfCzEIzR0ZEBBQkF+DstLPQpesAQ8nt+ZfzcX7WeXj29kStMbUQMDEAunRdUX0A+jw9zn5wFrbetvD7j1/R9jQdLi289G8bV/JxYc4FuD/nDr//+KHWf2oh51QOrq249rC6SURE9MDNu5GCTVlZ+K6mN77z9kGshydGXLmMY3l5RvXisrKwMye7xP4igtcuXUSAjTV+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Hezt7bFhwwY4OzsbxdavXz+cOnUKbdq0MSr/9ttv8corryAkJARBQUEIDAxUjvn1119j1KhRyjFFBBMnTrz3QUFERERERERUwajkXhe3ILpPOCOFiIiI6NGwdJruzpWIiB4BWXo9wk+dRHp6Opyc7m5mMBeiICIiIiIiIiIyERMpREREREREREQmqjBrpDyOEhISMGzYsFK3tWjRAlOmTHm4ARERERERERFRuTCR8gBpNBrExcWZOwwiIiIiIiIiuk94aw8RERERERERkYmYSCEiIiIiIiIiMhETKUREREREREREJmIihYiIiIiIiIjIREykEBERERERERGZiIkUIiIiIiIiIiITMZFCRERERERERGQiJlKIiIiIiIiIiEzERAoRERERERERkYmYSCEiIiIiIiIiMhETKUREREREREREJip3IiUjIwOZmZn3IxYiIiIiIiIiogqt3IkUFxcXdO3a9X7EQkRERERERERUoZU7kRIWFoYNGzbcj1iIiIiIiIiIiCq0cidSAgMDy7y1Z/DgweVtnoiIiIiIiIiowrAqbwMNGjSAVqtF586d4eXlBUtLS2Xbjh07yts8PUF29tkJJycnc4dBRERERGWJMXcARET3R0ZGBuDsfE/7qkREynNwOzs7eHp6lrotKSkJOTk55WmengAZGRlwdnZGeno6EylERERERET0wJXne2i5Z6Q0bdoUW7ZsKXVb69aty9s8EREREREREVGFUe4ZKdnZ2bC3t79f8dATiDNSiIiIiIiI6GEy64wUe3t7ZGZm4uuvv8bBgwcBFK2bMnDgQDg6Opa3eSIiIiIiIiKiCqPcM1L+/vtvPP300zAYDPD19QUAJCYmwtLSEhs2bECDBg3uR5z0GOOMFCIiIiIiInqYzDojZfjw4ZgyZQpefvllWFgUPU3ZYDDg22+/xbBhw7B58+byHoKIiIiIiIiIqEKwKG8DWVlZGDRokJJEAQALCwsMHDgQ2dnZ5W2eiIiIiIiIiKjCKHciJScnB7m5uaWW89HHRERERERERPQ4KfetPc8++yxatmyJN954A/7+/gCAU6dOYc6cOejUqVO5AyQiIiIiIiIiqijKnUiZOnUqLCwsMGTIEOTn50NEYGtri+HDh2PSpEn3I0YiIiIiIiIiogqh3E/tKZaXl4dTp04BAAICAmBra3s/mqUnAJ/aQ0RERERE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jer/V/2Ox1G7qeEz3OeeYiQiInqQ7CwsMLJq1TK3N7CzwyLv2/8O+7h6jfsdFtEj5bG5tQcAtFotbG1t8eyzzyplHTt2hIeHBxo2bKiUffXVV6hevTo0Gg0aNWqEhIQE/PHHH7CyslIeXwwAw4YNw3vvvafsFxQUhNq1ayMyMhJarRadOnXCF198gQYNGgAA2rRpgyZNmiAiIgJr1qxBjx49bhvvsGHDsG7dOqxbtw5arVZZ4BUAgoOD8fvvv+M///kPwsPD0bp1a7Rq1QoxMTEl9h01ahQ2b96MYcOGKefhxo0biI6OxtWrVzF9+nQsXLjwjn0vplKp8H//939GC9kWl//yyy9ISEhAaGgonn/+eVj/s9q3VqvFuXPnoNVqlWPOnTvX1EtHRERERERE9EhQyd0soEH0ABTPSKk7ty5npBARERHdo6XTdHeuRERkZnWPHTV3CAD+/R6anp4Op7u8Ne2xmpFCRERERERERPQgMZFCRERERERERGSix2qx2Ypm3bp1mD59eqnbunXrhjfeeOMhR0RERERERERE5cFEygPUvn17tG/f3txhEBEREREREdF9wlt7iIiIiIiIiIhMxEQKEREREREREZGJmEghIiIiIiIiIjIREylERERERERERCZiIoWIiIiIiIiIyERMpBARERERERERmYiJFCIiIiIiIiIiEzGRQkRERERERERkIiZSiIiIiIiIiIhMxEQKEREREREREZGJmEghIiIiIiIiIjIREylERERERERERCZiIoWIiIiIiIiIyERMpBARERERERERmYiJFCIiIiIiIiIiE1mZOwCiYjv77ISTk5O5wyAiIiJ6NMWYOwAioicDZ6QQEREREREREZmIiRQiIiIiIiIiIhMxkUJEREREREREZCImUoiIiIiIiIiITMREChERERERERGRiZhIISIiIiIiIiIyER9/TGYnIgCAjIwMM0dCRERERERET4Li75/F30fvBhMpZHYpKSkAgJo1a5o5EiIiIiIiInqSZGZmwtnZ+a72YSKFzM7NzQ0AcP78+bsewEQVWUZGBmrWrIkLFy7AycnJ3OEQ3Rcc1/S44timxxHHNT2u7sfYFhFkZmaievXqd70vEylkdhYWRUv1ODs78w2eHktOTk4c2/TY4bimxxXHNj2OOK7pcVXesX2vf8jnYrNERERERERERCZiIoWI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omHDhkbjOCMjAydOnFDGcatWraBWq43q7N27F2q1Gq1atQJQNNaPHz+u3DJRXKdx48ZwdXV9SL0hMnbre3h+fj5SUlLg7e0NgGObKrbp06fjwoULmD17NgDgr7/+wl9//XXfPn+0bdsW+/btg4gY1eHncnqQyhrX165dw9SpU43qXrp0CQCU92yzjutyPfOHqJx27dolTk5OcvLkSRER+f7776VGjRqSkZFh5siISufr6yurVq1SXn/99ddia2srR48eFRGRGTNmSGhoqOTk5IiIyMsvvyydOnUyaqNTp04yePBgERHJycmR+vXrGz3vnuhhKesRscuXL5fq1avL9evXRURk8uTJotFoRK/XK3WGDh0qHTp0EL1eL3q9XqKjo2Xo0KHKdp1OJxqNRt5//30REUlOThZPT09Zvnz5g+8YPfHKGtvW1tayZ88e5fV7770n7u7ucu3aNaWMY5sqorlz50q9evXkf//7n+zZs0f27NkjsbGxsmDBAhG5P58/MjIypEaNGrJ48WIRETlx4oQ4OjrKrl27HkIP6Ul0u3F99uxZcXNzU97HdTqdxMTESFBQkOTm5iptmGtcq0RuSs0QmcGvv/6KqVOnws7ODhYWFpgzZw7q1atn7rCISrV48WLMnz8fBoMBBQUFsLGxwZQpU5TVxUUEkydPxsqVK2FlZYXatWvjiy++gIuLi9JGWloa3njjDZw8eRIFBQXo3Lkzxo8fb/RYNqIHqaCgANHR0UhLS8OBAwcQERGBmjVrGj2GcN68efjqq69ga2sLV1dXfPnll/Dy8lK25+fn45133sF///tfAECzZs3w8ccfGy3odvHiRbz66qtITU1Fbm4uBg0ahNdee+3hdZSeOHca259//jmWLl0KKysr5OTkwN3dHR988IHR5w6ObapoMjMz4eLiAoPBUGLbggULMGDAgPv2+ePw4cMYMmQIDAYDcnNz8Z///AcvvPDCw+gmPWHuNK579eqFTz75BL///jtsbGyQnZ2N2rVrY/r06cqMFMB845qJFCIiIiIiIiIiE3GNFCIiIiIiIiIiEzGRQkRERERERERkIiZSiIiIiIiIiIhMxEQKEREREREREZGJmEghIiIiIiIiIjIREylERERERERERCZiIoWIiIiIiIiIyERMpBARERER0UN16dKlh7ofEdH9xEQKERE90nbv3g2tVguVSoWgoCBMmjQJAJCWloYJEyYgLS3tocWSmJiICRMmlCjv3LkzPv3004cWR3n98ssv0Gg0UKlU5g7lkVLW9X8cHD9+XPk5i4uLU8pXrlyJlStXlqttU8fbp59+is6dO5frWEDJmLOysqDVamFra4uFCxeWud+lS5fg4eFh9i/yCxcuNLoGj6K5c+figw8+KHXbjz/+iEaNGgEANmzYAE9PT6Pt27Ztw0svvQSDwfDA4yQiKgsTKURE9EgLDw9XvlSMGTMG48ePB1CUSJk4ceJDT6RMnDixRHmtWrVKfBmoyLp164bPPvvM3GE8csq6/o+DwMDAUr+8349EiqnjzdPTE35+fuU6FlAyZgcHB8TFxd3xZ9TW1haBgYGws7Mrdwzl8agnUnbs2IFvvvmmzOTy9u3b0aJFC6Vuy5Ytjbb37t0b9vb2+Oijjx54rEREZbEydwBERESPu0dpNgpRRdW7d2/07t3bbMevXLkytm3bZrbjPy5GjhyJYcOGwdLSstTt27dvR2xsLICiREpps5BGjRqFwMBADBkyBI6Ojg8yXCKiUnFGChERPXaOHDmCXr16AQB69eoFrVaLX3/9FUDRNP5BgwahYcOGiIqKQufOnXH+/HkARR/amzZtCpVKhWXLluH5559HQEAANBoNAGDOnDmIiIhA69atERYWhqlTp0JEAACbN2/GsGHDAABarRZarRb/+9//MGrUKPj6+kKr1RrF+P3330Oj0SAiIgINGzbEsmXLlG0DBw6Ep6cn+vfvj9GjRyMqKgqBgYFYv369UicvLw8DBw5EREQE2rRpg7Zt22Lt2rWlno9JkybB0dERfn5+yl9xt23bBnd3d2V6/JAhQ+Di4oKBAwca7bt69Wo899xzqFOnDoYOHWq0TafTYfTo0dBoNIiKikJ0dDQOHToEADh16pRyK8g333yDbt26oX79+nBxcbnjvmU5efIkOnTogMaNG6N+/fp44403kJeXBwCYOXMmgoKC4Ovri48++ghPPfUUfH19ERMTg9zcXKWNh339ASApKQk9e/aERqNBaGgo+vbtixs3bph0zJuV95zu27cPUVFR0Gq1aNasGV566SVcvXoVCQkJSgyJiYkAgLFjx8LT0xMDBgwo83qMGjUK69atw7p166DVavH8888r29auXYvw8HC0aNECzZo1w7x584z2/d///ofQ0FA0btwY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LJQxY8ZIYGCgtGrVSp566inZs2ePiIhcuXJFuS6hoaHy7rvvGsVxu33LcuLECWnXrp00atRIQkJCZMiQIZKTk6NsX7Bggfj4+MiXX34p0dHR4uPjI/379zeq87Cvv4jI1atXpXv37hIaGioNGjSQPn36yPXr10065s3Ke07Hjh0rjRo1Eq1WK02aNJG3335beVqRiMiaNWuUfUeOHCn/93//Jx4eHvLyyy/LsWPHjI69YsUKERE5evSohISESIsWLaRfv35KW+vWrZPGjRtLWFiYNG/eXD755BOjWOPj46VBgwbSsGFD6dChg3z66afKeCu+Hjf78ccfjcbkyZMnpWfPnsqYnDFjhsTFxRnVKX76zK1KizkqKkpsbGwkMDBQfvzxR/n5558lMDBQbGxspE2bNpKSkmJU5/PPP5fjx49Lt27dJDw8XLRarURERMjvv/9e5vUrPsdNmjSR8PBwCQkJKXG9k5OT5emnn5bQ0FB54YUX5MsvvyxxXrZv3y6BgYHSrFkzGTNmjLJv8XtK8+bNpVWrVrJ161ajtj/66CMJCQmRsLAwCQ8Pl02bNinbbj2XP/74o9L/p59+Wul/8fVfu3atiBSN7Z49e0rdunVFq9VKz549JSkp6bbnoHnz5kZPWCsWExOjPAFo5MiRt30K2ZkzZ8Te3l6ysrJueywiogdFJXKbmz+JiIiIHhELFy7EhAkTkJiYaO5QiKgMe/bswaBBg7B7925YW1vfUxsDBw5EaGgohg4dep+jIyIyDW/tISIiIiKihyIsLAwjR47E8OHD72n/RYsWwcHBQXnMORGROXBGChERET3yZs6ciblz5yIxMRFNmzbF2rVrjR6vS0QVS0pKSplrqTyI/YiI7icmUoiIiIiIiIiITMRbe4iIiIiIiIiITMREChERERERERGRiZhIISIiIiIiIiIyERMpREREREREREQmYiKFiIiIiIiIiMhETKQQEREREREREZmIiRQiIiIiIiIiIhMxkUJEREREREREZCImUoiIiIiIiIiITMREChERERERERGRiZhIISIiIiIiIiIyERMpREREREREREQmYiKFiIiIiIiIiMhETKQQEREREREREZmIiRQiIiIiIiIiIhMxkUJEREREREREZCImUoiIiIiIiIiITMREChERERERERGRiZhIISIiIiIiIiIyERMpRERERERE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RgoRERERERERkYmYSCEiIiIiIiIiMhETKUREREREREREJrIydwBEBoMBly9fhqOjI1QqlbnDISIiIiIioseciCAzMxPVq1eHhcXdzTFhIoXM7vLly6hZs6a5wyAiIiIiIqInzIULF+Dl5XVX+zCRQmbn6OgIoGgAOzk5mTkaIiIiIiIietxlZGSgZs2ayvfRu8FECpld8e08Tk5OTKQQERERERHRQ3Mvy0twsVkiIiIiIiIiIhMxkUJEREREREREZCImUoiIiIiIiIiITMREChERERERERGRiZhIISIiIiIiIiIyEZ/aQxVG08VNYWlnaVLdpdN0DzgaIiKiJ0vdY0fNHQIREdEjgTNSiIiIiIiIiIhMxEQKEREREREREZGJmEghIiIiIiIiIjIREylERERERERERCZiIoWIiIiIiIiIyERMpBARERERERERmYiJFCIiIiIiIiIiEzGRQkRERERERERkIiZSiIiIiIiIiIhMxEQKEREREREREZGJmEghIiIiIiIiIjIREylERERERERERCZiIoWIiIiIiIiIyERMpBARERERERERmYiJFCIiIiIiIiIiEzGRQkRERERERERkIiZSiIiIiIiIiIhMxEQKEREREREREZGJrMwdANH48eMBAMeHH4foBVIo8B3tC4e6DhC9IHVHKtL/lw6oAH2OHnY+dkjVVYarFYcv0cNSIILZ15Ox4MYNrPPzQw21tdH2I3l5+Ox6MgoMgms6HapaWWFqNU+jemsyMrAkLRUCIEmnQz1bW3xSvQYAYPb1ZGzKyoKTxb/5fT2Afbm5WF/LDzWtjY9HRERERGQu/CZKZrVgwQLMnDkTAOAX64czE85AINBl6QAAunQdrvxwBf7j/WFb0xaGQgPOfXIOwy5fwiJvH3OGTvTEuFRYgJGXL8PX2hr6Urafyc/HG5cu4muvmvC3sUGuwYDu5xJxXadHDXVRnd8z0vFDaiq+8aoJB0tLnC3IR49z54zaGVu1KsIr2Suv47KyMCflOpMoRERERFSh8NYeMqt3330XXl5eAICkJUnw6OEBALjx5w0AgMpKBdeWrrCtaQsAsFBbwK2NG/bk5iJZpzNP0ERPmByDYHq16uji7Fzq9lnXr6OTkzP8bWwAAHYWFvikenXU+icBohPBR9eu4c0q7nCwtAQA1LK2wdwaXkobvV1cEWJrZ9TuyvR0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4aM9RERExath5HVth0BERFRq8r6HJiYmwqyI429WiB4pISEh2Lhxo7S8Zs0a2Nrawt3dXYtR5bp69Sr27t2LrKws/Pvf/0avXr20HRIRERERERERFaLcDzYLAB06dMCcOXOwbt06ZGdnw8LCAqGhoahUBqbXTE9Px4gRI1C9enVMmDABhoaG2g6JiIiIiIiIiApRIRIpXbp0QZcuXbQdRoFatGiBp0+fFloeEBCA6OjoAstCQ0NhYmJSUqERERERERER0WsqRCLlffbq7DpEREREREREpF0VYowUIiIiIiIiIqLiwEQKEREREREREZGamEghIiIiIiIiIlITEylERERERERERGpiIoWIiIiIiIiISE1MpBARERERERERqYmJFCIiIiIiIiIiNTGRQkRERERERESkJiZSiIiIiIiIiIjUxEQKEREREREREZGaNEqkJCUlITk5ubhjISIiIiIiIiIq0zRKpFhYWKB3797FHQsRERERERERUZmmUSLF3d0dBw4cKO5YiIiIiIiIiIjKNI0SKU5OToU+2jN8+PB3CoiIiIiIiIiIqKzS1WQjFxcXKBQK+Pn5oVatWtDR0ZHKjh8/XmzBERERERERERGVJTIhhCjqRoaGhrCxsSmw7NmzZ0hLS3vnwKjiSEpKgrm5ORITE2FmZqbtcIiIiIiIiKice5fvoRr1SGnVqhXCw8MLLPP19dVkl0REREREREREZZ5GPVJSU1NhbGxcEvFQBcQeKURERERERFSaSr1HirGxMZKTk/Hzzz/j8uXLAHLHTQkKCoKpqakmuyQiIiIiIiIiKvM06pFy6dIldOzYETk5ObC3twcA3Lt3Dzo6Ojhw4ABcXFyKO04qx9gjhYiIiIiIiEpTqfdIGTduHL755ht8+umnkMtzZ1DOycnBL7/8grFjx+Lw4cOa7JaIiIiIiIiIqEyTa7JRSkoKhg0bJiVRAEAulyMoKAipqanFFhwRERERERERUVmiUSIlLS0N6enpBa7n1MdEREREREREVF5p9GhPt27d4OXlhVGjRqFu3boAgFu3bmHFihXo0aNHsQZIRERERERERFRWaJRICQkJgVwux8iRI5GZmQkhBAwMDDBu3DjMnj27uGMkIiIiIiIiIioTNJq1J09GRgZu3boFAHB0dISBgUGxBUYVB2ftISIiIiIiotL0Lt9DNRojZfXq1QAAAwMDODs7w9nZGdnZ2WjZsiX27t2ryS6JiIiIiIiIiMo8jRIp27Zty7fOxMQEoaGhmDdv3jsHRURERERERERUFqk9RsqDBw9w7949AEBCQgKOHTuG158Kio+PR0JCQnHGR0RERERERERUZqidSFm3bh1mzZoFAJDJZPDx8VEpl8lkqFatGr766qvijZCIiIiIiIiIqIzQaLBZX19fhIeHl0Q8VAFxsFkiIiIiIiIqTaU+2Ozu3bsLLYuLi9Nkl0REREREREREZZ5GiZTKlSsXWtanTx+NgyEiIiIiIiIiKss0SqQkJSXh008/Rc2aNaGjo6Py35EjR4o7RiIiIiIiIiKiMkHtwWZfNXbsWOjq6mLdunWYMmUKlixZgszMTOzevRsGBgbFHSMRERERERERUZmgUSIlMjISJ06cAADMmzdPmsGnU6dO6NWrV/FFR0RERERERERUhmj0aM+rvU4yMzORlZUlLd+7d++dgyIiIiIiIiIiKos0SqQAwKpVq/Dy5Us0atQIAwYMwKZNm/Dpp59CLtd4l0REREREREREZZpGj/ZMnz4df/75JxISEvD111+jS5cu2LVrF6ytrbFr167ijpGIiIiIiIiIqEyQCSFEUTdKSkqCTCaDqamptO7FixeoUqVKsQZHFUNSUhLMzc2RmJgIMzMzbYdDRERERERE5dy7fA/V6DkcCwsL9O7dW2UdkyhEREREREREVN5plEhxd3fHgQMHijsWIiIiIiIiIqIyTaNEipOTE5KTkwssGz58+DsFRERERERERERUVmk02KyLiwsUCgX8/PxQq1Yt6OjoSGXHjx8vtuCIiIiIiIiIiMoSjQabNTQ0hI2NTYFlz549Q1pa2jsHRhUHB5slIiIiIiKi0vQu30M16pHSqlUrhIeHF1jm6+uryS6JiIiIiIiIiMo8jXqkpKamwtjYuCTioQqIPVKIiIiIiIioNJX69MfGxsZ4+PAhZsyYgfHjxwMA9uzZg5s3b2qyOyIiIiIiIiKi94JGiZTjx4/DyckJe/bsQVhYGAAgKysLvXr1wqFDh4o1QCIiIiIiIiKiskKjRMr06dNx6NAhXLp0CdbW1gCAvn37Ijw8HCEhIcUaIBERERERERFRWaFRIkUIgdatWwMAZDKZtN7KygpKpbJ4IiMiIiIiIiIiKmM0SqQkJiYiOTk53/qHDx/i+fPn7xwUEREREREREVFZpNH0xwMGDICHhweCgoIQGxuLX3/9FZGRkdiwYQMmTZpU3DESEREREREREZUJGk1/DAA//fQTvv32Wzx48AAAYGtri2nTpmHYsGHFGiCVf5z+mIiIiIiIiErTu3wP1TiRkiclJQUAYGJi8i67oQqMiRQiIiIiIiIqTe/yPVSjR3vynDp1CtevXwcANGrUCB4eHu+yOyIiIiIiIiKiMk2jRMrdu3fRr18/nDt3TmW9u7s7tm3bBnt7++KIjYiIiIiIiIioTNFo1p7BgwfD2dkZf//9N1JSUpCSkoKLFy+icePGCAwMLO4YiYiIiIiIiIjKBI16pMTFxeHIkSMq61xcXPDLL7/A2dm5WAIjIiIiIiIiIiprNOqRUqNGjQLXCyFgZ2cnLZ8+fVqzqIiIiIiIiIiIyiCNEin+/v7w9/dHREQE7ty5gzt37iAiIgKDBg3CwIED8eDBAzx48ADjxo0r7niJiIiIiIiIiLRGo+mP5fI3519kMhmEEJDJZFAqlRoHRxUDpz8mIiIiIiKi0lTq0x97eHhg27ZteFMORgiB/v37a7J7IiIiIiIiIqIySaNEyvz58/Hnn38iPj4eVapUQevWreHi4pKv3nfffffOARIRERERERERlRVFSqRcv34dAwcOxF9//aXSG0Umk8HT0xO//vorHBwcpPXe3t7FFykRERERERERkZapPdjs/fv30b59e7Rp0wYnTpxAQkICsrOzkZCQgBMnTqB58+ZQKBR4+vRpScZLRERERERERKQ1ag82O2TIEHTu3BkBAQGF1tm+fTsOHjyIn376qdgCpPKPg80SERERERFRaXqX76Fq90iJiop6YxIFAPr27YurV68WKQAiIiIiIiIioveF2mOkGBgYqFVPX19f42CoYnOesR/mrrO1HQYRERERERGVc8p0pcbbqt0jJSMjA0rlmw+kVCqRmZmpcTBERERERERERGWZ2omUTp06YerUqW+s89VXX6Fz587vHBQRERERERERUVmk9qM9U6ZMQbt27dCiRQsEBASgQYMGMDExQWpqKq5fv47t27ejUqVKOHToUEnGS0RERERERESkNWonUgwNDREREYEZM2YgJCQEiYmJkMlkEELAzMwMI0aMwKxZszhGChERERERERGVW2onUoDcgWTnzZuHkJAQREVFISEhARYWFnBycoKOjk5JxUhEREREREREVCYUKZGSR0dHB40aNSruWIiIiIiIiIiIyjS1B5slIiIiIiIiIqromEghIiIiIiIiIlITEylERERERERERGpiIoWIiIiIiIiISE1MpBARERERERERqYmJFCIiIiIiIiIiNTGRQkRERERERESkJiZSiIiIiIiIiIjUxEQKEREREREREZGamEghIiIiIiIiIlITEylERERERERERGpiIoWIiIiIiIiISE262g6AKraZM2di9+7dAIBHPw7CY92XkOnI4DDVAQY1DbQcHRERUclLupCEF+EvILIFRLZAzsscVO1aFRatLAAAOZk5eBH+AkkXkiCTy6BMV8K4oTGse1lDrv/Pb2Kpkal4tusZAEAoBfSr68Omvw10Tf75c0+ZoUTMrhik30+HyBLIychB1W5VUblt5VI9ZyIiIm1LupgEAOjSpQv09PSwYsUKNG7cWK1t2SOFtG7w4MEAAOsB36HRykaw6W+DewvvQZmu1G5gREREpeDF4Rcwb2UOhykOqDOtDqr5VcOj1Y+Q8TADAJB+Px2xf8ai9ojacAh2gMNkB6RcSsGTX59I+1CmKnF/yX2YtzRHnWl1UOerOsjJzMGT9U9UjvVg2QPomuuizpd1UHdGXZi5myHtVlqpni8REZG2pd1Jw9MNTwEAYWFh+PTTT9G5c2ckJyertT0TKaR1O3fuBADoVa4OALBobQEogYTjCdoLioiIqJRY+1tLvU8AwLiBMSCAlzEvAQByAzksO1hCr4oeAEDHWAeVvSoj8WwiRI4AALyMfYmcjBwYNzIGAMjkMhg3NEbK1RRpv0kXk5D5NBNVP6gqravauSos21uW9CkSERGVKc//7zlMnE2k5U8++QTZ2dlYv369Wtu/V4mUs2fPonbt2sjIyCjSdn5+fli8eHEJRZVr6tSpsLe3h0KhKNHjaGr9+vWIiIjQdhgF+vvvv1WWZXIZDOwNkHItpZAtiIiIyg9De0PIdGQAAJEt8DzsOfRr6MO4cW5SxNDWENU+rKayjUxPBigB5OQu69fQh351fSSeTIQQAjmZOUg6nwRds38e60k6nwRjR2PI5DJpnY6xDgxq81FaIiKqWFKupcDA7p/PP7lcjubNm+PgwYNqbf9ejZFiamoKJycn6OnpFWk7BwcH2NjYlFBUuebOnQt9ff0ym6xYv349FApFmUv0pKWlIS0t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UvmgQYOwbNky9OzZU6qzYMEC/Oc//8H27duRkJCA7t27Y82aNQgICJDqfP/99wgLC0NYWBiA3OmSu3TpIs3Yo1AosHXrVkybNg33799HixYt4OLiAkdHR9jY2GDevHnQ0dHBtWvXsGXLFiQkJKBnz57Yu3evWtehW7duiIuLQ6VKuTPUdO3aFUIIdO/eXaXeL7/8gs8++wzOzs5o0KABnJycAOQOKvvzzz8jICAA8+bNw5YtWwAAhoaG2LRpk7T96NGjERQUhDZt2uDDDz+EqanpW/fZpEkT/PHHHxgxYgQ2b96MWrVqoW/fvjh27Ji0X319fezfvx9ffPEFmjRpgipVqqBBgwZYvny5uk2BiIiIiIiI6L0hE+8yyAeVe7GxsbCy+ufZ6c2bN2PGjBm4efNmsR0jKSkJ5ubmqD12Ox/tISIiIiIiohKnTFfi+ufXkZiYyEd7qHh5e3vj+fPnAIDMzEysWbMGn3zyiZajIiIiIiIiItIODmJBb/Thhx+iU6dOMDMzQ3p6Ojp06ICpU6dqOywiIiIiIiIirWAipYTMmzdPGnfldd988w3atm1byhFp5rvvvsN3332n7TCIiIiIiIiIygQmUkpIcHCwNJguEREREREREZUPHCOFiIiIiIiIiEhNTKQQEREREREREamJiRQiIiIiIiIiIjUxkUJEREREREREpCYmUoiIiIiIiIiI1MREChERERERERGRmphIISIiIiIiIiJSExMpRERERERERERqYiKFiIiIiIiIiEhNTKQQEREREREREamJiRQiIiIiIiIiIjUxkUJEREREREREpCYmUoiIiIiIiIiI1MREChERERERERGRmphIISIiIiIiIiJSk0wIIbQdBFVsSUlJMDc3R2JiIszMzLQdDhEREREREZVz7/I9lD1SiIiIiIiIiIjUxEQKEREREREREZGamEghIiIiIiIiIlITEylERERERERERGpiIoWIiIiIiIiISE1MpBARERERERERqUlX2wEQ5c3AnZSUpOVIiIiIiIiIqCLI+/6Z9320KJhIIa2Li4sDANSuXVvLkRAREREREVFFkpycDHNz8yJtw0QKaV2VKlUAAA8ePChyA6aKKSkpCbVr18bDhw9hZmam7XDoPcF2Q0XFNkNFxTZDmmC7oaJimykeQggkJyejRo0aRd6WiRTSOrk8d6gec3NzvhFQ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Sfjvf/8LAPD09MTChQtVBmN79OgRRowYgfj4eKSnp2PYsGH4/PPPS+9Eqdi8rc0sW7YM27dvh66uLtLS0mBlZYXvvvtO5XOIbaZiSU5OhoWFBXJycvKVrVu3DoMHDy62z6SrV69i5MiRyMnJQXp6Or788kt89NFHpXGaVIze1mYCAgLw/fff448//oC+vj5SU1NRr149zJs3T+qRArDNVCTLli3Dli1bIJfLkZOTA5lMhi+//BLdunWT6vB9pmxjIoWIiIiIiIiISE0cI4WIiIiIiIiISE1MpBARERERERERqYmJFCIiIiIiIiIiNTGRQkRERERERESkJiZSiIiIiIiIiIjUxEQKEREREREREZGamEghIiIiIiIiIlITEylERERERFSqHj9+XKrbEREVJyZSiIjovXbmzBkoFArIZDI0aNAAs2fPBgAkJCRg5syZSEhIKLVY7t27h5kzZ+Zb7+fnh8WLF5daHO9q586dcHV1hUwm03Yo75XC7n95EBUVJb3OIiIipPW///47fv/993fat7rtbfHixfDz83unYwH5Y05JSYFCoYCBgQHWr19f6HaPHz+GtbW11r/Ir1+/XuUevI9WrlyJ7777rsCyTZs2wc3NDQBw4MAB2NjYqJQfPXoUQ4cORU5OTonHSURUGCZSiIjovdayZUvpS0VwcDC+/vprALmJlFmzZpV6ImXWrFn51js4OOT7MlCW+fv7Y8mSJdoO471T2P0vD5ycnAr88l4ciRR125uNjQ3q1KnzTscC8sdsYmKCiIiIt75GDQwM4OTkBENDw3eO4V2874mU48ePY+3atYUml48dO4a2bdtKdb28vFTK+/fvD2NjYyxYsKDEYyUiKoyutgMgIiIq796n3ihEZVX//v3Rv39/rR3f0tISR48e1drxy4uJEydi7Nix0NHRKbD82LFjmDFjBoDcREpBvZAmT54MJycnjBw5EqampiUZLhFRgdgjhYiIyp1r164hICAAABAQEACFQoE9e/YAyO3GP2zYMDRr1gw+Pj7w8/PDgwcPAOT+0d6qVSvIZDLs2LEDPXv2hKOjI1xdXQEAK1asgIeHB3x9feHu7o6QkBAIIQAAhw8fxtixYwEACoUCCoUCJ0+exOTJk2Fvbw+FQqES42+//QZXV1d4eHigWbNm2LFjh1QWFBQEGxsbDBo0CFOmTIGPjw+cnJyw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qXB3d8fEiRMxbtw4jbbfsGEDTExMpGnOiYi0gT1SiIiI6L23dOlSrFy5Evfu3UOrVq2wb98+lel1iahsiYuLK3QslZLYjoioODGRQkRERERERESkJj7aQ0RERERERESkJiZSiIiIiIiIiIjUxEQKEREREREREZGamEghIiIiIiIiIlITEylERERERERERGpiIoWIiIiIiIiISE1MpBARERERERERqYmJFCIiIiIiIiIiNTGRQkRERERERESkJiZSiIiIiIiIiIjUxEQKEREREREREZGamEghIiIiIiIiIlITEylERERERERERGpiIoWIiIiIiIiISE1MpBARERERERERqUlX2wEQEZVlSqUSWVlZ2g6DiIio1Onp6UFHR0fbYRARlTlMpBARFUAIgejoaCQkJGg7FCIiIq2xsLCAjY0NZDKZtkMhIiozmEghIipAXhKlWrVqMDIy4h+QRERUoQghkJaWhpiYGABA9erVtRwREVHZwUQKEdFrlEqllESxtLTUdjhERERaYWhoCACIiYlBtWrV+JgPEdH/cLBZIqLX5I2JYmRkpOVIiIiItCvvs5DjhRER/YOJFCKiQvBxHiIiquj4WUhElB8TKUREREREREREamIihYionDhz5gwUCgVkMhkaNGgAhUIBd3d3ODo64ssvv4RSqSyW48ycORP37t0rln2VR8V1HxISEjBz5sx8M0f9/vvv+P3334s/cMqnTZs26Ny5s7bDKFBxtIOdO3fC1dWVPQ4KUdBr2dPTEw0aNMCYMWOQkZGh9r7c3Nywe/fuYostIiIC69evf6d9HD9+HK1atYJMJuN7OhFREcmEEELbQRARlSUZGRm4e/cuHBwcYGBgIK23D/6/Uo3j3rxuGm0nk8mwbt06DB48GADw119/wcPDA4sXL8a//vWvd45LJpMhPDwcCoXinfelkZnmpXy8RI02e9f7cO/ePTg4OODu3buwt7eX1uft712/RGlDkw1NSvV4lwMva7ztvXv3UK9ePQgh8OTJE1SrVq0YI3t3xdUOIiIi4OvrC238OXi9QcNSPV7DyOsabff6a/nJkydo0qQJRowYgZCQELX2ERAQgBEjRhTb++bMmTMRERGBiIiId9pPYe8zryrsM5GIqCJjjxQionKuWbNmcHZ2xuHDh7UdSoXG+/B+2bJlCyZNmgSlUolt27ZpOxwqQ2rU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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figure = plt.figure(\"operator_counts\", figsize=(12, 6))\n", "figure.subplots_adjust(bottom=0.15, hspace=.5)\n", "result.plot_operator_counts(figure, title=\"Operator diagnostics\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Several conclusions follow,\n", "\n", "* The destroy operators are about equally good, so there is little to be gained changing these around.\n", "* The repair operators, however, are not created equal: the `minimal_wastage` operator is significantly better than the simple `greedy_insert`. This makes intuitive sense, as minimising wastage exploits the assignment structure much better than a simple insertion heuristic does. It follows that the `greedy_insert` operator is actually not all that useful, and may be dropped from the ALNS heuristic altogether." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Heuristic solution has objective value: 75\n" ] } ], "source": [ "print(\"Heuristic solution has objective value:\", solution.objective())" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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CfYAAABQYoI9AAAAlJhgDwAAACUm2AMAAECJCfYAAABQYoI9AAAAlJhgDwAAACVWW82LX3DBBfnFL36RzTbbrNK2+eab5+67706SFEWRiRMn5he/+EVqa2uz884757rrrkuvXr2qVDEAAAC0L1UN9kly1VVX5YADDlhr35VXXpm77rorf/rTn9K9e/ecdtppOfnkk3Pvvfdu2CIBAACgnWq3t+KvWrUqkyZNyle/+tV07949SXL22WfnvvvuyxNPPFHl6gAAAKB9aLfBfvbs2Vm8eHGGDRtWadt1112zySabZOrUqVWsDAAAANqPqgf7n/zkJznggAMycuTInHLKKXn22WeTJHPnzk2SNDQ0VI6tqalJQ0ND5s2bV5VaAQAAoL2parDfZpttstdee2Xq1Kn5/e9/n+233z5Dhw7NwoULs2zZsiRJXV1di9fU1dVV+tamubk5TU1NLTYAAADoqKoa7E877bScddZZqa2tTadOnTJ+/Ph069YtkydPTn19fZK3gvo7NTc3V/rW5tJLL02vXr0qW//+/dfrewAAAIBqqvqt+O/UuXPnbLfddnn22WczYMCAJMmiRYtaHLNo0aJK39qMGzcujY2NlW3BggXrtWYAAACopqoG+zPPPHONtueffz7bbLNN9thjj/Tp0yczZ86s9M2ZMydLly7NIYcc8p7nrKurS8+ePVtsAAAA0FFVNdjfe++9LZ5J/+Mf/ziLFy/Oaaedls6dO2fs2LGZPHlyli9fniS5/PLLc/TRR2fQoEHVKhkAAADaldpqXvziiy/OVVddlSuuuCIrVqxIXV1dpk6dmoEDByZJzjrrrLzxxhsZOXJkamtrs9NOO+WWW26pZskAAADQrtQURVFUu4j1qamp6a1F9MbckU51773oHgAAAKwLq5uXZcFVn01jY+MG+Xl4u1o8DwAAAGgbwR4AAABKTLAHAACAEhPsAQAAoMQEewAAACgxwR4AAABKTLAHAACAEhPsAQAAoMQEewAAACgxwR4AAABKTLAHAACAEhPsAQAAoMQEewAAACgxwR4AAABKTLAHAACAEhPsAQAAoMQEewAAACgxwR4AAABKTLAHAACAEhPsAQAAoMQEewAAACgxwR4AAADWoScnHL5BryfYAwAAQIkJ9gAAAFBigj0AAACUmGAPAAAAJSbYAwAAQIkJ9gAAAFBigj0AAACUmGAPAAAAJSbYAwAAQIkJ9gAAAFBigj0AAACUmGAPAAAAJSbYAwAAQIkJ9gAAAFBigj0AAACUmGAPAAAAJSbYAwAAQIkJ9gAAAFBigj0AAACUmGAPAAAAJVbbloOXLl2aKVOm5I9//GMWLVqU1157LZtvvnkaGhqy77775ogjjkj37t3XV60AAADAu7R6xv6yyy7Lv/zLv2T8+PF5+umnU1NTk4aGhiTJnDlz8u1vfzsNDQ2ZPHnyeisWAAAAaKlVM/Zf+MIX0qNHjzz11FPZeuut3/O4efPm5ZJLLsk3v/nNXHHFFeusSAAAAGDt3nfG/vnnn8+hhx6aq6+++p+G+iTZfvvt86Mf/Sh77rlnXnvttXVWJAAAALB27ztj369fvxx//PFtOunnPve5D1wQAAAA0HptXhX/t7/97fqoAwAAAPgA2hzsJ02a1GL/sssuW2fFAAAAAG3TqmC/5ZZb5rjjjsu1116boiha9P3mN79ZL4UBAAAA769Vwf7mm2/OwIEDc8899+R3v/tdGhoacuCBB+brX/96XnrppXWyUN61116bmpqaTJ8+vUX7DTfckKFDh2bkyJEZNWpUFi5c+KGvBQAAAB1Fq4L9YYcdlgkTJmTatGnZe++9c+edd+a4445L586d89xzz6VPnz4ZOHBgTjvttA9UxPPPP5/vfe97a7TffffdmTBhQu6///7MmDEjI0aMyFFHHZXVq1d/oOsAAABAR9OqYD906NCcddZZ+fnPf576+vrst99+Of3003P11Vdn6NCheeGFFzJp0qRsscUWH6iIM844I//+7/++RvtFF12UU045pXLeM888M08++WSmTJnyga4DAAAA69P8SaM2+DVbFey/9a1v5R//+EcuuOCCzJgxI4MHD84JJ5yQiy66KI2NjfnIRz6SY4455gMtpHffffelS5cuOfzww1u0v/rqq3n00UczbNiwSluvXr2y8847Z+rUqW2+DgAAAHRE7/sc+yQ58cQTc+KJJyZJhgwZku985zv5y1/+ksceeyxz5sxJz549M2zYsIwcOTIXX3xxqy++dOnSnHvuubn//vvT3Nzcom/evHlJkoaGhhbtffv2rfStTXNzc4tzNTU1tboeAAAAKJtWBft36tWrV4477rjK/v77759rrrkmDz74YB566KE2nWv8+PE5/fTTs+WWW2b+/Pkt+pYtW5Ykqaura9FeV1dX6VubSy+9NBMmTGhTHQAAAFBWbX6O/dixY1ueoFOnDB48OKeffnpuvPHGVp9n1qxZeeihh3L66aevtb++vj5J1pjJb25urvStzbhx49LY2FjZFixY0OqaAAAAoGzaPGP/7t/C33777R/owlOmTMny5ctz0EEHJUn+8Y9/JEnGjBmTzTbbrLJK/qJFi1q87sUXX8yhhx76nuetq6tbY5YfAAAAOqo2z9i/27t/A99a48ePz6xZszJ9+vRMnz698geCq666KtOnT8/w4cOz1157ZebMmZXXNDU15emnn84hhxzyYcsGAACADuF9g/3zzz+fMWPGpCiKVp1w5cqVOeOMM/Laa6996OLOO++83HzzzXnllVeSJNdcc00GDRqUI4888kOfGwAAADqC970Vv1+/ftlll10yYsSInHXWWTnooIPWOkv//PPPZ+rUqbnqqqty9tlnp3fv3q0uYsyYMfnTn/5U+ffAgQNz++2355Of/GReeumlHHrooenWrVt69+6d++67L506fegbDQAAAKBDqClaORX/hz/8Ieecc04efvjhdO/ePb17905tbW3efPPNvPbaa2lubs7HPvaxXHHFFS2ePV9tTU1N6dWrV/qPuSOd6t570T0AAAD4sOZPGlXJoY2NjenZs+d6v2arF8/7+Mc/ngcffDALFy7Mn/70pyxatCiNjY3ZbLPN0rdv3+yzzz7p27fv+qwVAAAAeJc2r4q/1VZb5VOf+tT6qAUAAABoIz9WBwAAgBIT7AEAAKDEBHsAAAAoMcEeAAAASmydBvvLLrtsXZ4OAAAAeB9tXhU/SX7/+9/n0UcfTWNjY4qiqLTfdNNN+fa3v73OigMAAAD+uTYH+zPPPDP/8R//kd122y2bbLJJi74lS5asq7oAAACAVmhzsL///vvz3HPPZfPNN1+j75RTTlknRQEAAACt0+bf2A8ePHitoT5Jxo0b96ELAgAAAFqvzTP25557bi6//PLss88+2XLLLdO5c+dK32mnnZY//vGP67RAAAAA4L21OdgvXLgw3//+97No0aLU1NRU2ouiaLEPAAAArH9tDvZjxozJxIkTM3LkyNTX11fai6LICSecsE6LAwAAAP65Ngf7rbbaKl/84hfX2veTn/zkQxcEAAAAtF6bF8874ogjMmPGjLX2ffe73/3QBQEAAACt1+YZ+1/96le56KKL0tDQsMbieY899ti6rA0AAAB4H20O9vPnz883v/nN9+wDAAAANpw2B/vRo0fn/PPPX2tft27dPnRBAAAAQOu1+Tf2EydOfM++YcOGfahiAAAAgLZp84x9kqxevTrPPvtsXnzxxRRFUWk/55xzMmvWrHVWHAAAAPDPtTnYz5kzJ8cee2yefvrp1NTUtAj2NTU167Q4AAAA4J9r8634Y8aMyfjx47N8+fLst99+Wb16df7xj3/kpz/96Xv+9h4AAABYP9oc7Jubm3PSSSelrq6u0ta1a9eccMIJefTRR9dpcQAAAMA/1+Zg/+abb1b+vWrVqrzyyitJkuXLl+fJJ59cd5UBAAAA76vNwX6rrbbK8ccfnyVLluTAAw/MiBEj8qUvfSnDhw/PLrvssj5qBAAAAN5DmxfP+973vpcnn3wyXbp0ybhx4/Lyyy/n97//fQYNGpQrrrhifdQIAAAAvIc2B/ttt9022267bWX/uuuuW6cFAQAAAK3X5lvxk2TBggU5//zz881vfjNJcs899+SZZ55Zp4UBAAAA76/Nwf4Pf/hDdtlll9xzzz35zW9+k+StBfWOOeaYTJs2bZ0XCAAAALy3Ngf78ePHZ9q0aZk9e3YaGhqSJJ/97Gczffr0XHzxxeu8QAAAAOC9tTnYF0WRffbZJ0lSU1NTae/Tp09WrVq17ioDAAAA3lebg31jY2Nef/31NdoXLFiQl19+eZ0UBQAAALROm1fFP/HEEzNixIh88YtfzOLFi3PLLbfkb3/7W26++eacc84566NGAAAAaPfmTxpVleu2Odifc8456dWrVy655JI899xzOfXUU7PNNtvkggsuyJe+9KX1USMAAADwHtoc7JPky1/+cr785S/njTfeSJL06NFjnRYFAAAAtM4Heo7923r06JEXXnghc+bMyerVq9dVTQAAAEArtSrYF0WRH/zgB/nMZz6Tz372s/nNb36ToihyzDHHZODAgRk0aFB22223PPvss+u7XgAAAOAdWhXszzvvvIwZMyZz587N3/72t3ziE5/IBRdckNdeey133HFH7rrrruy22275zne+s77rBQAAAN6hVb+xv+OOO/LQQw9lzz33TJL853/+Z44//vg899xz2XzzzZMkRx55ZIYOHbreCgUAAADW1KoZ+969e1dCfZIcddRRGTBgQCXUJ0nXrl3Tu3fvdV4gAAAA8N5aFezXtur9FltssUZbbe0HWmQfAAAA+IBalcRfeOGF3HrrrSmKotL24osvrrUNAAAA2HBaFeyfeuqpnHLKKWu0v7utpqZm3VQFAAAAtEqrbsXff//9s3r16vfd9ttvv/VdLwAAAPAOrQr2l112WatO1trjAAAAgHWjVcF++PDhrTpZa48DAAAA1o1WBXsAAACgfRLsAQAAoMQEewAAACixqgb7X/7ylzniiCNy8MEH5+Mf/3iGDBmSn/3sZy2OKYoiF154YYYMGZK99947o0ePTmNjY5UqBgAAgPalqsH+Bz/4QU444YRMmzYtf/jDHzJhwoScdNJJmT17duWYK6+8MnfddVdmzJiRhx9+OF27ds3JJ59cxaoBAACg/ahqsL/44otz4oknVvYPOOCAFEWRuXPnJklWrVqVSZMm5atf/Wq6d++eJDn77LNz33335YknnqhKzQAAAPBu8yeNqtq1qxrshw4dmtra2iTJm2++me9///vZbbfdcsghhyRJZs+encWLF2fYsGGV1+y6667ZZJNNMnXq1KrUDAAAAO1Ju1g872tf+1r69OmTqVOn5v7770+PHj2SpDJz39DQUDm2pqYmDQ0NmTdv3lrP1dzcnKamphYbAAAAdFTtIthfd911efnll3PAAQdk5MiReeGFF5Iky5YtS5LU1dW1OL6urq7S926XXnppevXqVdn69++/fosHAACAKmoXwT5JamtrM3HixKxevTpXXHFFkqS+vj7JW7Pw79Tc3Fzpe7dx48alsbGxsi1YsGD9Fg4AAABVVFvNi69YsSJdu3at7Hfq1Ck777xz/vrXvyZJBgwYkCRZtGhRtt5668pxixYtqvS9W11d3Roz/AAAANBRVXXGfsiQIWu0vfDCC+nXr1+SZI899kifPn0yc+bMSv+cOXOydOnSygJ7AAAAsDGrarD/61//milTplT2b7vttjz11FM55ZRTkiSdO3fO2LFjM3ny5CxfvjxJcvnll+foo4/OoEGDqlIzAAAAtCdVvRX/6quvzsUXX5xLL700q1evTk1NTe699958/OMfrxxz1lln5Y033sjIkSNTW1ubnXbaKbfccksVqwYAAID2o6YoiqLaRaxPTU1Nb62OP+aOdKpb+4J7AAAA8GHMnzSq8u+3c2hjY2N69uy53q/dblbFBwAAANpOsAcAAIASE+wB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Iknxt7/9rXLMddddV/Tp06dYuXLlhnkT0Aqf/OQni+uvv36NYL/XXnsVY8eOrewvWbKkqK2tLe69996iKIri5ZdfbvEHsKIoiilTphRdunQpXnnllQ1WP7yfb33rW8UJJ5zQou2ZZ54pFi5c6POcDuOoo44qPvOZz7Ro69OnT3HFFVcY55TSE088UTzzzDPFAw88sNZgvy6+p/zyl78sunTpUrz++uuVY84555xiyJAhbaq1w96KP23atAwbNqyy36lTpwwdOjRTp06tYlXQNnfeeWeL/W7duiV561a32bNnZ/HixS3G+a677ppNNtmkMs6nTZuWHj16ZJdddqkcM3z48CxevDizZ8/eAO8A3t99992XLl265PDDD2/R/uqrr+bRRx9tMcZ79eqVnXfeuTLG//u//ztvvvlmi2OGDx+eN998M7/73e82zBuAVrj77ruz3377tWjbcccd069fP5/ndBif+tSn8vvf/z7PPfdckuT+++/P4sWL09DQYJxTSoMGDcqOO+641r519T1l2rRp2WWXXdKjR48Wx8yaNSuvvfZaq2vtkMH+lVdeSVNTUxoaGlq09+3bN/PmzatSVfDhPfjgg+nXr19GjhyZuXPnJkmLcV5TU5OGhobKOJ87d+5a/ztI4r8F2oWlS5fm3HPPzZVXXrlG39tj9J99ls+dOze1tbX5yEc+Uunv06dPOnfubIzTbixdujTz5s3LqlWrctJJJ2XkyJE5/PDD8+tf/zpJfJ7TYZx66qkZP3589thjj+y666458sgj8+lPfzqf/exnjXM6nHX1PWVdjfvatr+F9m/ZsmVJkrq6uhbtdXV1lT4om+bm5nzve9/Ltddemy5durRqnC9btmyt/W/3QbWNHz8+p59+erbccss1FqRp7Rjv2rXrGuft2rWrMU67sWTJkiRvjfcHHngggwcPzrRp0yrh3uc5HcWPf/zjTJo0KTNnzswOO+yQxx9/PFOnTk2nTp2MczqcdfU9ZdmyZZW7ct95jndeozU65Ix9fX19kreC0Ds1NzdX+qBsvvKVr+S4447Lsccem6R147y+vn6t/e98PVTLrFmz8tBDD+X0009fa39rx/jaVsBfsWKFMU670blz5yTJ0UcfncGDBydJDj744Bx00EG5+uqrfZ7TIRRFkW9/+9v5yle+kh122CFJMnjw4PzqV7/KJZdcYpzT4ayr7ynratx3yGD/kY98JL169cqiRYtatL/44osZMGBAlaqCD27s2LGpr6/PxIkTK21vj+V3j/NFixZV+gYMGLDW/w7e+XqolilTpmT58uU56KCDcsABB+T4449PkowZMyYHHHBAVq9enWTNMf7Oz/IBAwZk5cqVeeWVVyr9ixcvzqpVq4xx2o0+ffqkrq4uW221VYv2bbfdNvPmzfN5ToewePHivPbaa9luu+1atG+//fa56667jHM6nPca0239nvLPxv3222/f6no6ZLBPkoMOOigzZ86s7BdFkVmzZuWQQw6pYlXQdpMmTcqCBQty7bXXJklmzpyZmTNnZo899kifPn1ajPM5c+Zk6dKllXF+8MEH54033sjTTz9dOeaRRx7Jv/zLv2SPPfbYsG8E3mX8+PGZNWtWpk+fnunTp+f2229Pklx11VWZPn16hg8fnr322qvFGG9qasrTTz9dGeP77bdfunTp0uKYRx55JF26dFljoTKols6dO2fkyJF54YUXWrQvWrQo22yzjc9zOoQtttgidXV1a4zzF154IfX19cY5HU7v3r3XyfeUgw8+OE899VTeeOONFscMHTo0vXv3bn1BbVvwvzweeuihomfPnsUzzzxTFEVR3HrrrZ5jT+n84Ac/KHbffffiwQcfLP785z8Xf/7zn4vzzz+/uPHGG4uieOt5sIMHD648D/YLX/jCWp8H++Uvf7koiqJYtmxZ8a//+q+eB0u7NG/evLU+x75fv37Fyy+/XBRFUUycOHGtz4c94ogjilWrVhWrVq0qDjvsMM+xp925//77i969exf/8z//UxTFW4/5qqurK+67776iKHye0zF8+ctfLnbZZZfi1VdfLYqiKGbOnFl06dKluOqqq4qiMM4pr/d63N26+J6ycuXKYs899ywuueSSoiiKYvHixUXfvn3b/Bz7mqIoig/1p4p27J577snFF1+c7t27p1OnTpk8eXJ23333apcFrfL6669ns802q9yO/E433nhjTj311BRFkYkTJ+YXv/hFamtrs9NOO+W6667LZpttVjl2yZIl+frXv55nnnkmK1asyDHHHJP//b//d2pqajbgu4F/bsyYMfnTn/6Uhx56KIMHD87AgQMrM/jXX399fvjDH6Zbt27p3bt3brjhhmy99daV1zY3N+ecc87JjBkzkiQf+9jH8v3vf3+NxWyg2m677bZcfvnl6dGjR1auXJkxY8bkuOOOSxKf53QIy5YtywUXXJCpU6emvr4+r7/+ek455ZScddZZqampMc4pnRUrVuSwww7LkiVL8vjjj2fEiBHp379/i0dSr4vvKX//+99z+umn57XXXsvy5cvzpS99Kf/2b//Wplo7dLAHAACAjq7D/sYeAAAANgaCPQAAAJSYYA8AAAAlJtgDAABAiQn2AAAAUGKCPQAAAJSYYA8AAAAlJtgDQAfw4IMP5oADDkhNTU0GDhyY888/f42+bt265YADDshzzz1XxUoBgHWtpiiKotpFAADrRk1NTW688caceuqpa/Rtt912mT9//gavCQBYv8zYAwAAQIkJ9gCwkSmKIuPGjcuwYcNy0EEHZb/99sttt91W6Z88eXJGjBiRAw88MMOHD8/FF1+cd9/gN3HixGy77bbZb7/98pWvfCUnnHBC+vbtmy9+8YuVY2655ZYMGTIk++23X0aOHJl77rlng71HANiY1Fa7AABgw7rzzjtz5513Zs6cOenSpUv+z//5P7nwwgszevToJMlNN92Un/zkJxk0aFCWLl2aj33sY+nfv38+97nPJUluv/32fP/738+jjz6aAQMG5KGHHsq+++6bE088MT/+8Y+TJPfff3+++c1v5rHHHsvWW2+dZ599NoMHD85//dd/ZZ999qnaeweAjsiMPQBsZBYuXJilS5dm8eLFSZIDDzwwl112WaX/zjvvzKBBg5Ikm2yySY488sj8+te/rvRfc801OeaYYzJgwIAkyYgRIzJixIgW17jkkkty/PHHZ+utt06S7LDDDjnwwAMzefLk9freAGBjZMYeADqQmpqaNW6bT966/b5Tp7f+nj969Ojceuut2WGHHfKJT3wiJ510UkaNGlU59u9//3u+8Y1v5OWXX06XLl0yf/78bL/99pX+OXPm5PDDD29x/m222abF/pNPPpm///3vOeCAAyptL7/8cgYOHLgu3iYA8A5m7AGgA9l0003z+uuvr9He2NiYnj17Jkn69OmTmTNn5j//8z/TpUuXfPrTn85xxx2XJPmf//mfHHroodl3330zY8aMTJ8+Paeeeupa/1jwTjU1NWu0jR49OtOnT69sTz75ZH7+85+vg3cJALyTYA8AHcigQYPyxBNPrNH+xBNPZLfddkuSPPzww1mwYEEOPvjg3Hrrrbn77rvz85//PK+88koeeeSRLF++vBL0k2TFihUtzrXrrrtm7ty5Ldqee+65Nep46qmnWrQ98MAD+cEPfvCh3h8AsCbBHgA6kC984Qu5/fbbM2PGjErba6+9lvHjx+e0005LkvzqV7/KddddV+l/8803s8UWW6R3794ZOHBgampqMm3atCTJ8uXLW/y+Pkm+8Y1v5Be/+EUl3P/5z3/OY4891uKYc889N/fee28ef/zxJMnSpUvz7//+727FB4D1oKZ4v3vrAIBSmTx5cq6//voURZGePXumc+fO+epXv5rjjz8+yVsz9hdccEGWLFmSrl27ZvXq1fnud79bWa3+hhtuyKRJk9K/f/80NDSkKIpMnTo1o0aNyk9/+tMkyUUXXZQf/ehH2X777TN06NC8+OKLqa+vz49+9KNKHbfddlsuu+yy9OjRI506dcq//du/5aSTTtrw/4MAQAcn2AMAbbJ8+fKsXr06m2yySaXtsMMOy/77759zzz23ipUBwMbJrfgAQJtMmzYtX//61yv7Tz75ZB588MF89rOfrWJVALDx8rg7AKBNBg4cmJdffjkf/ehHK7fy33XXXdlpp52qXRoAbJTcig8AAAAl5lZ8AAAAKDHBHgAAAEpMsAcAAIASE+wBAACgxAR7AAAAKDHBHgAAAEpMsAcAAIASE+wBAACgxAR7AAAAKLH/D0oN9BVIJH2AAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "solution.plot()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of beams used is 75, which is 1 more than the optimal value 74.\n" ] } ], "source": [ "obj = solution.objective()\n", "print(\"Number of beams used is {0}, which is {1} more than the optimal value {2}.\"\n", " .format(obj, obj - OPTIMAL_BEAMS, OPTIMAL_BEAMS))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusions\n", "\n", "In the code above we implement a simple ALNS-based heuristic for the CSP. Although the operators are simple and few, we do find very good results in limited time: we require just one more beam than optimal solution does, a result that is **1.35%** above optimal.\n", "\n", "This notebook offers another case where the ALNS library may be put to use to construct powerful, efficient heuristic pipelines from simple, locally greedy operators." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.9" } }, "nbformat": 4, "nbformat_minor": 4 }