diff --git a/.assets/images/att48/stats_att48_aco_0.1_to_10_secs_ant_10_alpha_1_beta_1.png b/.assets/images/att48/stats_att48_aco_0.1_to_10_secs_ant_10_alpha_1_beta_1.png
new file mode 100644
index 0000000..aa87289
Binary files /dev/null and b/.assets/images/att48/stats_att48_aco_0.1_to_10_secs_ant_10_alpha_1_beta_1.png differ
diff --git a/.assets/images/att48/stats_att48_aco_0.1_to_10_secs_ant_10_alpha_1_beta_2.png b/.assets/images/att48/stats_att48_aco_0.1_to_10_secs_ant_10_alpha_1_beta_2.png
new file mode 100644
index 0000000..9f703c2
Binary files /dev/null and b/.assets/images/att48/stats_att48_aco_0.1_to_10_secs_ant_10_alpha_1_beta_2.png differ
diff --git a/.assets/images/att48/stats_att48_aco_0.1_to_10_secs.png b/.assets/images/att48/stats_att48_aco_0.1_to_10_secs_ant_10_alpha_1_beta_4.png
similarity index 100%
rename from .assets/images/att48/stats_att48_aco_0.1_to_10_secs.png
rename to .assets/images/att48/stats_att48_aco_0.1_to_10_secs_ant_10_alpha_1_beta_4.png
diff --git a/.assets/images/att48/stats_att48_aco_0.1_to_10_secs_ant_10_alpha_2_beta_1.png b/.assets/images/att48/stats_att48_aco_0.1_to_10_secs_ant_10_alpha_2_beta_1.png
new file mode 100644
index 0000000..50b3b5c
Binary files /dev/null and b/.assets/images/att48/stats_att48_aco_0.1_to_10_secs_ant_10_alpha_2_beta_1.png differ
diff --git a/.assets/images/att48/stats_att48_aco_0.1_to_10_secs_ant_10_alpha_2_beta_2.png b/.assets/images/att48/stats_att48_aco_0.1_to_10_secs_ant_10_alpha_2_beta_2.png
new file mode 100644
index 0000000..f10c29c
Binary files /dev/null and b/.assets/images/att48/stats_att48_aco_0.1_to_10_secs_ant_10_alpha_2_beta_2.png differ
diff --git a/.assets/images/att48/stats_att48_sa_1000_to_100000000_temperature_cooling_0.995_tempok_0.1.png b/.assets/images/att48/stats_att48_sa_1000_to_100000000_temperature_cooling_0.995_tempok_0.1.png
new file mode 100644
index 0000000..c7f3495
Binary files /dev/null and b/.assets/images/att48/stats_att48_sa_1000_to_100000000_temperature_cooling_0.995_tempok_0.1.png differ
diff --git a/.assets/images/att48/stats_att48_sa_1000_to_100000000_temperature_cooling_0.9999_tempok_0.00001.png b/.assets/images/att48/stats_att48_sa_1000_to_100000000_temperature_cooling_0.9999_tempok_0.00001.png
new file mode 100644
index 0000000..d24335b
Binary files /dev/null and b/.assets/images/att48/stats_att48_sa_1000_to_100000000_temperature_cooling_0.9999_tempok_0.00001.png differ
diff --git a/.assets/images/att48/stats_att48_sa_1000_to_100000000_temperature_cooling_0.9999_tempok_0.1.png b/.assets/images/att48/stats_att48_sa_1000_to_100000000_temperature_cooling_0.9999_tempok_0.1.png
new file mode 100644
index 0000000..b920479
Binary files /dev/null and b/.assets/images/att48/stats_att48_sa_1000_to_100000000_temperature_cooling_0.9999_tempok_0.1.png differ
diff --git a/.assets/images/att48/stats_att48_sa_1000_to_100000_temperature_cooling_0.9995_tempok_0.1.png b/.assets/images/att48/stats_att48_sa_1000_to_100000_temperature_cooling_0.9995_tempok_0.1.png
new file mode 100644
index 0000000..6b9691d
Binary files /dev/null and b/.assets/images/att48/stats_att48_sa_1000_to_100000_temperature_cooling_0.9995_tempok_0.1.png differ
diff --git a/.assets/images/stats_aco_alpha1-2_beta2-5.png b/.assets/images/stats_aco_alpha1-2_beta2-5.png
new file mode 100644
index 0000000..8085d97
Binary files /dev/null and b/.assets/images/stats_aco_alpha1-2_beta2-5.png differ
diff --git a/Projet_algo.ipynb b/Projet_algo.ipynb
index ad60941..b544ce5 100644
--- a/Projet_algo.ipynb
+++ b/Projet_algo.ipynb
@@ -264,7 +264,7 @@
"id": "7670fdf4-884c-4352-83fa-eed0c8b50074",
"metadata": {},
"source": [
- "## Resolution algorithm "
+ "## Resolution algorithm (with coordinates)"
]
},
{
@@ -287,809 +287,7 @@
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import random, time, math\n",
- "from tests.clustering import split_tour_across_clusters"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "id": "c177ac22",
- "metadata": {},
- "outputs": [
- {
- "ename": "AttributeError",
- "evalue": "module 'networkx.linalg.graphmatrix' has no attribute 'to_numpy_matrix'",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)",
- "Cell \u001b[1;32mIn[17], line 41\u001b[0m\n\u001b[0;32m 38\u001b[0m \u001b[39mreturn\u001b[39;00m adjacency_matrix\n\u001b[0;32m 40\u001b[0m \u001b[39m# Générer la matrice d'adjacence pondérée\u001b[39;00m\n\u001b[1;32m---> 41\u001b[0m weighted_adjacency_matrix \u001b[39m=\u001b[39m generate_weighted_adjacency_matrix(graph)\n\u001b[0;32m 43\u001b[0m \u001b[39m# Afficher la matrice d'adjacence pondérée\u001b[39;00m\n\u001b[0;32m 44\u001b[0m \u001b[39mprint\u001b[39m(weighted_adjacency_matrix)\n",
- "Cell \u001b[1;32mIn[17], line 36\u001b[0m, in \u001b[0;36mgenerate_weighted_adjacency_matrix\u001b[1;34m(graph)\u001b[0m\n\u001b[0;32m 34\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mgenerate_weighted_adjacency_matrix\u001b[39m(graph):\n\u001b[0;32m 35\u001b[0m \u001b[39m# Créer une matrice d'adjacence pondérée à partir du graphe\u001b[39;00m\n\u001b[1;32m---> 36\u001b[0m adjacency_matrix \u001b[39m=\u001b[39m graphmatrix\u001b[39m.\u001b[39;49mto_numpy_matrix(graph, weight\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mdistance\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[0;32m 38\u001b[0m \u001b[39mreturn\u001b[39;00m adjacency_matrix\n",
- "\u001b[1;31mAttributeError\u001b[0m: module 'networkx.linalg.graphmatrix' has no attribute 'to_numpy_matrix'"
- ]
- }
- ],
- "source": [
- "\n",
- "import random\n",
- "import numpy as np\n",
- "import networkx as nx\n",
- "import matplotlib.pyplot as plt\n",
- "import time as time\n",
- "\n",
- "from networkx.linalg import graphmatrix\n",
- "\n",
- "def generate_graph(num_nodes):\n",
- " G = nx.Graph()\n",
- " G.add_nodes_from(range(num_nodes + 1))\n",
- " \n",
- " for node in G.nodes():\n",
- " connected_nodes = sorted(set(G.nodes()) - {node})\n",
- " if len(connected_nodes) < 2:\n",
- " continue\n",
- " distance1 = random.randint(1, 10)\n",
- " distance2 = random.randint(1, 10)\n",
- " random_nodes = random.sample(connected_nodes, 2)\n",
- " G.add_edges_from([(node, random_nodes[0], {'distance': distance1}),\n",
- " (node, random_nodes[1], {'distance': distance2})])\n",
- "\n",
- " while not nx.is_connected(G):\n",
- " node1, node2 = random.sample(G.nodes(), 2)\n",
- " if not G.has_edge(node1, node2):\n",
- " distance = random.randint(1, 10)\n",
- " G.add_edge(node1, node2, distance=distance)\n",
- "\n",
- " return G\n",
- "\n",
- "graph = generate_graph(12)\n",
- "A = nx.adjacency_matrix(graph)\n",
- "\n",
- "def generate_weighted_adjacency_matrix(graph):\n",
- " # Créer une matrice d'adjacence pondérée à partir du graphe\n",
- " adjacency_matrix = graphmatrix.to_numpy_matrix(graph, weight='distance')\n",
- "\n",
- " return adjacency_matrix\n",
- "\n",
- "# Générer la matrice d'adjacence pondérée\n",
- "weighted_adjacency_matrix = generate_weighted_adjacency_matrix(graph)\n",
- "\n",
- "# Afficher la matrice d'adjacence pondérée\n",
- "print(weighted_adjacency_matrix)\n",
- "\n",
- "\n",
- "def generate_distance_matrix(graph):\n",
- " num_nodes = graph.number_of_nodes()\n",
- " distance_array = np.full((num_nodes, num_nodes), float('inf')) # Initialiser avec l'infini\n",
- " for edge in graph.edges(data=True):\n",
- " i, j, data = edge\n",
- " distance_array[i][j] = data['distance']\n",
- " distance_array[j][i] = data['distance'] # Pour un graphe non orienté\n",
- " np.fill_diagonal(distance_array, 0) # Remplir la diagonale avec des zéros\n",
- " return distance_array\n",
- "\n",
- "# Générer la matrice de distances\n",
- "distance_matrix = generate_distance_matrix(graph)\n",
- "\n",
- "\n",
- "# Afficher la matrice de distances\n",
- "print(distance_matrix)\n",
- "\n",
- "\n",
- "\n",
- "# Dessiner le graphe\n",
- "nx.draw(graph, with_labels=True)\n",
- "plt.show()"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "id": "9aac4453",
- "metadata": {},
- "source": [
- "# On applique l'algorithme des fourmis (ACO) sur notre graphe\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "id": "23e32e2a",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Meilleure solution : [[6, 5, 4, 8, 1, 11, 0], [9, 3, 7, 12, 10, 2, 0]]\n",
- "Distance totale : 81.0\n"
- ]
- }
- ],
- "source": [
- "import concurrent.futures\n",
- "num_trucks = 2 # Nombre de camions disponibles\n",
- "\n",
- "\n",
- "# Fonction d'évaluation de la qualité d'une solution (ici, la distance totale)\n",
- "def evaluate_solution(solution, distances):\n",
- " total_distance = 0\n",
- " num_nodes = len(solution)\n",
- "\n",
- " for i in range(num_nodes - 1):\n",
- " current_node = solution[i]\n",
- " next_node = solution[i + 1]\n",
- " total_distance += distances[current_node][next_node]\n",
- "\n",
- "\n",
- " # Ajouter la distance de retour au dépôt\n",
- " total_distance += distances[solution[-1]][solution[0]]\n",
- "\n",
- " return total_distance\n",
- "\n",
- " \n",
- "def ant_colony_optimization(distances, num_ants, num_iterations, evaporation_rate, alpha, beta, num_trucks):\n",
- " num_nodes = len(distances)\n",
- " \n",
- " pheromone = np.ones((num_nodes, num_nodes)) # Matrice de phéromones initiale\n",
- " best_solution = None\n",
- " best_distance = float('inf')\n",
- "\n",
- " start_time = time.time()\n",
- "\n",
- " for iteration in range(num_iterations):\n",
- " # Construction de solutions par les fourmis\n",
- " solutions = []\n",
- "\n",
- " for ant in range(num_ants):\n",
- " visited = set()\n",
- " current_node = random.randint(0, num_nodes - 1)\n",
- " visited.add(current_node)\n",
- " solution = [current_node]\n",
- "\n",
- " while len(visited) < num_nodes:\n",
- " next_node = None\n",
- " probabilities = []\n",
- "\n",
- " # Calcul des probabilités de choisir chaque prochain nœud\n",
- " for node in range(num_nodes):\n",
- " if node not in visited and (node !=0 or len(visited) == num_nodes - 1):\n",
- " pheromone_value = pheromone[current_node][node]\n",
- " distance_value = distances[current_node][node]\n",
- " probability = (pheromone_value ** alpha) * ((1 / distance_value) ** beta)\n",
- " probabilities.append((node, probability))\n",
- "\n",
- " total_probability = sum(prob for _, prob in probabilities)\n",
- " probabilities = [(node, prob / total_probability) for node, prob in probabilities]\n",
- "\n",
- " \n",
- " roulette_wheel = random.random()\n",
- " probability_sum = 0\n",
- "\n",
- "\n",
- " for node, probability in probabilities:\n",
- " \n",
- " probability_sum += probability\n",
- " if probability_sum >= roulette_wheel:\n",
- " next_node = node\n",
- " break\n",
- "\n",
- " visited.add(next_node)\n",
- " solution.append(next_node)\n",
- " current_node = next_node\n",
- "\n",
- " # Ajouter le retour au dépôt central à la fin du trajet\n",
- " solution.append(0)\n",
- "\n",
- " solutions.append(solution)\n",
- "\n",
- " # Évaluation des solutions et mise à jour de la meilleure solution\n",
- " for solution in solutions:\n",
- " distance = evaluate_solution(solution, distances)\n",
- " if distance < best_distance:\n",
- " best_solution = solution\n",
- " best_distance = distance\n",
- "\n",
- " # Mise à jour des phéromones\n",
- " pheromone *= evaporation_rate # Évaporation des phéromones existantes\n",
- "\n",
- " for solution in solutions:\n",
- " delta_pheromone = 1 / evaluate_solution(solution, distances)\n",
- " for i in range(num_nodes - 1):\n",
- " node1 = solution[i]\n",
- " node2 = solution[i + 1]\n",
- " pheromone[node1][node2] += delta_pheromone\n",
- " pheromone[node2][node1] += delta_pheromone\n",
- "\n",
- " # Séparer la meilleure solution en trajets pour chaque camion\n",
- " truck_solutions = []\n",
- " num_nodes_per_truck = num_nodes // num_trucks\n",
- "\n",
- " for i in range(num_trucks):\n",
- " start_index = i * num_nodes_per_truck\n",
- " end_index = start_index + num_nodes_per_truck\n",
- " truck_solution = best_solution[start_index:end_index]\n",
- " truck_solutions.append(truck_solution + [0])\n",
- " \n",
- "\n",
- " return truck_solutions, best_distance\n",
- "\n",
- "\n",
- "def trucks_thread(i, num_nodes_per_truck, best_solution, truck_solutions):\n",
- " start_index = i * num_nodes_per_truck\n",
- " end_index = start_index + num_nodes_per_truck\n",
- " truck_solution = best_solution[start_index:end_index]\n",
- " truck_solutions.append(truck_solution)\n",
- " return truck_solutions\n",
- "\n",
- "\n",
- "num_ants = 10\n",
- "num_iterations = 100\n",
- "evaporation_rate = 0.5\n",
- "alpha = 1\n",
- "beta = 1\n",
- "\n",
- "best_truck_solutions, best_distance = ant_colony_optimization(distance_matrix, num_ants, num_iterations, evaporation_rate, alpha, beta, num_trucks)\n",
- "\n",
- "\n",
- "print(\"Meilleure solution :\", best_truck_solutions)\n",
- "print(\"Distance totale :\", best_distance)\n",
- " "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "id": "6928bbbd",
- "metadata": {},
- "outputs": [
- {
- "ename": "AttributeError",
- "evalue": "module 'networkx' has no attribute 'from_numpy_matrix'",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)",
- "Cell \u001b[1;32mIn[11], line 114\u001b[0m\n\u001b[0;32m 111\u001b[0m \u001b[39m# Pour chaque solution de camion, nous devons trouver le chemin le plus court du dépôt au premier nœud du chemin\u001b[39;00m\n\u001b[0;32m 112\u001b[0m \u001b[39mfor\u001b[39;00m i, truck_solution \u001b[39min\u001b[39;00m \u001b[39menumerate\u001b[39m(best_truck_solutions):\n\u001b[0;32m 113\u001b[0m \u001b[39m# Créer un graphe à partir de la matrice de distance\u001b[39;00m\n\u001b[1;32m--> 114\u001b[0m G \u001b[39m=\u001b[39m nx\u001b[39m.\u001b[39;49mfrom_numpy_matrix(distance_matrix)\n\u001b[0;32m 116\u001b[0m \u001b[39m# Utiliser l'algorithme de Dijkstra pour trouver le chemin le plus court du dépôt (nœud 0) au premier nœud du chemin du camion\u001b[39;00m\n\u001b[0;32m 117\u001b[0m shortest_path \u001b[39m=\u001b[39m nx\u001b[39m.\u001b[39mdijkstra_path(G, \u001b[39m0\u001b[39m, truck_solution[\u001b[39m1\u001b[39m])\n",
- "\u001b[1;31mAttributeError\u001b[0m: module 'networkx' has no attribute 'from_numpy_matrix'"
- ]
- }
- ],
- "source": [
- "num_trucks = 2 # Nombre de camions disponibles\n",
- "\n",
- "def evaluate_solution(solution, distances):\n",
- " total_distance = 0\n",
- " num_nodes = len(solution)\n",
- "\n",
- " # Calculer la distance entre chaque paire consécutive de nœuds dans la solution\n",
- " for i in range(num_nodes - 1):\n",
- " current_node = solution[i]\n",
- " next_node = solution[i + 1]\n",
- " total_distance += distances[current_node][next_node]\n",
- "\n",
- " # Ajouter la distance de retour au dépôt\n",
- " total_distance += distances[solution[-1]][solution[0]]\n",
- "\n",
- " return total_distance\n",
- "\n",
- "def ant_colony_optimization(distances, num_ants, num_iterations, evaporation_rate, alpha, beta, num_trucks):\n",
- " num_nodes = len(distances)\n",
- " \n",
- " pheromone = np.ones((num_nodes, num_nodes)) # Matrice de phéromones initiale\n",
- " best_solution = None\n",
- " best_distance = float('inf')\n",
- "\n",
- " for iteration in range(num_iterations):\n",
- " # Construction de solutions par les fourmis\n",
- " solutions = []\n",
- "\n",
- " for ant in range(num_ants):\n",
- " visited = set()\n",
- " current_node = 0 # Initialiser current_node à 0\n",
- " visited.add(current_node)\n",
- " solution = [current_node]\n",
- "\n",
- " while len(visited) < num_nodes:\n",
- " next_node = None\n",
- " probabilities = []\n",
- "\n",
- " # Calcul des probabilités de choisir chaque prochain nœud\n",
- " for node in range(num_nodes):\n",
- " if node not in visited and node < len(pheromone) and current_node < len(pheromone):\n",
- " pheromone_value = pheromone[current_node][node]\n",
- " distance_value = distances[current_node][node]\n",
- " probability = (pheromone_value ** alpha) * ((1 / distance_value) ** beta)\n",
- " probabilities.append((node, probability))\n",
- "\n",
- " total_probability = sum(prob for _, prob in probabilities)\n",
- " probabilities = [(node, prob / total_probability) for node, prob in probabilities]\n",
- "\n",
- " roulette_wheel = random.random()\n",
- " probability_sum = 0\n",
- "\n",
- " for node, probability in probabilities:\n",
- " probability_sum += probability\n",
- " if probability_sum >= roulette_wheel:\n",
- " next_node = node\n",
- " break\n",
- "\n",
- " visited.add(next_node)\n",
- " solution.append(next_node)\n",
- " current_node = next_node\n",
- "\n",
- " # Ajouter le retour au dépôt central à la fin du trajet\n",
- " solution.append(0)\n",
- "\n",
- " solutions.append(solution)\n",
- "\n",
- " # Évaluation des solutions et mise à jour de la meilleure solution\n",
- " for solution in solutions:\n",
- " distance = evaluate_solution(solution, distances)\n",
- " if distance < best_distance:\n",
- " best_solution = solution\n",
- " best_distance = distance\n",
- "\n",
- " # Mise à jour des phéromones\n",
- " pheromone *= evaporation_rate # Évaporation des phéromones existantes\n",
- "\n",
- " for solution in solutions:\n",
- " delta_pheromone = 1 / evaluate_solution(solution, distances)\n",
- " for i in range(num_nodes - 1):\n",
- " node1 = solution[i]\n",
- " node2 = solution[i + 1]\n",
- " pheromone[node1][node2] += delta_pheromone\n",
- " pheromone[node2][node1] += delta_pheromone\n",
- "\n",
- " # Séparer la meilleure solution en trajets pour chaque camion\n",
- " truck_solutions = []\n",
- " num_nodes_per_truck = num_nodes // num_trucks\n",
- "\n",
- " for i in range(num_trucks):\n",
- " start_index = i * num_nodes_per_truck\n",
- " end_index = start_index + num_nodes_per_truck\n",
- " truck_solution = best_solution[start_index:end_index]\n",
- " truck_solutions.append(truck_solution + [0])\n",
- " \n",
- "\n",
- " return truck_solutions, best_distance\n",
- "\n",
- "\n",
- "\n",
- "\n",
- "\n",
- "num_ants = 10\n",
- "num_iterations = 100\n",
- "evaporation_rate = 0.5\n",
- "alpha = 1\n",
- "beta = 1\n",
- "\n",
- "best_truck_solutions,best_distance = ant_colony_optimization(distance_matrix, num_ants, num_iterations, evaporation_rate, alpha, beta, num_trucks)\n",
- "\n",
- "# Pour chaque solution de camion, nous devons trouver le chemin le plus court du dépôt au premier nœud du chemin\n",
- "for i, truck_solution in enumerate(best_truck_solutions):\n",
- " # Créer un graphe à partir de la matrice de distance\n",
- " G = nx.from_numpy_matrix(distance_matrix)\n",
- " \n",
- " # Utiliser l'algorithme de Dijkstra pour trouver le chemin le plus court du dépôt (nœud 0) au premier nœud du chemin du camion\n",
- " shortest_path = nx.dijkstra_path(G, 0, truck_solution[1])\n",
- " \n",
- " # Remplacer le premier nœud du chemin du camion par le chemin le plus court trouvé\n",
- " best_truck_solutions[i] = [0] + shortest_path + truck_solution[2:]\n",
- "\n",
- "# Calculer la distance totale pour chaque solution de camion\n",
- "total_distances = [evaluate_solution(truck_solution, distance_matrix) for truck_solution in best_truck_solutions]\n",
- "\n",
- "# Afficher les solutions et les distances totales pour chaque camion\n",
- "for i, (truck_solution, total_distance) in enumerate(zip(best_truck_solutions, total_distances)):\n",
- " print(f\"Camion {i+1} :\")\n",
- " print(\"Solution :\", truck_solution)\n",
- " print(\"Distance totale :\", total_distance)\n",
- " print()"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "id": "421c05e1",
- "metadata": {},
- "source": []
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "id": "a6ffa6c9",
- "metadata": {},
- "source": [
- "\n",
- "def ant_colony_optimization(distances, num_ants, num_iterations, evaporation_rate, alpha, beta, num_trucks):\n",
- " num_nodes = len(distances)\n",
- " \n",
- " pheromone = np.ones((num_nodes, num_nodes)) # Matrice de phéromones initiale\n",
- " best_solution = None\n",
- " best_distance = float('inf')\n",
- "\n",
- " for iteration in range(num_iterations):\n",
- " # Construction de solutions par les fourmis\n",
- " solutions = []\n",
- "\n",
- " for ant in range(num_ants):\n",
- " visited = set()\n",
- " current_node = 0 # Tous les camions partent du dépôt\n",
- " visited.add(current_node)\n",
- " solution = [current_node]\n",
- "\n",
- " while len(visited) < num_nodes:\n",
- " next_node = None\n",
- " probabilities = []\n",
- "\n",
- " # Calcul des probabilités de choisir chaque prochain nœud\n",
- " for node in range(num_nodes):\n",
- " if node not in visited:\n",
- " pheromone_value = pheromone[current_node][node]\n",
- " distance_value = distances[current_node][node]\n",
- " probability = (pheromone_value ** alpha) * ((1 / distance_value) ** beta)\n",
- " probabilities.append((node, probability))\n",
- "\n",
- " total_probability = sum(prob for _, prob in probabilities)\n",
- " probabilities = [(node, prob / total_probability) for node, prob in probabilities]\n",
- "\n",
- " roulette_wheel = random.random()\n",
- " probability_sum = 0\n",
- "\n",
- " for node, probability in probabilities:\n",
- " probability_sum += probability\n",
- " if probability_sum >= roulette_wheel:\n",
- " next_node = node\n",
- " break\n",
- "\n",
- " visited.add(next_node)\n",
- " solution.append(next_node)\n",
- " current_node = next_node\n",
- "\n",
- " # Ajouter le retour au dépôt central à la fin du trajet\n",
- " solution.append(0)\n",
- "\n",
- " solutions.append(solution)\n",
- "\n",
- " # Évaluation des solutions et mise à jour de la meilleure solution\n",
- " for solution in solutions:\n",
- " distance = evaluate_solution(solution, distances)\n",
- " if distance < best_distance:\n",
- " best_solution = solution\n",
- " best_distance = distance\n",
- "\n",
- " # Mise à jour des phéromones\n",
- " pheromone *= evaporation_rate # Évaporation des phéromones existantes\n",
- "\n",
- " for solution in solutions:\n",
- " delta_pheromone = 1 / evaluate_solution(solution, distances)\n",
- " for i in range(num_nodes - 1):\n",
- " node1 = solution[i]\n",
- " node2 = solution[i + 1]\n",
- " pheromone[node1][node2] += delta_pheromone\n",
- " pheromone[node2][node1] += delta_pheromone\n",
- "\n",
- " # Séparer la meilleure solution en trajets pour chaque camion\n",
- " truck_solutions = []\n",
- " num_nodes_per_truck = num_nodes // num_trucks\n",
- "\n",
- " for i in range(num_trucks):\n",
- " start_index = i * num_nodes_per_truck\n",
- " end_index = start_index + num_nodes_per_truck\n",
- " truck_solution = best_solution[start_index:end_index]\n",
- " truck_solutions.append(truck_solution + [0])\n",
- " \n",
- "\n",
- " return truck_solutions, best_distance\n",
- "\n",
- "num_ants = 10\n",
- "num_iterations = 100\n",
- "evaporation_rate = 0.5\n",
- "alpha = 1\n",
- "beta = 1\n",
- "\n",
- "best_truck_solutions,best_distance = ant_colony_optimization(distance_matrix, num_ants, num_iterations, evaporation_rate, alpha, beta, num_trucks)\n",
- "\n",
- "# Pour chaque solution de camion, nous devons trouver le chemin le plus court du dépôt au premier nœud du chemin\n",
- "for i, truck_solution in enumerate(best_truck_solutions):\n",
- " # Créer un graphe à partir de la matrice de distance\n",
- " G = nx.from_numpy_matrix(distance_matrix)\n",
- " \n",
- " # Utiliser l'algorithme de Dijkstra pour trouver le chemin le plus court du dépôt (nœud 0) au premier nœud du chemin du camion\n",
- " shortest_path = nx.dijkstra_path(G, 0, truck_solution[1])\n",
- " \n",
- " # Remplacer le premier nœud du chemin du camion par le chemin le plus court trouvé\n",
- " best_truck_solutions[i] = [0] + shortest_path + truck_solution[2:]\n",
- "\n",
- "# Calculer la distance totale pour chaque solution de camion\n",
- "total_distances = [evaluate_solution(truck_solution, distance_matrix) for truck_solution in best_truck_solutions]\n",
- "\n",
- "# Afficher les solutions et les distances totales pour chaque camion\n",
- "for i, (truck_solution, total_distance) in enumerate(zip(best_truck_solutions, total_distances)):\n",
- " print(f\"Camion {i+1} :\")\n",
- " print(\"Solution :\", truck_solution)\n",
- " print(\"Distance totale :\", total_distance)\n",
- " print()"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "id": "29df0137",
- "metadata": {},
- "source": [
- "# En rajoutant la contrainte de Time Window pour une instance de VRPTW\n",
- "\n",
- "Dans un premier temps on va attribuer des fenêtres de temps pour chaque clients (ville dans notre graphe)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "id": "8266e414-d350-4101-8f15-9cc05ee02934",
- "metadata": {
- "scrolled": true
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "20\n",
- "Client 0 : (0, inf)\n",
- "Client 1 : (44, 94)\n",
- "Client 2 : (99, 111)\n",
- "Client 3 : (80, 125)\n",
- "Client 4 : (85, 96)\n",
- "Client 5 : (71, 85)\n",
- "Client 6 : (34, 69)\n",
- "Client 7 : (20, 30)\n",
- "Client 8 : (46, 56)\n",
- "Client 9 : (90, 109)\n",
- "Client 10 : (74, 116)\n",
- "Client 11 : (95, 112)\n",
- "Client 12 : (93, 131)\n",
- "Client 13 : (46, 82)\n",
- "Client 14 : (86, 124)\n",
- "Client 15 : (87, 129)\n",
- "Client 16 : (13, 23)\n",
- "Client 17 : (0, 28)\n",
- "Client 18 : (77, 108)\n",
- "Client 19 : (76, 105)\n",
- "Client 20 : (78, 94)\n",
- "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]\n",
- "[(0, 19), (0, 16), (0, 5), (0, 10), (1, 18), (1, 8), (1, 11), (2, 18), (2, 6), (2, 3), (2, 9), (2, 10), (2, 14), (2, 17), (3, 7), (3, 8), (3, 16), (4, 15), (4, 5), (4, 13), (5, 8), (5, 7), (6, 16), (6, 19), (7, 15), (7, 19), (8, 13), (9, 20), (10, 15), (11, 14), (11, 18), (12, 15), (12, 17), (12, 16), (13, 19), (13, 17), (13, 20), (14, 20), (14, 15), (15, 18), (15, 20)]\n"
- ]
- }
- ],
- "source": [
- "\n",
- "def assign_time_windows(graph):\n",
- " # Créer un dictionnaire pour stocker les fenêtres de temps des clients\n",
- " time_windows = {}\n",
- "\n",
- " # Définir la fenêtre de temps pour le dépôt central (nœud 0)\n",
- " time_windows[0] = (0, float('inf'))\n",
- "\n",
- " # Assigner une fenêtre de temps à chaque client\n",
- " for node in graph.nodes():\n",
- " if node !=0 and node != graph.number_of_nodes() :\n",
- " # Générer une fenêtre de temps aléatoire pour chaque client\n",
- " start_time = random.randint(0, 100)\n",
- " end_time = start_time + random.randint(10, 50)\n",
- " time_windows[node] = (start_time, end_time)\n",
- " \n",
- "\n",
- " return time_windows\n",
- "\n",
- "# Attribuer les fenêtres de temps aux clients\n",
- "time_windows = assign_time_windows(graph)\n",
- "\n",
- "print(max(graph.nodes()))\n",
- "# Afficher les fenêtres de temps assignées\n",
- "for node, window in time_windows.items():\n",
- " print(\"Client\", node, \":\", window)\n",
- " \n",
- "#paramètres ACO\n",
- "\n",
- "print(graph.nodes())\n",
- "print(graph.edges())\n"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "id": "747541f5",
- "metadata": {},
- "source": [
- "# On va ensuite réadapter l'algorithme pour prendre en compte les time Windows "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "id": "901e6b93",
- "metadata": {},
- "outputs": [],
- "source": [
- "import concurrent.futures\n",
- "import random\n",
- "import numpy as np\n",
- "import time\n",
- "import heapq\n",
- "\n",
- "\n",
- "# Fonction d'évaluation de la qualité d'une solution (ici, la distance totale)\n",
- "def evaluate_solution(solution, distances, time_windows, dijkstra_distances):\n",
- " total_distance = 0\n",
- " total_delay = 0\n",
- " arrival_time = 0\n",
- " num_nodes = len(solution)\n",
- " waiting_times = []\n",
- "\n",
- " total_distance += dijkstra_distances[solution[1]]\n",
- "\n",
- " for i in range(num_nodes - 1):\n",
- " current_node = solution[i]\n",
- " next_node = solution[i + 1]\n",
- " total_distance += distances[current_node][next_node]\n",
- " arrival_time += distances[current_node][next_node]\n",
- "\n",
- " if arrival_time < time_windows[next_node][0]:\n",
- " waiting_time = time_windows[next_node][0] - arrival_time\n",
- " waiting_times.append((next_node, waiting_time))\n",
- " arrival_time = time_windows[next_node][0]\n",
- " elif arrival_time > time_windows[next_node][1]:\n",
- " total_delay += arrival_time - time_windows[next_node][1]\n",
- "\n",
- " # Ajouter la distance de retour au dépôt\n",
- " total_distance += distances[solution[-1]][solution[0]]\n",
- "\n",
- " return total_distance, total_delay, waiting_times\n",
- "\n",
- " \n",
- "# Fonction pour l'algorithme de Dijkstra\n",
- "def calculate_dijkstra(start_node, distances):\n",
- " num_nodes = len(distances)\n",
- " shortest_distances = [float('inf')] * num_nodes\n",
- " shortest_distances[start_node] = 0\n",
- " shortest_paths = [[] for _ in range(num_nodes)]\n",
- " shortest_paths[start_node] = [start_node]\n",
- " priority_queue = [(0, start_node)]\n",
- " while priority_queue:\n",
- " current_distance, current_node = heapq.heappop(priority_queue)\n",
- " if current_distance == shortest_distances[current_node]:\n",
- " for neighbor, distance in enumerate(distances[current_node]):\n",
- " new_distance = current_distance + distance\n",
- " if new_distance < shortest_distances[neighbor]:\n",
- " shortest_distances[neighbor] = new_distance\n",
- " shortest_paths[neighbor] = shortest_paths[current_node] + [neighbor]\n",
- " heapq.heappush(priority_queue, (new_distance, neighbor))\n",
- " return shortest_distances, shortest_paths\n",
- "\n",
- "\n",
- "dijkstra_distances, dijkstra_paths = calculate_dijkstra(0, distance_matrix)\n",
- "\n",
- "\n",
- "def ant_colony_optimization(distances, num_ants, num_iterations, evaporation_rate, alpha, beta, num_trucks):\n",
- " num_nodes = len(distances)\n",
- " pheromone = np.ones((num_nodes, num_nodes)) \n",
- " best_solution = None\n",
- " best_distance = float('inf')\n",
- " best_delay = float('inf')\n",
- " best_score = float('inf') \n",
- " best_waiting_times = None\n",
- "\n",
- " for iteration in range(num_iterations):\n",
- " solutions = []\n",
- " for ant in range(num_ants):\n",
- " visited = set()\n",
- " current_node = random.randint(0, num_nodes - 1)\n",
- " visited.add(current_node)\n",
- " solution = [current_node]\n",
- " while len(visited) < num_nodes:\n",
- " next_node = None\n",
- " probabilities = []\n",
- " arrival_time = 0\n",
- " for node in range(num_nodes):\n",
- " if node not in visited and (node !=0 or len(visited) == num_nodes - 1):\n",
- " pheromone_value = pheromone[current_node][node]\n",
- " distance_value = distances[current_node][node]\n",
- " wait_time = max(0, time_windows[node][0]- (arrival_time + distance_value))\n",
- " probability = (pheromone_value ** alpha) * ((1 / (distance_value + wait_time)) ** beta)\n",
- " probabilities.append((node, probability))\n",
- " total_probability = sum(prob for _, prob in probabilities)\n",
- " probabilities = [(node, prob / total_probability) for node, prob in probabilities]\n",
- " roulette_wheel = random.random()\n",
- " probability_sum = 0\n",
- " for node, probability in probabilities:\n",
- " probability_sum += probability\n",
- " if probability_sum >= roulette_wheel:\n",
- " next_node = node\n",
- " break\n",
- " visited.add(next_node)\n",
- " solution.append(next_node)\n",
- " current_node = next_node\n",
- " solution.append(0)\n",
- " solutions.append(solution)\n",
- "\n",
- " for solution in solutions:\n",
- " distance, delay, waiting_times = evaluate_solution(solution, distances, time_windows, dijkstra_distances)\n",
- " score = distance + delay\n",
- " if score < best_score:\n",
- " best_solution = solution\n",
- " best_distance = distance\n",
- " best_delay = delay\n",
- " best_waiting_times = waiting_times\n",
- " pheromone *= evaporation_rate\n",
- " for solution in solutions:\n",
- " delta_pheromone = 1 / (evaluate_solution(solution, distances, time_windows, dijkstra_distances)[0] + 0.01)\n",
- " for i in range(num_nodes - 1):\n",
- " node1 = solution[i]\n",
- " node2 = solution[i + 1]\n",
- " pheromone[node1][node2] += delta_pheromone\n",
- " pheromone[node2][node1] += delta_pheromone\n",
- " truck_solutions = []\n",
- " num_nodes_per_truck = num_nodes // num_trucks\n",
- " for i in range(num_trucks):\n",
- " start_index = i * num_nodes_per_truck\n",
- " end_index = start_index + num_nodes_per_truck\n",
- " truck_solution = best_solution[start_index:end_index]\n",
- " \n",
- " # Ajoutez le chemin le plus court entre le nœud 0 et le premier nœud du chemin\n",
- " dijkstra_path_to_first_node = dijkstra_paths[truck_solution[0]]\n",
- " truck_solution = dijkstra_path_to_first_node + truck_solution\n",
- " \n",
- " # Ajoutez le chemin le plus court entre le dernier nœud du chemin et le dépôt (nœud 0)\n",
- " dijkstra_path_to_depot = dijkstra_paths[truck_solution[-1]]\n",
- " truck_solution = truck_solution + dijkstra_path_to_depot\n",
- "\n",
- " truck_solutions.append(truck_solution)\n",
- " return truck_solutions, best_distance, best_waiting_times\n",
- "\n",
- "\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "id": "f24a5980",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Meilleures solutions :\n",
- "Camion 1 : [0, 9, 9, 8, 17, 7, 1, 13, 14, 0, 14]\n",
- "Camion 2 : [0, 12, 12, 18, 4, 5, 20, 19, 15, 0, 15]\n",
- "Camion 3 : [0, 10, 10, 3, 2, 16, 6, 11, 0, 0]\n",
- "Distance totale : 48.0\n"
- ]
- }
- ],
- "source": [
- "num_thread = 1\n",
- "num_ants = 10\n",
- "num_iterations = 100\n",
- "evaporation_rate = 0.5\n",
- "alpha = 1\n",
- "beta = 1\n",
- "\n",
- "num_trucks = 3 # Nombre de camions disponibles\n",
- "\n",
- "\n",
- "\n",
- "with concurrent.futures.ThreadPoolExecutor(max_workers=num_thread) as executor:\n",
- " futures = [executor.submit(ant_colony_optimization, distance_matrix, num_ants, num_iterations, evaporation_rate, alpha, beta, num_trucks) for _ in range(num_thread)]\n",
- "\n",
- " for future in concurrent.futures.as_completed(futures):\n",
- " best_truck_solutions, best_distance, best_waiting_times = future.result()\n",
- " print(\"Meilleures solutions :\")\n",
- " for i, truck_solution in enumerate(best_truck_solutions):\n",
- " print(f\"Camion {i+1} : {truck_solution}\")\n",
- " print(\"Distance totale :\", best_distance)"
+ "from tests.libs.clustering import split_tour_across_clusters"
]
}
],
diff --git a/tests/04_cluster_ant_colony_no_animation.py b/tests/04_cluster_ant_colony_no_animation.py
index 9f44faf..dc2fae5 100644
--- a/tests/04_cluster_ant_colony_no_animation.py
+++ b/tests/04_cluster_ant_colony_no_animation.py
@@ -4,8 +4,6 @@ import numpy as np
import random, time, math
from libs.clustering import split_tour_across_clusters
-random.seed(3)
-
def generate_cities(nb, max_coords=1000):
return [random.sample(range(max_coords), 2) for _ in range(nb)]
@@ -16,7 +14,7 @@ def total_distance(cities):
return sum([distance(cities[i - 1], cities[i]) for i in range(len(cities))])
class AntColony:
- def __init__(self, cities, n_ants, alpha=1, beta=2, evaporation=0.5, intensification=2, max_time=0.1):
+ def __init__(self, cities, n_ants, alpha=1, beta=4, evaporation=0.5, intensification=2, max_time=0.1):
self.cities = cities
self.n = len(cities)
self.n_ants = n_ants
@@ -68,8 +66,30 @@ nb_ants = 10
max_time_per_cluster = max_time / nb_truck
start_time_generate = time.time()
-cities = generate_cities(nb_ville, max_coords)
-cities[0] = [max_coords/2, max_coords/2]
+cities = [[0.0, 0.0], [1224.3, 945.6], [1325.9, 945.6], [1325.9, 971.0], [1224.3, 971.0], [1224.3, 996.4], [1325.9, 996.4], [1325.9, 1021.8], [1224.3, 1021.8], [1186.2, 1034.5], [1084.6, 1034.5], [1052.8, 1034.5], [1027.4, 1034.5], [1224.3, 1047.2], [1325.9, 1047.2], [1186.2, 1059.9], [1084.6, 1059.9], [1052.8, 1059.9], [1027.4, 1059.9], [1224.3, 1072.6], [1325.9, 1072.6], [1186.2, 1085.3], [1084.6, 1085.3], [1052.8, 1085.3], [1027.4, 1085.3], [1224.3, 1098.0], [1325.9, 1098.0], [1186.2, 1110.7], [1084.6, 1110.7], [1052.8, 1110.7], [1027.4, 1110.7], [1224.3, 1123.4], [1325.9, 1123.4], [1186.2, 1136.1], [1084.6, 1136.1], [1052.8, 1136.1], [1027.4, 1136.1], [1224.3, 1148.8], [1325.9, 1148.8], [1186.2,
+1161.5], [1084.6, 1161.5], [1052.8, 1161.5], [1027.4, 1161.5], [1224.3, 1174.2], [1325.9, 1174.2], [1186.2, 1186.9], [1084.6, 1186.9], [1052.8, 1186.9], [1027.4, 1186.9], [1224.3, 1199.6], [1325.9, 1199.6], [1186.2, 1212.3], [1084.6, 1212.3], [1052.8, 1212.3], [1027.4, 1212.3], [1224.3, 1225.0], [1325.9, 1225.0], [1186.2, 1237.7], [1084.6, 1237.7], [1052.8, 1237.7], [1027.4, 1237.7], [1224.3, 1250.4], [1325.9, 1250.4], [1186.2, 1263.1], [1084.6, 1263.1], [1052.8, 1263.1], [1027.4, 1263.1], [1224.3, 1275.8], [1325.9, 1275.8], [1186.2, 1288.5], [1084.6, 1288.5], [1052.8, 1288.5], [1027.4, 1288.5], [1027.4, 1313.9], [1052.8, 1313.9], [1084.6, 1313.9], [1186.2, 1313.9], [1287.8, 1339.3], [1262.4, 1339.3], [1186.2, 1339.3], [1084.6, 1339.3], [1052.8, 1339.3], [1027.4, 1339.3], [1027.4, 1364.7], [1052.8, 1364.7], [1084.6, 1364.7], [1186.2, 1364.7], [1186.2, 1390.1], [1084.6, 1390.1], [1052.8, 1390.1], [1027.4, 1390.1], [1224.3, 1402.8], [1325.9, 1402.8], [1186.2, 1415.5], [1084.6, 1415.5], [1052.8, 1415.5], [1027.4, 1415.5], [1224.3, 1428.2], [1325.9, 1428.2], [1325.9, 1453.6], [1224.3, 1453.6], [1224.3, 1479.0], [1325.9, 1479.0], [1186.2, 1491.7], [1084.6, 1491.7], [1052.8, 1491.7], [1027.4, 1504.4], [1224.3, 1504.4], [1325.9, 1504.4], [1052.8,
+1517.1], [1224.3, 1529.8], [1325.9, 1529.8], [1325.9, 1555.2], [1224.3, 1555.2], [1224.3, 1580.6], [1325.9, 1580.6], [1325.9, 1606.0], [1224.3, 1606.0], [1224.3, 1631.4], [1325.9, 1631.4], [1325.9, 1656.8], [1224.3, 1656.8], [1224.3, 1682.2], [1325.9, 1682.2], [1325.9, 1707.6], [1224.3, 1707.6], [1224.3, 1733.0], [1325.9, 1733.0], [1097.3, 1948.9], [1071.9, 1948.9], [1224.3, 2152.1], [1325.9, 2152.1], [1325.9, 2177.5], [1224.3, 2177.5], [1224.3, 2202.9], [1325.9, 2202.9], [1325.9, 2228.3], [1224.3, 2228.3], [1224.3, 2253.7], [1325.9, 2253.7], [1325.9, 2279.1], [1224.3, 2279.1], [1224.3, 2304.5], [1325.9, 2304.5], [1325.9, 2329.9], [1224.3, 2329.9], [1224.3, 2355.3], [1325.9, 2355.3], [1325.9, 2380.7], [1224.3, 2380.7], [1224.3, 2406.1], [1325.9, 2406.1], [1325.9, 2431.5], [1224.3, 2431.5], [1224.3, 2456.9], [1325.9, 2456.9], [1325.9, 2482.3], [1224.3, 2482.3], [1262.4, 2545.8], [1287.8, 2545.8], [1325.9, 2609.3], [1224.3, 2609.3], [1224.3, 2634.7], [1325.9, 2634.7], [1186.2, 2647.4], [1084.6, 2647.4], [1052.8, 2647.4], [1027.4, 2660.1], [1224.3, 2660.1], [1325.9, 2660.1], [1052.8, 2672.8], [1224.3, 2685.5], [1325.9, 2685.5], [1325.9, 2710.9], [1224.3, 2710.9], [1224.3, 2736.3], [1325.9, 2736.3], [1325.9, 2761.7], [1224.3, 2761.7], [1224.3,
+2787.1], [1325.9, 2787.1], [1325.9, 2812.5], [1224.3, 2812.5], [1325.9, 2837.9], [1224.3, 2837.9], [1186.2, 2837.9], [1084.6, 2837.9], [1224.3, 2863.3], [1325.9, 2863.3], [1325.9, 2888.7], [1224.3, 2888.7], [1224.3, 2914.1], [1325.9, 2914.1], [1325.9, 2939.5], [1224.3, 2939.5], [1579.9, 3028.4], [1605.3, 3028.4], [1630.7, 3028.4], [1656.1, 3028.4], [1681.5, 3028.4], [1706.9, 3028.4], [1732.3, 3028.4], [1757.7, 3028.4], [1783.1, 3028.4], [1808.5, 3028.4], [1833.9, 3028.4], [1859.3, 3028.4], [1884.7, 3028.4], [1910.1, 3028.4], [1935.5, 3028.4], [1973.6, 3015.7], [1999.0, 3015.7], [2024.4, 3015.7], [1922.8, 2984.0], [1821.2, 2984.0], [1618.0, 2971.3], [1681.5, 2964.9], [1783.1, 2964.9], [1821.2, 2958.6], [1922.8, 2958.6], [1643.4, 2945.9], [1681.5, 2939.5], [1783.1, 2939.5], [1973.6, 2939.5], [1999.0, 2939.5], [2024.4, 2939.5], [2075.2, 2939.5], [2176.8, 2939.5], [1948.2, 2920.5], [1872.0, 2920.5], [1618.0, 2920.5], [1681.5, 2914.1], [1783.1, 2914.1], [1973.6, 2914.1], [1999.0, 2914.1], [2024.4, 2914.1], [2075.2, 2914.1], [2176.8, 2914.1], [2176.8, 2888.7], [2075.2, 2888.7], [1783.1, 2888.7], [1681.5, 2888.7], [1618.0, 2869.7], [1872.0, 2869.7], [1948.2, 2869.7], [2176.8, 2863.3], [2075.2, 2863.3], [1783.1, 2863.3], [1681.5, 2863.3], [1643.4,
+2844.3], [1681.5, 2837.9], [1783.1, 2837.9], [1878.3, 2837.9], [1903.7, 2837.9], [1929.1, 2837.9], [1973.6, 2837.9], [1999.0, 2837.9], [2024.4, 2837.9], [2075.2, 2837.9], [2176.8, 2837.9], [1618.0, 2818.9], [1681.5, 2812.5], [1783.1, 2812.5], [2075.2, 2812.5], [2176.8, 2812.5], [2176.8, 2787.1], [2075.2, 2787.1], [2024.4, 2787.1], [1999.0, 2787.1], [1973.6, 2787.1], [1783.1, 2787.1], [1681.5, 2787.1], [1618.0, 2768.1], [1681.5, 2761.7], [1783.1, 2761.7], [2075.2, 2761.7], [2176.8, 2761.7], [1643.4, 2742.7], [1681.5, 2736.3], [1783.1, 2736.3], [1878.3, 2736.3], [1903.7, 2736.3], [1929.1, 2736.3], [2075.2, 2736.3], [2176.8, 2736.3], [1618.0, 2717.3], [1681.5, 2710.9], [1783.1, 2710.9], [1821.2, 2710.9], [1922.8, 2710.9], [1973.6, 2710.9], [1999.0, 2710.9], [2024.4, 2710.9], [2075.2, 2710.9], [2176.8, 2710.9], [2176.8, 2685.5], [2075.2, 2685.5], [2024.4, 2685.5], [1999.0, 2685.5], [1973.6, 2685.5], [1922.8, 2685.5], [1821.2, 2685.5], [1783.1, 2685.5], [1757.7, 2685.5], [1732.3, 2685.5], [1706.9, 2685.5], [1681.5, 2685.5], [1656.1, 2685.5], [1618.0, 2666.5], [1821.2, 2660.1], [1922.8, 2660.1], [2075.2, 2660.1], [2176.8, 2660.1], [1643.4, 2641.1], [1681.5, 2634.7], [1783.1, 2634.7], [1821.2, 2634.7], [1922.8, 2634.7], [2075.2, 2634.7], [2176.8,
+2634.7], [1618.0, 2615.7], [1681.5, 2609.3], [1783.1, 2609.3], [1821.2, 2609.3], [1922.8, 2609.3], [1973.6, 2609.3], [1999.0, 2609.3], [2024.4, 2609.3], [2075.2, 2609.3], [2176.8, 2609.3], [1935.5, 2571.2], [1910.1, 2571.2], [1884.7, 2571.2], [1859.3, 2571.2], [1833.9, 2571.2], [1808.5, 2571.2], [1783.1, 2571.2], [1757.7, 2571.2], [1732.3, 2571.2], [1706.9, 2571.2], [1681.5, 2571.2], [1656.1, 2571.2], [1630.7, 2571.2], [1605.3, 2571.2], [1579.9, 2571.2], [1973.6, 2558.5], [1999.0, 2558.5], [2024.4, 2558.5], [2113.3, 2545.8], [2138.7, 2545.8], [1922.8, 2526.8], [1821.2, 2526.8], [1618.0, 2514.1], [1681.5, 2507.7], [1783.1, 2507.7], [1821.2, 2501.4], [1922.8, 2501.4], [1643.4, 2488.7], [1681.5, 2482.3], [1783.1, 2482.3], [1973.6, 2482.3], [1999.0, 2482.3], [2024.4, 2482.3], [2075.2, 2482.3], [2176.8, 2482.3], [1948.2, 2463.3], [1872.0, 2463.3], [1618.0, 2463.3], [1681.5, 2456.9], [1783.1, 2456.9], [1973.6, 2456.9], [1999.0, 2456.9], [2024.4, 2456.9], [2075.2, 2456.9], [2176.8, 2456.9], [2176.8, 2431.5], [2075.2, 2431.5], [1783.1, 2431.5], [1681.5, 2431.5], [1618.0, 2412.5], [1872.0, 2412.5], [1948.2, 2412.5], [2176.8, 2406.1], [2075.2, 2406.1], [1783.1, 2406.1], [1681.5, 2406.1], [1643.4, 2387.1], [1681.5, 2380.7], [1783.1, 2380.7], [1878.3,
+2380.7], [1903.7, 2380.7], [1929.1, 2380.7], [1973.6, 2380.7], [1999.0, 2380.7], [2024.4, 2380.7], [2075.2, 2380.7], [2176.8, 2380.7], [1618.0, 2361.7], [1681.5, 2355.3], [1783.1, 2355.3], [2075.2, 2355.3], [2176.8, 2355.3], [2176.8, 2329.9], [2075.2, 2329.9], [2024.4, 2329.9], [1999.0, 2329.9], [1973.6, 2329.9], [1783.1, 2329.9], [1681.5, 2329.9], [1618.0, 2310.9], [1681.5, 2304.5], [1783.1, 2304.5], [2075.2, 2304.5], [2176.8, 2304.5], [1643.4, 2285.5], [1681.5, 2279.1], [1783.1, 2279.1], [1878.3, 2279.1], [1903.7, 2279.1], [1929.1, 2279.1], [2075.2, 2279.1], [2176.8, 2279.1], [1618.0, 2260.1], [1681.5, 2253.7], [1783.1, 2253.7], [1821.2, 2253.7], [1922.8, 2253.7], [1973.6, 2253.7], [1999.0, 2253.7], [2024.4, 2253.7], [2075.2, 2253.7], [2176.8, 2253.7], [2176.8, 2228.3], [2075.2, 2228.3], [2024.4, 2228.3], [1999.0, 2228.3], [1973.6, 2228.3], [1922.8, 2228.3], [1821.2, 2228.3], [1783.1, 2228.3], [1757.7, 2228.3], [1732.3, 2228.3], [1706.9, 2228.3], [1681.5, 2228.3], [1656.1, 2228.3], [1618.0, 2209.3], [1821.2, 2202.9], [1922.8, 2202.9], [2075.2, 2202.9], [2176.8, 2202.9], [1643.4, 2183.9], [1681.5, 2177.5], [1783.1, 2177.5], [1821.2, 2177.5], [1922.8, 2177.5], [2075.2, 2177.5], [2176.8, 2177.5], [1618.0, 2158.5], [1681.5, 2152.1], [1783.1,
+2152.1], [1821.2, 2152.1], [1922.8, 2152.1], [1973.6, 2152.1], [1999.0, 2152.1], [2024.4, 2152.1], [2075.2, 2152.1], [2176.8, 2152.1], [2113.3, 1948.9], [2138.7, 1948.9], [1935.5, 1745.7], [1910.1, 1745.7], [1884.7, 1745.7], [1859.3, 1745.7], [1833.9, 1745.7], [1808.5, 1745.7], [1783.1, 1745.7], [1757.7, 1745.7], [1732.3, 1745.7], [1706.9, 1745.7], [1681.5, 1745.7], [1656.1, 1745.7], [1630.7, 1745.7], [1605.3, 1745.7], [1579.9, 1745.7], [1973.6, 1733.0], [1999.0, 1733.0], [2024.4, 1733.0], [2075.2, 1733.0], [2176.8, 1733.0], [2176.8, 1707.6], [2075.2, 1707.6], [1922.8, 1701.3], [1821.2, 1701.3], [1618.0, 1688.6], [1681.5, 1682.2], [1783.1, 1682.2], [2075.2, 1682.2], [2176.8, 1682.2], [1922.8, 1675.9], [1821.2, 1675.9], [1643.4, 1663.2], [1681.5, 1656.8], [1783.1, 1656.8], [1973.6, 1656.8], [1999.0, 1656.8], [2024.4, 1656.8], [2075.2, 1656.8], [2176.8, 1656.8], [1948.2, 1637.8], [1872.0, 1637.8], [1618.0, 1637.8], [1681.5, 1631.4], [1783.1, 1631.4], [1973.6, 1631.4], [1999.0, 1631.4], [2024.4, 1631.4], [2075.2, 1631.4], [2176.8, 1631.4], [2176.8, 1606.0], [2075.2, 1606.0], [1783.1, 1606.0], [1681.5, 1606.0], [1618.0, 1587.0], [1872.0, 1587.0], [1948.2, 1587.0], [2176.8, 1580.6], [2075.2, 1580.6], [1783.1, 1580.6], [1681.5, 1580.6], [1643.4,
+1561.6], [1681.5, 1555.2], [1783.1, 1555.2], [1872.0, 1555.2], [1903.7, 1555.2], [1929.1, 1555.2], [1973.6, 1555.2], [1999.0, 1555.2], [2024.4, 1555.2], [2075.2, 1555.2], [2176.8, 1555.2], [1618.0, 1536.2], [1681.5, 1529.8], [1783.1, 1529.8], [2075.2, 1529.8], [2176.8, 1529.8], [2176.8, 1504.4], [2075.2, 1504.4], [2024.4, 1504.4], [1999.0, 1504.4], [1973.6, 1504.4], [1783.1, 1504.4], [1681.5, 1504.4], [1618.0, 1485.4], [1681.5, 1479.0], [1783.1, 1479.0], [2075.2, 1479.0], [2176.8, 1479.0], [1643.4, 1460.0], [1681.5, 1453.6], [1783.1, 1453.6], [1872.0, 1453.6], [1903.7, 1453.6], [1929.1, 1453.6], [2075.2, 1453.6], [2176.8, 1453.6], [1618.0, 1434.6], [1681.5, 1428.2], [1783.1, 1428.2], [1821.2, 1428.2], [1922.8, 1428.2], [1973.6, 1428.2], [1999.0, 1428.2], [2024.4, 1428.2], [2075.2, 1428.2], [2176.8, 1428.2], [2176.8, 1402.8], [2075.2, 1402.8], [2024.4, 1402.8], [1999.0, 1402.8], [1973.6, 1402.8], [1922.8, 1402.8], [1821.2, 1402.8], [1783.1, 1402.8], [1757.7, 1402.8], [1732.3, 1402.8], [1706.9, 1402.8], [1681.5, 1402.8], [1656.1, 1402.8], [1618.0, 1383.8], [1821.2, 1377.4], [1922.8, 1377.4], [1643.4, 1358.4], [1681.5, 1352.0], [1783.1, 1352.0], [1821.2, 1352.0], [1922.8, 1352.0], [2113.3, 1352.0], [2138.7, 1352.0], [1618.0, 1333.0], [1681.5,
+1326.6], [1783.1, 1326.6], [1821.2, 1326.6], [1922.8, 1326.6], [1973.6, 1326.6], [1999.0, 1326.6], [2024.4, 1326.6], [1935.5, 1288.5], [1910.1, 1288.5], [1884.7, 1288.5], [1859.3, 1288.5], [1833.9, 1288.5], [1808.5, 1288.5], [1783.1, 1288.5], [1757.7, 1288.5], [1732.3, 1288.5], [1706.9, 1288.5], [1681.5, 1288.5], [1656.1, 1288.5], [1630.7, 1288.5], [1605.3, 1288.5], [1579.9, 1288.5], [1973.6, 1275.8], [1999.0, 1275.8], [2024.4, 1275.8], [2075.2, 1275.8], [2176.8, 1275.8], [2176.8, 1250.4], [2075.2, 1250.4], [1922.8, 1244.1], [1821.2, 1244.1], [1618.0, 1231.4], [1681.5, 1225.0], [1783.1, 1225.0], [2075.2, 1225.0], [2176.8, 1225.0], [1922.8, 1218.7], [1821.2, 1218.7], [1643.4, 1206.0], [1681.5, 1199.6], [1783.1, 1199.6], [1973.6, 1199.6], [1999.0, 1199.6], [2024.4, 1199.6], [2075.2, 1199.6], [2176.8, 1199.6], [1948.2, 1180.6], [1872.0, 1180.6], [1618.0, 1180.6], [1681.5, 1174.2], [1783.1, 1174.2], [1973.6, 1174.2], [1999.0, 1174.2], [2024.4, 1174.2], [2075.2, 1174.2], [2176.8, 1174.2], [2176.8, 1148.8], [2075.2, 1148.8], [1783.1, 1148.8], [1681.5, 1148.8], [1618.0, 1129.8], [1872.0, 1129.8], [1948.2, 1129.8], [2176.8, 1123.4], [2075.2, 1123.4], [1783.1, 1123.4], [1681.5, 1123.4], [1643.4, 1104.4], [1681.5, 1098.0], [1783.1, 1098.0], [1878.3,
+1098.0], [1903.7, 1098.0], [1929.1, 1098.0], [1973.6, 1098.0], [1999.0, 1098.0], [2024.4, 1098.0], [2075.2, 1098.0], [2176.8, 1098.0], [1618.0, 1079.0], [1681.5, 1072.6], [1783.1, 1072.6], [2075.2, 1072.6], [2176.8, 1072.6], [2176.8, 1047.2], [2075.2, 1047.2], [2024.4, 1047.2], [1999.0, 1047.2], [1973.6, 1047.2], [1783.1, 1047.2], [1681.5, 1047.2], [1618.0, 1028.2], [1681.5, 1021.8], [1783.1, 1021.8], [2075.2, 1021.8], [2176.8, 1021.8], [1643.4, 1002.8], [1681.5, 996.4], [1783.1, 996.4], [1878.3, 996.4], [1903.7, 996.4], [1929.1, 996.4], [2075.2, 996.4], [2176.8, 996.4], [1618.0, 977.4], [1681.5, 971.0], [1783.1, 971.0], [1821.2, 971.0], [1922.8, 971.0], [1973.6, 971.0], [1999.0, 971.0], [2024.4, 971.0], [2075.2, 971.0], [2176.8, 971.0], [2176.8, 945.6], [2075.2, 945.6], [2024.4, 945.6], [1999.0, 945.6], [1973.6, 945.6], [1922.8, 945.6], [1821.2, 945.6], [1783.1, 945.6], [1757.7, 945.6], [1732.3, 945.6], [1706.9, 945.6], [1681.5, 945.6], [1656.1, 945.6], [1618.0, 926.6], [1821.2, 920.2], [1922.8, 920.2], [1643.4, 901.2], [1681.5, 894.8], [1783.1, 894.8], [1821.2, 894.8], [1922.8, 894.8], [1618.0, 875.8], [1681.5, 869.4], [1783.1, 869.4], [1821.2, 869.4], [1922.8, 869.4], [1973.6, 869.4], [1999.0, 869.4], [2024.4, 869.4], [2449.8, 2037.8], [2475.2, 2037.8], [2500.6, 2037.8], [2526.0, 2037.8], [2551.4, 2037.8], [2576.8, 2037.8], [2602.2, 2037.8], [2627.6, 2037.8], [2672.1, 2037.8], [2697.5, 2037.8], [2722.9, 2037.8], [2748.3, 2037.8], [2773.7, 2037.8], [2799.1, 2037.8], [2824.5, 2037.8], [2849.9, 2037.8], [2926.1, 2075.9], [3002.3, 2075.9], [3053.1, 2075.9], [3103.9, 2075.9], [3167.4, 2075.9], [3243.6, 2075.9], [3294.4, 2075.9], [3345.2, 2075.9], [3383.3, 2088.6], [3459.5, 2088.6], [3497.6, 2088.6], [3599.2, 2088.6], [3650.0, 2088.6], [3675.4, 2088.6], [3700.8, 2088.6], [2849.9, 2114.0], [2824.5, 2114.0], [2799.1, 2114.0], [2773.7, 2114.0], [2748.3, 2114.0], [2722.9, 2114.0], [2697.5, 2114.0], [2672.1, 2114.0], [2627.6, 2114.0], [2602.2, 2114.0], [2576.8, 2114.0], [2551.4, 2114.0], [2526.0, 2114.0], [2500.6, 2114.0], [2475.2, 2114.0], [2449.8, 2114.0], [3497.6, 2126.7], [3599.2, 2126.7], [3459.5, 2139.4], [3383.3, 2139.4], [3345.2, 2152.1], [3294.4, 2152.1], [3243.6, 2152.1], [3167.4, 2152.1], [3103.9,
+2152.1], [3053.1, 2152.1], [3002.3, 2152.1], [2926.1, 2152.1], [2875.3, 2152.1], [2849.9, 2152.1], [2824.5, 2152.1], [2773.7, 2152.1], [2672.1, 2152.1], [2634.0, 2152.1], [2532.4, 2152.1], [2468.9, 2158.5], [2532.4, 2177.5], [2634.0, 2177.5], [2672.1, 2177.5], [2773.7, 2177.5], [2494.3, 2183.9], [2672.1, 2202.9], [2773.7, 2202.9], [2926.1, 2202.9], [3002.3, 2202.9], [3053.1, 2202.9], [3103.9, 2202.9], [3167.4, 2202.9], [3243.6, 2202.9], [3294.4, 2202.9], [3345.2, 2202.9], [2468.9, 2209.3], [3383.3, 2215.6], [3459.5, 2215.6], [3497.6, 2215.6], [3599.2, 2215.6], [3675.4, 2215.6], [3726.2, 2215.6], [2875.3, 2228.3], [2849.9, 2228.3], [2824.5, 2228.3], [2773.7, 2228.3], [2672.1, 2228.3], [2634.0, 2228.3], [2608.6, 2228.3], [2583.2, 2228.3], [2557.8, 2228.3], [2532.4, 2228.3], [2507.0, 2228.3], [3675.4, 2241.0], [3726.2, 2241.0], [3599.2, 2253.7], [3497.6, 2253.7], [2875.3, 2253.7], [2849.9, 2253.7], [2824.5, 2253.7], [2773.7, 2253.7], [2672.1, 2253.7], [2634.0, 2253.7], [2532.4, 2253.7], [2468.9, 2260.1], [3383.3, 2266.4], [3459.5, 2266.4], [3675.4, 2266.4], [3726.2, 2266.4], [3345.2, 2279.1], [3294.4, 2279.1], [3243.6, 2279.1], [3167.4, 2279.1], [3103.9, 2279.1], [3053.1, 2279.1], [3002.3, 2279.1], [2926.1, 2279.1], [2780.0, 2279.1], [2754.6,
+2279.1], [2729.2, 2279.1], [2634.0, 2279.1], [2532.4, 2279.1], [2494.3, 2285.5], [3675.4, 2291.8], [3726.2, 2291.8], [2634.0, 2304.5], [2532.4, 2304.5], [2468.9, 2310.9], [3675.4, 2317.2], [3726.2, 2317.2], [3345.2, 2329.9], [3294.4, 2329.9], [3243.6, 2329.9], [3167.4, 2329.9], [3103.9, 2329.9], [3053.1, 2329.9], [3002.3, 2329.9], [2926.1, 2329.9], [2875.3, 2329.9], [2849.9, 2329.9], [2824.5, 2329.9], [2634.0, 2329.9], [2532.4, 2329.9], [3383.3, 2342.6], [3459.5, 2342.6], [3497.6, 2342.6], [3599.2, 2342.6], [3675.4, 2342.6], [3726.2, 2342.6], [2634.0, 2355.3], [2532.4, 2355.3], [2468.9, 2361.7], [3675.4, 2368.0], [3726.2, 2368.0], [3599.2, 2380.7], [3497.6, 2380.7], [2875.3, 2380.7], [2849.9, 2380.7], [2824.5, 2380.7], [2780.0, 2380.7], [2754.6, 2380.7], [2729.2, 2380.7], [2634.0, 2380.7], [2532.4, 2380.7], [2494.3, 2387.1], [3383.3, 2393.4], [3459.5, 2393.4], [3675.4, 2393.4], [3726.2, 2393.4], [3345.2, 2406.1], [3294.4, 2406.1], [3243.6, 2406.1], [3167.4, 2406.1], [3103.9, 2406.1], [3053.1, 2406.1], [3002.3, 2406.1], [2926.1, 2406.1], [2634.0, 2406.1], [2532.4, 2406.1], [2468.9, 2412.5], [2722.9, 2412.5], [2799.1, 2412.5], [3675.4, 2418.8], [3726.2, 2418.8], [2634.0, 2431.5], [2532.4, 2431.5], [3675.4, 2444.2], [3726.2, 2444.2], [3345.2,
+2456.9], [3294.4, 2456.9], [3243.6, 2456.9], [3167.4, 2456.9], [3103.9, 2456.9], [3053.1, 2456.9], [3002.3, 2456.9], [2926.1, 2456.9], [2875.3, 2456.9], [2849.9, 2456.9], [2824.5, 2456.9], [2634.0, 2456.9], [2532.4, 2456.9], [2468.9, 2463.3], [2722.9, 2463.3], [2799.1, 2463.3], [3383.3, 2469.6], [3459.5, 2469.6], [3497.6, 2469.6], [3599.2, 2469.6], [3675.4, 2469.6], [3726.2, 2469.6], [2875.3, 2482.3], [2849.9, 2482.3], [2824.5, 2482.3], [2634.0, 2482.3], [2532.4, 2482.3], [2494.3, 2488.7], [3675.4, 2495.0], [3726.2, 2495.0], [2773.7, 2501.4], [2672.1, 2501.4], [2532.4, 2507.7], [2634.0, 2507.7], [3497.6, 2507.7], [3599.2, 2507.7], [2468.9, 2514.1], [3383.3, 2520.4], [3459.5, 2520.4], [3675.4, 2520.4], [3726.2, 2520.4], [2773.7, 2526.8], [2672.1, 2526.8], [2926.1, 2533.1], [3002.3, 2533.1], [3053.1, 2533.1], [3103.9, 2533.1], [3167.4, 2533.1], [3243.6, 2533.1], [3294.4, 2533.1], [3345.2, 2533.1], [3675.4, 2545.8], [3726.2, 2545.8], [2875.3, 2558.5], [2849.9, 2558.5], [2824.5, 2558.5], [2430.8, 2571.2], [2456.2, 2571.2], [2481.6, 2571.2], [2507.0, 2571.2], [2532.4, 2571.2], [2557.8, 2571.2], [2583.2, 2571.2], [2608.6, 2571.2], [2634.0, 2571.2], [2659.4, 2571.2], [2684.8, 2571.2], [2710.2, 2571.2], [2735.6, 2571.2], [2761.0, 2571.2], [2786.4,
+2571.2], [3675.4, 2571.2], [3726.2, 2571.2], [3345.2, 2583.9], [3294.4, 2583.9], [3243.6, 2583.9], [3167.4, 2583.9], [3103.9, 2583.9], [3053.1, 2583.9], [3002.3, 2583.9], [2926.1, 2583.9], [3383.3, 2596.6], [3459.5, 2596.6], [3497.6, 2596.6], [3599.2, 2596.6], [3675.4, 2596.6], [3726.2, 2596.6], [2875.3, 2609.3], [2849.9, 2609.3], [2824.5, 2609.3], [2773.7, 2609.3], [2672.1, 2609.3], [2634.0, 2609.3], [2532.4, 2609.3], [2468.9, 2615.7], [3675.4, 2622.0], [3726.2, 2622.0], [3599.2, 2634.7], [3497.6, 2634.7], [2773.7, 2634.7], [2672.1, 2634.7], [2634.0, 2634.7], [2532.4, 2634.7], [2494.3, 2641.1], [3383.3, 2647.4], [3459.5, 2647.4], [3675.4, 2647.4], [3726.2, 2647.4], [3345.2, 2660.1], [3294.4, 2660.1], [3243.6, 2660.1], [3167.4, 2660.1], [3103.9, 2660.1], [3053.1, 2660.1], [3002.3, 2660.1], [2926.1, 2660.1], [2773.7, 2660.1], [2672.1, 2660.1], [2468.9, 2666.5], [3675.4, 2672.8], [3726.2, 2672.8], [2634.0, 2679.2], [2608.6, 2679.2], [2583.2, 2679.2], [2507.0, 2685.5], [2532.4, 2685.5], [2557.8, 2685.5], [2672.1, 2685.5], [2773.7, 2685.5], [2824.5, 2685.5], [2849.9, 2685.5], [2875.3, 2685.5], [3675.4, 2698.2], [3726.2, 2698.2], [3345.2, 2710.9], [3294.4, 2710.9], [3243.6, 2710.9], [3167.4, 2710.9], [3103.9, 2710.9], [3053.1, 2710.9], [3002.3,
+2710.9], [2926.1, 2710.9], [2875.3, 2710.9], [2849.9, 2710.9], [2824.5, 2710.9], [2773.7, 2710.9], [2672.1, 2710.9], [2634.0, 2710.9], [2532.4, 2710.9], [2468.9, 2717.3], [3383.3, 2723.6], [3459.5, 2723.6], [3497.6, 2723.6], [3599.2, 2723.6], [3675.4, 2723.6], [3726.2, 2723.6], [2780.0, 2736.3], [2754.6, 2736.3], [2729.2, 2736.3], [2634.0, 2736.3], [2532.4, 2736.3], [2494.3, 2742.7], [3675.4, 2749.0], [3726.2, 2749.0], [3599.2, 2761.7], [3497.6, 2761.7], [2634.0, 2761.7], [2532.4, 2761.7], [2468.9, 2768.1], [3383.3, 2774.4], [3459.5, 2774.4], [3675.4, 2774.4], [3726.2, 2774.4], [3345.2, 2787.1], [3294.4, 2787.1], [3243.6, 2787.1], [3167.4, 2787.1], [3103.9, 2787.1], [3053.1, 2787.1], [3002.3, 2787.1], [2926.1, 2787.1], [2875.3, 2787.1], [2849.9, 2787.1], [2824.5, 2787.1], [2634.0, 2787.1], [2532.4, 2787.1], [3675.4, 2799.8], [3726.2, 2799.8], [2634.0, 2812.5], [2532.4, 2812.5], [2468.9, 2818.9], [3675.4, 2825.2], [3726.2, 2825.2], [3345.2, 2837.9], [3294.4, 2837.9], [3243.6, 2837.9], [3167.4, 2837.9], [3103.9, 2837.9], [3053.1, 2837.9], [3002.3, 2837.9], [2926.1, 2837.9], [2875.3, 2837.9], [2849.9, 2837.9], [2824.5, 2837.9], [2780.0, 2837.9], [2754.6, 2837.9], [2729.2, 2837.9], [2634.0, 2837.9], [2532.4, 2837.9], [2494.3, 2844.3], [3383.3,
+2850.6], [3459.5, 2850.6], [3497.6, 2850.6], [3599.2, 2850.6], [3675.4, 2850.6], [3726.2, 2850.6], [2634.0, 2863.3], [2532.4, 2863.3], [2468.9, 2869.7], [2722.9, 2869.7], [2799.1, 2869.7], [3675.4, 2876.0], [3726.2, 2876.0], [3599.2, 2888.7], [3497.6, 2888.7], [2634.0, 2888.7], [2532.4, 2888.7], [3383.3, 2901.4], [3459.5, 2901.4], [3675.4, 2901.4], [3726.2, 2901.4], [3345.2, 2914.1], [3294.4, 2914.1], [3243.6, 2914.1], [3167.4, 2914.1], [3103.9, 2914.1], [3053.1, 2914.1], [3002.3, 2914.1], [2926.1, 2914.1], [2875.3, 2914.1], [2849.9, 2914.1], [2824.5, 2914.1], [2634.0, 2914.1], [2532.4, 2914.1], [2468.9, 2920.5], [2722.9, 2920.5], [2799.1, 2920.5], [3675.4, 2926.8], [3726.2, 2926.8], [2875.3, 2939.5], [2849.9, 2939.5], [2824.5, 2939.5], [2634.0, 2939.5], [2532.4, 2939.5], [2494.3, 2945.9], [3675.4, 2952.2], [3726.2, 2952.2], [2773.7, 2958.6], [2672.1, 2958.6], [2532.4, 2964.9], [2634.0, 2964.9], [2926.1, 2964.9], [3002.3, 2964.9], [3053.1, 2964.9], [3103.9, 2964.9], [3167.4, 2964.9], [3243.6, 2964.9], [3294.4, 2964.9], [3345.2, 2964.9], [2468.9, 2971.3], [3383.3, 2977.6], [3459.5, 2977.6], [3497.6, 2977.6], [3599.2, 2977.6], [3675.4, 2977.6], [3726.2, 2977.6], [2773.7, 2984.0], [2672.1, 2984.0], [3675.4, 3003.0], [3726.2, 3003.0], [3599.2,
+3015.7], [3497.6, 3015.7], [2875.3, 3015.7], [2849.9, 3015.7], [2824.5, 3015.7], [2430.8, 3028.4], [2456.2, 3028.4], [2481.6, 3028.4], [2507.0, 3028.4], [2532.4, 3028.4], [2557.8, 3028.4], [2583.2, 3028.4], [2608.6, 3028.4], [2634.0, 3028.4], [2659.4, 3028.4], [2684.8, 3028.4], [2710.2, 3028.4], [2735.6, 3028.4], [2761.0, 3028.4], [2786.4, 3028.4], [3383.3, 3028.4], [3459.5, 3028.4], [3345.2, 3041.1], [3294.4, 3041.1], [3243.6, 3041.1], [3167.4, 3041.1], [3103.9, 3041.1], [3053.1, 3041.1], [3002.3, 3041.1], [2926.1, 3041.1], [3535.7, 3066.5], [3561.1, 3066.5], [3586.5, 3066.5], [3586.5, 2012.4], [3535.7, 2012.4], [3484.9, 2012.4], [3408.7, 2012.4], [3345.2, 2012.4], [3294.4, 2012.4], [3243.6, 2012.4], [3167.4, 2012.4], [3103.9, 2012.4], [3053.1, 2012.4], [3002.3, 2012.4], [2926.1, 2012.4], [2926.1, 1936.2], [3002.3, 1936.2], [3053.1, 1936.2], [3103.9, 1936.2], [3167.4, 1936.2], [3243.6, 1936.2], [3294.4, 1936.2], [3345.2, 1936.2], [3408.7, 1936.2], [3484.9, 1936.2], [3535.7, 1936.2], [3586.5, 1936.2], [3446.8, 1796.5], [3421.4, 1796.5], [3396.0, 1796.5], [2786.4, 1745.7], [2761.0, 1745.7], [2735.6, 1745.7], [2710.2, 1745.7], [2684.8, 1745.7], [2659.4, 1745.7], [2634.0, 1745.7], [2608.6, 1745.7], [2583.2, 1745.7], [2557.8, 1745.7], [2532.4,
+1745.7], [2507.0, 1745.7], [2481.6, 1745.7], [2456.2, 1745.7], [2430.8, 1745.7], [2824.5, 1733.0], [2849.9, 1733.0], [2875.3, 1733.0], [2773.7, 1701.3], [2672.1, 1701.3], [2468.9, 1688.6], [2532.4, 1682.2], [2634.0, 1682.2], [3249.9, 1682.2], [3351.5, 1682.2], [2773.7, 1675.9], [2672.1, 1675.9], [2494.3, 1663.2], [2532.4, 1656.8], [2634.0, 1656.8], [2824.5, 1656.8], [2849.9, 1656.8], [2875.3, 1656.8], [3249.9, 1656.8], [3351.5, 1656.8], [2799.1, 1637.8], [2722.9, 1637.8], [2468.9, 1637.8], [2532.4, 1631.4], [2634.0, 1631.4], [2824.5, 1631.4], [2849.9, 1631.4], [2875.3, 1631.4], [3249.9, 1631.4], [3351.5, 1631.4], [3351.5, 1606.0], [3249.9, 1606.0], [2634.0, 1606.0], [2532.4, 1606.0], [2468.9, 1587.0], [2722.9, 1587.0], [2799.1, 1587.0], [2532.4, 1580.6], [2634.0, 1580.6], [3249.9, 1580.6], [3351.5, 1580.6], [2494.3, 1561.6], [2532.4, 1555.2], [2634.0, 1555.2], [2729.2, 1555.2], [2754.6, 1555.2], [2780.0, 1555.2], [2824.5, 1555.2], [2849.9, 1555.2], [2875.3, 1555.2], [2468.9, 1536.2], [2532.4, 1529.8], [2634.0, 1529.8], [2532.4, 1504.4], [2634.0, 1504.4], [2824.5, 1504.4], [2849.9, 1504.4], [2875.3, 1504.4], [2468.9, 1485.4], [2532.4, 1479.0], [2634.0, 1479.0], [2964.2, 1479.0], [2494.3, 1460.0], [2532.4, 1453.6], [2634.0, 1453.6], [2729.2,
+1453.6], [2754.6, 1453.6], [2780.0, 1453.6], [2468.9, 1434.6], [2532.4, 1428.2], [2634.0, 1428.2], [2672.1, 1428.2], [2773.7, 1428.2], [2824.5, 1428.2], [2849.9, 1428.2], [2875.3, 1428.2], [2875.3, 1402.8], [2849.9, 1402.8], [2824.5, 1402.8], [2773.7, 1402.8], [2672.1, 1402.8], [2634.0, 1402.8], [2608.6, 1402.8], [2583.2, 1402.8], [2557.8, 1402.8], [2532.4, 1402.8], [2507.0, 1402.8], [2468.9, 1383.8], [2672.1, 1377.4], [2773.7, 1377.4], [2964.2, 1377.4], [2494.3, 1358.4], [2532.4, 1352.0], [2634.0, 1352.0], [2672.1, 1352.0], [2773.7, 1352.0], [2468.9, 1333.0], [2532.4, 1326.6], [2634.0, 1326.6], [2672.1, 1326.6], [2773.7, 1326.6], [2824.5, 1326.6], [2849.9, 1326.6], [2875.3, 1326.6], [2786.4, 1288.5], [2761.0, 1288.5], [2735.6, 1288.5], [2710.2, 1288.5], [2684.8, 1288.5], [2659.4, 1288.5], [2634.0, 1288.5], [2608.6, 1288.5], [2583.2, 1288.5], [2557.8, 1288.5], [2532.4, 1288.5], [2507.0, 1288.5], [2481.6, 1288.5], [2456.2, 1288.5], [2430.8, 1288.5], [2824.5, 1275.8], [2849.9, 1275.8], [2875.3, 1275.8], [2773.7, 1244.1], [2672.1, 1244.1], [2468.9, 1231.4], [2532.4, 1225.0], [2634.0, 1225.0], [2672.1, 1218.7], [2773.7, 1218.7], [2494.3, 1206.0], [2532.4, 1199.6], [2634.0, 1199.6], [2824.5, 1199.6], [2849.9, 1199.6], [2875.3, 1199.6], [2799.1,
+1180.6], [2722.9, 1180.6], [2468.9, 1180.6], [2532.4, 1174.2], [2634.0, 1174.2], [2824.5, 1174.2], [2849.9, 1174.2], [2875.3, 1174.2], [2634.0, 1148.8], [2532.4, 1148.8], [2468.9, 1129.8], [2722.9, 1129.8], [2799.1, 1129.8], [2634.0, 1123.4], [2532.4, 1123.4], [2494.3, 1104.4], [2532.4, 1098.0], [2634.0, 1098.0], [2729.2, 1098.0], [2754.6, 1098.0], [2780.0, 1098.0], [2824.5, 1098.0], [2849.9, 1098.0], [2875.3, 1098.0], [2468.9, 1079.0], [2532.4, 1072.6], [2634.0, 1072.6], [2919.7, 1066.3], [3021.3, 1066.3], [3091.2, 1066.3], [3192.8, 1066.3], [3243.6, 1066.3], [3345.2, 1066.3], [2875.3, 1047.2], [2849.9, 1047.2], [2824.5, 1047.2], [2634.0, 1047.2], [2532.4, 1047.2], [2919.7, 1040.9], [3021.3, 1040.9], [3091.2, 1040.9], [3192.8, 1040.9], [3243.6, 1040.9], [3345.2, 1040.9], [2468.9, 1028.2], [2532.4, 1021.8], [2634.0, 1021.8], [2919.7, 1015.5], [3021.3, 1015.5], [3091.2, 1015.5], [3192.8, 1015.5], [3243.6, 1015.5], [3345.2, 1015.5], [2494.3, 1002.8], [2532.4, 996.4],
+[2634.0, 996.4], [2729.2, 996.4], [2754.6, 996.4], [2780.0, 996.4], [2919.7, 990.1], [3021.3, 990.1], [2468.9, 977.4], [2532.4, 971.0], [2634.0, 971.0], [2672.1, 971.0], [2773.7, 971.0], [2824.5, 971.0], [2849.9, 971.0], [2875.3, 971.0], [2875.3, 945.6], [2849.9, 945.6], [2824.5, 945.6], [2773.7, 945.6], [2672.1, 945.6], [2634.0, 945.6], [2608.6, 945.6], [2583.2, 945.6], [2557.8, 945.6], [2532.4, 945.6], [2507.0, 945.6], [2468.9, 926.6], [2672.1, 920.2], [2773.7, 920.2], [2494.3, 901.2], [2532.4, 894.8], [2634.0, 894.8], [2672.1, 894.8], [2773.7, 894.8], [2468.9, 875.8], [2532.4, 869.4], [2634.0, 869.4], [2672.1, 869.4], [2773.7, 869.4], [2824.5, 869.4], [2849.9, 869.4], [2875.3, 869.4], [3091.2, 958.3], [3116.6, 958.3], [3142.0, 958.3], [3167.4, 958.3], [3192.8, 958.3], [3218.2, 958.3], [3243.6, 958.3], [3269.0, 958.3], [3294.4, 958.3], [3319.8, 958.3], [3319.8, 882.1], [3294.4, 882.1], [3269.0, 882.1], [3243.6, 882.1], [3218.2, 882.1], [3192.8, 882.1], [3167.4, 882.1], [3142.0, 882.1], [3116.6, 882.1], [3091.2, 882.1], [3116.6, 844.0], [3218.2, 844.0], [3535.7, 831.3], [3561.1, 831.3], [3586.5, 831.3], [3650.0, 882.1], [3675.4, 882.1], [3726.2, 882.1], [3726.2, 907.5], [3675.4, 907.5], [3650.0, 907.5], [3650.0, 932.9], [3675.4, 932.9], [3726.2, 932.9], [3726.2, 958.3], [3675.4, 958.3], [3650.0, 958.3], [3650.0, 983.7], [3675.4, 983.7], [3726.2, 983.7], [3726.2, 1009.1], [3675.4, 1009.1], [3650.0, 1009.1], [3650.0, 1034.5], [3675.4, 1034.5], [3726.2, 1034.5], [3726.2, 1059.9], [3675.4, 1059.9], [3650.0, 1059.9], [3650.0, 1085.3], [3675.4, 1085.3], [3726.2, 1085.3], [3726.2, 1110.7], [3675.4, 1110.7], [3650.0, 1110.7], [3650.0, 1136.1], [3675.4, 1136.1], [3726.2, 1136.1], [3726.2, 1161.5], [3675.4, 1161.5], [3650.0, 1161.5], [3650.0, 1186.9], [3675.4, 1186.9], [3726.2, 1186.9], [3586.5, 1199.6], [3561.1, 1199.6], [3650.0, 1212.3], [3675.4, 1212.3], [3726.2, 1212.3], [3726.2, 1237.7], [3675.4, 1237.7], [3650.0, 1237.7], [3650.0, 1263.1], [3675.4, 1263.1], [3726.2, 1263.1], [3726.2, 1288.5], [3675.4, 1288.5], [3650.0, 1288.5], [3586.5, 1301.2], [3561.1, 1301.2], [3650.0, 1313.9], [3675.4, 1313.9], [3726.2, 1313.9], [3726.2, 1339.3], [3675.4, 1339.3], [3650.0, 1339.3], [3650.0, 1364.7], [3675.4, 1364.7], [3726.2, 1364.7], [3726.2, 1390.1], [3675.4, 1390.1], [3650.0, 1390.1], [3650.0, 1415.5], [3675.4, 1415.5], [3726.2, 1415.5], [3726.2, 1440.9], [3675.4, 1440.9], [3650.0, 1440.9], [3650.0, 1466.3], [3675.4, 1466.3], [3726.2, 1466.3], [3726.2, 1491.7], [3675.4, 1491.7], [3650.0,
+1491.7], [3650.0, 1517.1], [3675.4, 1517.1], [3726.2, 1517.1], [3726.2, 1542.5], [3675.4, 1542.5], [3650.0, 1542.5], [3573.8, 1548.9], [3548.4, 1548.9], [3650.0, 1567.9], [3675.4, 1567.9], [3726.2, 1567.9], [3726.2, 1593.3], [3675.4, 1593.3], [3650.0, 1593.3], [3650.0, 1618.7], [3675.4, 1618.7], [3726.2, 1618.7], [3726.2, 1644.1], [3675.4, 1644.1], [3650.0, 1644.1], [3726.2, 1669.5], [3675.4, 1669.5], [3650.0, 1669.5], [3599.2, 1669.5], [3497.6, 1669.5], [3497.6, 1694.9], [3599.2, 1694.9], [3599.2, 1720.3], [3497.6, 1720.3]]
+#cities[0] = [max_coords/2, max_coords/2]
stop_time_generate = time.time()
start_time_split = time.time()
@@ -117,7 +137,7 @@ for i, cluster_indices in enumerate(clusters.values()):
cluster_cities = [cities[index] for index in cluster_indices]
# Appel de la fonction AntColony.run
- ant_colony = AntColony(cluster_cities, n_ants=nb_ants, max_time=max_time_per_cluster)
+ ant_colony = AntColony(cluster_cities, n_ants=nb_ants, max_time=max_time_per_cluster, alpha=1, beta=5)
best_route = ant_colony.run()
best_routes.append((best_route, color))
@@ -139,4 +159,4 @@ for i, (route, color) in enumerate(best_routes):
# add title with nb_ville, nb_truck and max_time
plt.title(f"nb_ville = {nb_ville}, nb_truck = {nb_truck}, max_time = {max_time}")
-plt.show()
\ No newline at end of file
+plt.show()
diff --git a/tests/101_analyse_aco.py b/tests/101_analyse_aco.py
index c8d2694..e3aadae 100644
--- a/tests/101_analyse_aco.py
+++ b/tests/101_analyse_aco.py
@@ -1,9 +1,11 @@
from matplotlib import pyplot as plt
from libs.aco import AntColony, total_distance
-name = "att48"
-cities = [[6734, 1453], [2233, 10], [5530, 1424], [401, 841], [3082, 1644], [7608, 4458], [7573, 3716], [7265, 1268], [6898, 1885], [1112, 2049], [5468, 2606], [5989, 2873], [4706, 2674], [4612, 2035], [6347, 2683], [6107, 669], [7611, 5184], [7462, 3590], [7732, 4723], [5900, 3561], [4483, 3369], [6101, 1110], [5199, 2182], [1633, 2809], [4307, 2322], [675, 1006], [7555, 4819], [7541, 3981], [3177, 756], [7352, 4506], [7545, 2801], [3245, 3305], [6426, 3173], [4608, 1198], [23, 2216], [7248, 3779], [7762, 4595], [7392, 2244], [3484, 2829], [6271, 2135], [4985, 140], [1916, 1569], [7280, 4899], [7509, 3239], [10, 2676], [6807, 2993], [5185, 3258], [3023, 1942]]
-optimal = 33523
+name = "berlin52"
+cities = [[565, 575], [25, 185], [345, 750], [945, 685], [845, 655], [880, 660], [25, 230], [525, 1000], [580, 1175], [650, 1130], [1605, 620], [1220, 580], [1465, 200], [1530, 5], [845, 680], [725, 370], [145, 665], [415, 635], [510, 875], [560, 365], [300, 465], [520, 585], [480, 415],
+[835, 625], [975, 580], [1215, 245], [1320, 315], [1250, 400], [660, 180], [410, 250], [420, 555], [575, 665], [1150, 1160], [700, 580], [685, 595], [685, 610], [770, 610], [795, 645], [720, 635], [760, 650], [475, 960], [95, 260], [875, 920], [700, 500], [555, 815], [830, 485],
+[1170, 65], [830, 610], [605, 625], [595, 360], [1340, 725], [1740, 245]]
+optimal = 7542
n_ants = 10
alpha = 1
diff --git a/tests/102_analyse_simulated_annealing.py b/tests/102_analyse_simulated_annealing.py
index c59649a..1abde6e 100644
--- a/tests/102_analyse_simulated_annealing.py
+++ b/tests/102_analyse_simulated_annealing.py
@@ -1,13 +1,14 @@
from matplotlib import pyplot as plt
from libs.simulated_annealing import SimulatedAnnealing, total_distance
+name = "att48"
cities = [[6734, 1453], [2233, 10], [5530, 1424], [401, 841], [3082, 1644], [7608, 4458], [7573, 3716], [7265, 1268], [6898, 1885], [1112, 2049], [5468, 2606], [5989, 2873], [4706, 2674], [4612, 2035], [6347, 2683], [6107, 669], [7611, 5184], [7462, 3590], [7732, 4723], [5900, 3561], [4483, 3369], [6101, 1110], [5199, 2182], [1633, 2809], [4307, 2322], [675, 1006], [7555, 4819], [7541, 3981], [3177, 756], [7352, 4506], [7545, 2801], [3245, 3305], [6426, 3173], [4608, 1198], [23, 2216], [7248, 3779], [7762, 4595], [7392, 2244], [3484, 2829], [6271, 2135], [4985, 140], [1916, 1569], [7280, 4899], [7509, 3239], [10, 2676], [6807, 2993], [5185, 3258], [3023, 1942]]
optimal = 33523
-temperatures = [100000, 1000000, 10000000, 100000000]
-cooling_rate = 0.99999
-temperature_ok = 0.000001
-iterations = 2
+temperatures = [100.0, 1000.0, 10000.0, 100000.0]
+cooling_rate = 0.9995
+temperature_ok = 0.1
+iterations = 5
best_distances = []
temps = []
@@ -36,17 +37,18 @@ colors = [
for temperature in temperatures:
for iteration in range(iterations):
- simulated_annealing = SimulatedAnnealing(cities, temperature=temperature, cooling_rate=0.999, temperature_ok=0.01)
+ simulated_annealing = SimulatedAnnealing(cities, temperature=temperature, cooling_rate=cooling_rate, temperature_ok=0.0000001)
print("Running iteration number {}/{} ({} temperature)".format(iteration + 1, iterations, temperature))
best_route = simulated_annealing.run()
best_distances.append([total_distance(best_route), colors[temperatures.index(temperature) % len(colors)]])
temps.append(temperature)
title = ""
-title += "Best distance per iterations\n"
-title += "Temperature: " + str(temperature) + " "
-title += "Cooling rate: " + str(cooling_rate) + " "
-title += "Temperature ok: " + str(temperature_ok) + " "
+title += "Best distance per iterations ({})\n".format(name)
+title += "Nb cities: " + str(len(cities)) + " / "
+title += "Temperature: " + str(temperature) + " / "
+title += "Cooling rate: " + str(cooling_rate) + " / "
+title += "Temperature ok: " + str(temperature_ok) + " / "
plt.title(title)
plt.xlabel('Iteration')
plt.ylabel('Distance')
diff --git a/tests/103_analyse_aco_alpha_beta.py b/tests/103_analyse_aco_alpha_beta.py
index 7779b6a..a359cad 100644
--- a/tests/103_analyse_aco_alpha_beta.py
+++ b/tests/103_analyse_aco_alpha_beta.py
@@ -2,16 +2,18 @@ import numpy as np
from matplotlib import pyplot as plt
from libs.aco import AntColony, total_distance
-name = "att48"
-cities = [[6734, 1453], [2233, 10], [5530, 1424], [401, 841], [3082, 1644], [7608, 4458], [7573, 3716], [7265, 1268], [6898, 1885], [1112, 2049], [5468, 2606], [5989, 2873], [4706, 2674], [4612, 2035], [6347, 2683], [6107, 669], [7611, 5184], [7462, 3590], [7732, 4723], [5900, 3561], [4483, 3369], [6101, 1110], [5199, 2182], [1633, 2809], [4307, 2322], [675, 1006], [7555, 4819], [7541, 3981], [3177, 756], [7352, 4506], [7545, 2801], [3245, 3305], [6426, 3173], [4608, 1198], [23, 2216], [7248, 3779], [7762, 4595], [7392, 2244], [3484, 2829], [6271, 2135], [4985, 140], [1916, 1569], [7280, 4899], [7509, 3239], [10, 2676], [6807, 2993], [5185, 3258], [3023, 1942]]
-optimal = 33523
+name = "berlin52"
+cities = [[565, 575], [25, 185], [345, 750], [945, 685], [845, 655], [880, 660], [25, 230], [525, 1000], [580, 1175], [650, 1130], [1605, 620], [1220, 580], [1465, 200], [1530, 5], [845, 680], [725, 370], [145, 665], [415, 635], [510, 875], [560, 365], [300, 465], [520, 585], [480, 415],
+[835, 625], [975, 580], [1215, 245], [1320, 315], [1250, 400], [660, 180], [410, 250], [420, 555], [575, 665], [1150, 1160], [700, 580], [685, 595], [685, 610], [770, 610], [795, 645], [720, 635], [760, 650], [475, 960], [95, 260], [875, 920], [700, 500], [555, 815], [830, 485],
+[1170, 65], [830, 610], [605, 625], [595, 360], [1340, 725], [1740, 245]]
+optimal = 7542
n_ants = 10
alpha = [1, 2]
-beta = [1, 2]
+beta = [2, 3, 4, 5]
evaporation = 0.5
intensification = 2
-max_times = [0.5, 1, 1, 1, 1, 2]
+max_times = [1]
iterations = 1
bar_width = 0.15
@@ -21,6 +23,31 @@ x = np.arange(len(max_times))
fig, ax = plt.subplots()
+# Preparing the colormap
+colors = [
+ '#1f77b4', # Bleu moyen
+ '#ff7f0e', # Orange
+ '#2ca02c', # Vert
+ '#d62728', # Rouge
+ '#9467bd', # Violet
+ '#8c564b', # Marron
+ '#e377c2', # Rose
+ '#7f7f7f', # Gris
+ '#bcbd22', # Vert olive
+ '#17becf', # Turquoise
+ '#1b9e77', # Vert Teal
+ '#d95f02', # Orange foncé
+ '#7570b3', # Violet moyen
+ '#e7298a', # Fuchsia
+ '#66a61e', # Vert pomme
+ '#e6ab02', # Jaune or
+ '#a6761d', # Bronze
+ '#666666', # Gris foncé
+ '#f781bf', # Rose clair
+ '#999999', # Gris moyen
+]
+color_dict = {}
+
for i in range(len(alpha)):
for j in range(len(beta)):
best_distances = []
@@ -30,12 +57,18 @@ for i in range(len(alpha)):
print("Running iteration number {}/{} ({} sec)".format(iteration + 1, iterations, max_time))
best_route = ant_colony.run()
best_distances.append(total_distance(best_route))
- ax.bar(x + (i * len(beta) + j) * bar_width, best_distances, bar_width, alpha=opacity, label='alpha={} beta={}'.format(alpha[i], beta[j]))
+
+ # Defining a unique key for each alpha-beta pair
+ key = f"alpha={alpha[i]}_beta={beta[j]}"
+ if key not in color_dict:
+ color_dict[key] = colors[i * len(beta) + j]
+
+ ax.bar(x + (i * len(beta) + j) * bar_width, best_distances, bar_width, alpha=opacity, color=color_dict[key], label='alpha={} beta={}'.format(alpha[i], beta[j]))
ax.set_xlabel('Max Time')
ax.set_ylabel('Best Distance')
ax.set_title('Best distances per max time for each alpha and beta')
-ax.set_xticks(x + bar_width / 2)
+ax.set_xticks(x + bar_width / 3)
ax.set_xticklabels(max_times)
ax.legend()
diff --git a/tests/data_sample/ALL_tsp/d1655.tsp b/tests/data_sample/ALL_tsp/d1655.tsp
new file mode 100644
index 0000000..9076969
--- /dev/null
+++ b/tests/data_sample/ALL_tsp/d1655.tsp
@@ -0,0 +1,1662 @@
+NAME : d1655
+COMMENT : Drilling problem (Reinelt)
+TYPE : TSP
+DIMENSION : 1655
+EDGE_WEIGHT_TYPE : EUC_2D
+NODE_COORD_SECTION
+1 0.00000e+00 0.00000e+00
+2 1.22430e+03 9.45600e+02
+3 1.32590e+03 9.45600e+02
+4 1.32590e+03 9.71000e+02
+5 1.22430e+03 9.71000e+02
+6 1.22430e+03 9.96400e+02
+7 1.32590e+03 9.96400e+02
+8 1.32590e+03 1.02180e+03
+9 1.22430e+03 1.02180e+03
+10 1.18620e+03 1.03450e+03
+11 1.08460e+03 1.03450e+03
+12 1.05280e+03 1.03450e+03
+13 1.02740e+03 1.03450e+03
+14 1.22430e+03 1.04720e+03
+15 1.32590e+03 1.04720e+03
+16 1.18620e+03 1.05990e+03
+17 1.08460e+03 1.05990e+03
+18 1.05280e+03 1.05990e+03
+19 1.02740e+03 1.05990e+03
+20 1.22430e+03 1.07260e+03
+21 1.32590e+03 1.07260e+03
+22 1.18620e+03 1.08530e+03
+23 1.08460e+03 1.08530e+03
+24 1.05280e+03 1.08530e+03
+25 1.02740e+03 1.08530e+03
+26 1.22430e+03 1.09800e+03
+27 1.32590e+03 1.09800e+03
+28 1.18620e+03 1.11070e+03
+29 1.08460e+03 1.11070e+03
+30 1.05280e+03 1.11070e+03
+31 1.02740e+03 1.11070e+03
+32 1.22430e+03 1.12340e+03
+33 1.32590e+03 1.12340e+03
+34 1.18620e+03 1.13610e+03
+35 1.08460e+03 1.13610e+03
+36 1.05280e+03 1.13610e+03
+37 1.02740e+03 1.13610e+03
+38 1.22430e+03 1.14880e+03
+39 1.32590e+03 1.14880e+03
+40 1.18620e+03 1.16150e+03
+41 1.08460e+03 1.16150e+03
+42 1.05280e+03 1.16150e+03
+43 1.02740e+03 1.16150e+03
+44 1.22430e+03 1.17420e+03
+45 1.32590e+03 1.17420e+03
+46 1.18620e+03 1.18690e+03
+47 1.08460e+03 1.18690e+03
+48 1.05280e+03 1.18690e+03
+49 1.02740e+03 1.18690e+03
+50 1.22430e+03 1.19960e+03
+51 1.32590e+03 1.19960e+03
+52 1.18620e+03 1.21230e+03
+53 1.08460e+03 1.21230e+03
+54 1.05280e+03 1.21230e+03
+55 1.02740e+03 1.21230e+03
+56 1.22430e+03 1.22500e+03
+57 1.32590e+03 1.22500e+03
+58 1.18620e+03 1.23770e+03
+59 1.08460e+03 1.23770e+03
+60 1.05280e+03 1.23770e+03
+61 1.02740e+03 1.23770e+03
+62 1.22430e+03 1.25040e+03
+63 1.32590e+03 1.25040e+03
+64 1.18620e+03 1.26310e+03
+65 1.08460e+03 1.26310e+03
+66 1.05280e+03 1.26310e+03
+67 1.02740e+03 1.26310e+03
+68 1.22430e+03 1.27580e+03
+69 1.32590e+03 1.27580e+03
+70 1.18620e+03 1.28850e+03
+71 1.08460e+03 1.28850e+03
+72 1.05280e+03 1.28850e+03
+73 1.02740e+03 1.28850e+03
+74 1.02740e+03 1.31390e+03
+75 1.05280e+03 1.31390e+03
+76 1.08460e+03 1.31390e+03
+77 1.18620e+03 1.31390e+03
+78 1.28780e+03 1.33930e+03
+79 1.26240e+03 1.33930e+03
+80 1.18620e+03 1.33930e+03
+81 1.08460e+03 1.33930e+03
+82 1.05280e+03 1.33930e+03
+83 1.02740e+03 1.33930e+03
+84 1.02740e+03 1.36470e+03
+85 1.05280e+03 1.36470e+03
+86 1.08460e+03 1.36470e+03
+87 1.18620e+03 1.36470e+03
+88 1.18620e+03 1.39010e+03
+89 1.08460e+03 1.39010e+03
+90 1.05280e+03 1.39010e+03
+91 1.02740e+03 1.39010e+03
+92 1.22430e+03 1.40280e+03
+93 1.32590e+03 1.40280e+03
+94 1.18620e+03 1.41550e+03
+95 1.08460e+03 1.41550e+03
+96 1.05280e+03 1.41550e+03
+97 1.02740e+03 1.41550e+03
+98 1.22430e+03 1.42820e+03
+99 1.32590e+03 1.42820e+03
+100 1.32590e+03 1.45360e+03
+101 1.22430e+03 1.45360e+03
+102 1.22430e+03 1.47900e+03
+103 1.32590e+03 1.47900e+03
+104 1.18620e+03 1.49170e+03
+105 1.08460e+03 1.49170e+03
+106 1.05280e+03 1.49170e+03
+107 1.02740e+03 1.50440e+03
+108 1.22430e+03 1.50440e+03
+109 1.32590e+03 1.50440e+03
+110 1.05280e+03 1.51710e+03
+111 1.22430e+03 1.52980e+03
+112 1.32590e+03 1.52980e+03
+113 1.32590e+03 1.55520e+03
+114 1.22430e+03 1.55520e+03
+115 1.22430e+03 1.58060e+03
+116 1.32590e+03 1.58060e+03
+117 1.32590e+03 1.60600e+03
+118 1.22430e+03 1.60600e+03
+119 1.22430e+03 1.63140e+03
+120 1.32590e+03 1.63140e+03
+121 1.32590e+03 1.65680e+03
+122 1.22430e+03 1.65680e+03
+123 1.22430e+03 1.68220e+03
+124 1.32590e+03 1.68220e+03
+125 1.32590e+03 1.70760e+03
+126 1.22430e+03 1.70760e+03
+127 1.22430e+03 1.73300e+03
+128 1.32590e+03 1.73300e+03
+129 1.09730e+03 1.94890e+03
+130 1.07190e+03 1.94890e+03
+131 1.22430e+03 2.15210e+03
+132 1.32590e+03 2.15210e+03
+133 1.32590e+03 2.17750e+03
+134 1.22430e+03 2.17750e+03
+135 1.22430e+03 2.20290e+03
+136 1.32590e+03 2.20290e+03
+137 1.32590e+03 2.22830e+03
+138 1.22430e+03 2.22830e+03
+139 1.22430e+03 2.25370e+03
+140 1.32590e+03 2.25370e+03
+141 1.32590e+03 2.27910e+03
+142 1.22430e+03 2.27910e+03
+143 1.22430e+03 2.30450e+03
+144 1.32590e+03 2.30450e+03
+145 1.32590e+03 2.32990e+03
+146 1.22430e+03 2.32990e+03
+147 1.22430e+03 2.35530e+03
+148 1.32590e+03 2.35530e+03
+149 1.32590e+03 2.38070e+03
+150 1.22430e+03 2.38070e+03
+151 1.22430e+03 2.40610e+03
+152 1.32590e+03 2.40610e+03
+153 1.32590e+03 2.43150e+03
+154 1.22430e+03 2.43150e+03
+155 1.22430e+03 2.45690e+03
+156 1.32590e+03 2.45690e+03
+157 1.32590e+03 2.48230e+03
+158 1.22430e+03 2.48230e+03
+159 1.26240e+03 2.54580e+03
+160 1.28780e+03 2.54580e+03
+161 1.32590e+03 2.60930e+03
+162 1.22430e+03 2.60930e+03
+163 1.22430e+03 2.63470e+03
+164 1.32590e+03 2.63470e+03
+165 1.18620e+03 2.64740e+03
+166 1.08460e+03 2.64740e+03
+167 1.05280e+03 2.64740e+03
+168 1.02740e+03 2.66010e+03
+169 1.22430e+03 2.66010e+03
+170 1.32590e+03 2.66010e+03
+171 1.05280e+03 2.67280e+03
+172 1.22430e+03 2.68550e+03
+173 1.32590e+03 2.68550e+03
+174 1.32590e+03 2.71090e+03
+175 1.22430e+03 2.71090e+03
+176 1.22430e+03 2.73630e+03
+177 1.32590e+03 2.73630e+03
+178 1.32590e+03 2.76170e+03
+179 1.22430e+03 2.76170e+03
+180 1.22430e+03 2.78710e+03
+181 1.32590e+03 2.78710e+03
+182 1.32590e+03 2.81250e+03
+183 1.22430e+03 2.81250e+03
+184 1.32590e+03 2.83790e+03
+185 1.22430e+03 2.83790e+03
+186 1.18620e+03 2.83790e+03
+187 1.08460e+03 2.83790e+03
+188 1.22430e+03 2.86330e+03
+189 1.32590e+03 2.86330e+03
+190 1.32590e+03 2.88870e+03
+191 1.22430e+03 2.88870e+03
+192 1.22430e+03 2.91410e+03
+193 1.32590e+03 2.91410e+03
+194 1.32590e+03 2.93950e+03
+195 1.22430e+03 2.93950e+03
+196 1.57990e+03 3.02840e+03
+197 1.60530e+03 3.02840e+03
+198 1.63070e+03 3.02840e+03
+199 1.65610e+03 3.02840e+03
+200 1.68150e+03 3.02840e+03
+201 1.70690e+03 3.02840e+03
+202 1.73230e+03 3.02840e+03
+203 1.75770e+03 3.02840e+03
+204 1.78310e+03 3.02840e+03
+205 1.80850e+03 3.02840e+03
+206 1.83390e+03 3.02840e+03
+207 1.85930e+03 3.02840e+03
+208 1.88470e+03 3.02840e+03
+209 1.91010e+03 3.02840e+03
+210 1.93550e+03 3.02840e+03
+211 1.97360e+03 3.01570e+03
+212 1.99900e+03 3.01570e+03
+213 2.02440e+03 3.01570e+03
+214 1.92280e+03 2.98400e+03
+215 1.82120e+03 2.98400e+03
+216 1.61800e+03 2.97130e+03
+217 1.68150e+03 2.96490e+03
+218 1.78310e+03 2.96490e+03
+219 1.82120e+03 2.95860e+03
+220 1.92280e+03 2.95860e+03
+221 1.64340e+03 2.94590e+03
+222 1.68150e+03 2.93950e+03
+223 1.78310e+03 2.93950e+03
+224 1.97360e+03 2.93950e+03
+225 1.99900e+03 2.93950e+03
+226 2.02440e+03 2.93950e+03
+227 2.07520e+03 2.93950e+03
+228 2.17680e+03 2.93950e+03
+229 1.94820e+03 2.92050e+03
+230 1.87200e+03 2.92050e+03
+231 1.61800e+03 2.92050e+03
+232 1.68150e+03 2.91410e+03
+233 1.78310e+03 2.91410e+03
+234 1.97360e+03 2.91410e+03
+235 1.99900e+03 2.91410e+03
+236 2.02440e+03 2.91410e+03
+237 2.07520e+03 2.91410e+03
+238 2.17680e+03 2.91410e+03
+239 2.17680e+03 2.88870e+03
+240 2.07520e+03 2.88870e+03
+241 1.78310e+03 2.88870e+03
+242 1.68150e+03 2.88870e+03
+243 1.61800e+03 2.86970e+03
+244 1.87200e+03 2.86970e+03
+245 1.94820e+03 2.86970e+03
+246 2.17680e+03 2.86330e+03
+247 2.07520e+03 2.86330e+03
+248 1.78310e+03 2.86330e+03
+249 1.68150e+03 2.86330e+03
+250 1.64340e+03 2.84430e+03
+251 1.68150e+03 2.83790e+03
+252 1.78310e+03 2.83790e+03
+253 1.87830e+03 2.83790e+03
+254 1.90370e+03 2.83790e+03
+255 1.92910e+03 2.83790e+03
+256 1.97360e+03 2.83790e+03
+257 1.99900e+03 2.83790e+03
+258 2.02440e+03 2.83790e+03
+259 2.07520e+03 2.83790e+03
+260 2.17680e+03 2.83790e+03
+261 1.61800e+03 2.81890e+03
+262 1.68150e+03 2.81250e+03
+263 1.78310e+03 2.81250e+03
+264 2.07520e+03 2.81250e+03
+265 2.17680e+03 2.81250e+03
+266 2.17680e+03 2.78710e+03
+267 2.07520e+03 2.78710e+03
+268 2.02440e+03 2.78710e+03
+269 1.99900e+03 2.78710e+03
+270 1.97360e+03 2.78710e+03
+271 1.78310e+03 2.78710e+03
+272 1.68150e+03 2.78710e+03
+273 1.61800e+03 2.76810e+03
+274 1.68150e+03 2.76170e+03
+275 1.78310e+03 2.76170e+03
+276 2.07520e+03 2.76170e+03
+277 2.17680e+03 2.76170e+03
+278 1.64340e+03 2.74270e+03
+279 1.68150e+03 2.73630e+03
+280 1.78310e+03 2.73630e+03
+281 1.87830e+03 2.73630e+03
+282 1.90370e+03 2.73630e+03
+283 1.92910e+03 2.73630e+03
+284 2.07520e+03 2.73630e+03
+285 2.17680e+03 2.73630e+03
+286 1.61800e+03 2.71730e+03
+287 1.68150e+03 2.71090e+03
+288 1.78310e+03 2.71090e+03
+289 1.82120e+03 2.71090e+03
+290 1.92280e+03 2.71090e+03
+291 1.97360e+03 2.71090e+03
+292 1.99900e+03 2.71090e+03
+293 2.02440e+03 2.71090e+03
+294 2.07520e+03 2.71090e+03
+295 2.17680e+03 2.71090e+03
+296 2.17680e+03 2.68550e+03
+297 2.07520e+03 2.68550e+03
+298 2.02440e+03 2.68550e+03
+299 1.99900e+03 2.68550e+03
+300 1.97360e+03 2.68550e+03
+301 1.92280e+03 2.68550e+03
+302 1.82120e+03 2.68550e+03
+303 1.78310e+03 2.68550e+03
+304 1.75770e+03 2.68550e+03
+305 1.73230e+03 2.68550e+03
+306 1.70690e+03 2.68550e+03
+307 1.68150e+03 2.68550e+03
+308 1.65610e+03 2.68550e+03
+309 1.61800e+03 2.66650e+03
+310 1.82120e+03 2.66010e+03
+311 1.92280e+03 2.66010e+03
+312 2.07520e+03 2.66010e+03
+313 2.17680e+03 2.66010e+03
+314 1.64340e+03 2.64110e+03
+315 1.68150e+03 2.63470e+03
+316 1.78310e+03 2.63470e+03
+317 1.82120e+03 2.63470e+03
+318 1.92280e+03 2.63470e+03
+319 2.07520e+03 2.63470e+03
+320 2.17680e+03 2.63470e+03
+321 1.61800e+03 2.61570e+03
+322 1.68150e+03 2.60930e+03
+323 1.78310e+03 2.60930e+03
+324 1.82120e+03 2.60930e+03
+325 1.92280e+03 2.60930e+03
+326 1.97360e+03 2.60930e+03
+327 1.99900e+03 2.60930e+03
+328 2.02440e+03 2.60930e+03
+329 2.07520e+03 2.60930e+03
+330 2.17680e+03 2.60930e+03
+331 1.93550e+03 2.57120e+03
+332 1.91010e+03 2.57120e+03
+333 1.88470e+03 2.57120e+03
+334 1.85930e+03 2.57120e+03
+335 1.83390e+03 2.57120e+03
+336 1.80850e+03 2.57120e+03
+337 1.78310e+03 2.57120e+03
+338 1.75770e+03 2.57120e+03
+339 1.73230e+03 2.57120e+03
+340 1.70690e+03 2.57120e+03
+341 1.68150e+03 2.57120e+03
+342 1.65610e+03 2.57120e+03
+343 1.63070e+03 2.57120e+03
+344 1.60530e+03 2.57120e+03
+345 1.57990e+03 2.57120e+03
+346 1.97360e+03 2.55850e+03
+347 1.99900e+03 2.55850e+03
+348 2.02440e+03 2.55850e+03
+349 2.11330e+03 2.54580e+03
+350 2.13870e+03 2.54580e+03
+351 1.92280e+03 2.52680e+03
+352 1.82120e+03 2.52680e+03
+353 1.61800e+03 2.51410e+03
+354 1.68150e+03 2.50770e+03
+355 1.78310e+03 2.50770e+03
+356 1.82120e+03 2.50140e+03
+357 1.92280e+03 2.50140e+03
+358 1.64340e+03 2.48870e+03
+359 1.68150e+03 2.48230e+03
+360 1.78310e+03 2.48230e+03
+361 1.97360e+03 2.48230e+03
+362 1.99900e+03 2.48230e+03
+363 2.02440e+03 2.48230e+03
+364 2.07520e+03 2.48230e+03
+365 2.17680e+03 2.48230e+03
+366 1.94820e+03 2.46330e+03
+367 1.87200e+03 2.46330e+03
+368 1.61800e+03 2.46330e+03
+369 1.68150e+03 2.45690e+03
+370 1.78310e+03 2.45690e+03
+371 1.97360e+03 2.45690e+03
+372 1.99900e+03 2.45690e+03
+373 2.02440e+03 2.45690e+03
+374 2.07520e+03 2.45690e+03
+375 2.17680e+03 2.45690e+03
+376 2.17680e+03 2.43150e+03
+377 2.07520e+03 2.43150e+03
+378 1.78310e+03 2.43150e+03
+379 1.68150e+03 2.43150e+03
+380 1.61800e+03 2.41250e+03
+381 1.87200e+03 2.41250e+03
+382 1.94820e+03 2.41250e+03
+383 2.17680e+03 2.40610e+03
+384 2.07520e+03 2.40610e+03
+385 1.78310e+03 2.40610e+03
+386 1.68150e+03 2.40610e+03
+387 1.64340e+03 2.38710e+03
+388 1.68150e+03 2.38070e+03
+389 1.78310e+03 2.38070e+03
+390 1.87830e+03 2.38070e+03
+391 1.90370e+03 2.38070e+03
+392 1.92910e+03 2.38070e+03
+393 1.97360e+03 2.38070e+03
+394 1.99900e+03 2.38070e+03
+395 2.02440e+03 2.38070e+03
+396 2.07520e+03 2.38070e+03
+397 2.17680e+03 2.38070e+03
+398 1.61800e+03 2.36170e+03
+399 1.68150e+03 2.35530e+03
+400 1.78310e+03 2.35530e+03
+401 2.07520e+03 2.35530e+03
+402 2.17680e+03 2.35530e+03
+403 2.17680e+03 2.32990e+03
+404 2.07520e+03 2.32990e+03
+405 2.02440e+03 2.32990e+03
+406 1.99900e+03 2.32990e+03
+407 1.97360e+03 2.32990e+03
+408 1.78310e+03 2.32990e+03
+409 1.68150e+03 2.32990e+03
+410 1.61800e+03 2.31090e+03
+411 1.68150e+03 2.30450e+03
+412 1.78310e+03 2.30450e+03
+413 2.07520e+03 2.30450e+03
+414 2.17680e+03 2.30450e+03
+415 1.64340e+03 2.28550e+03
+416 1.68150e+03 2.27910e+03
+417 1.78310e+03 2.27910e+03
+418 1.87830e+03 2.27910e+03
+419 1.90370e+03 2.27910e+03
+420 1.92910e+03 2.27910e+03
+421 2.07520e+03 2.27910e+03
+422 2.17680e+03 2.27910e+03
+423 1.61800e+03 2.26010e+03
+424 1.68150e+03 2.25370e+03
+425 1.78310e+03 2.25370e+03
+426 1.82120e+03 2.25370e+03
+427 1.92280e+03 2.25370e+03
+428 1.97360e+03 2.25370e+03
+429 1.99900e+03 2.25370e+03
+430 2.02440e+03 2.25370e+03
+431 2.07520e+03 2.25370e+03
+432 2.17680e+03 2.25370e+03
+433 2.17680e+03 2.22830e+03
+434 2.07520e+03 2.22830e+03
+435 2.02440e+03 2.22830e+03
+436 1.99900e+03 2.22830e+03
+437 1.97360e+03 2.22830e+03
+438 1.92280e+03 2.22830e+03
+439 1.82120e+03 2.22830e+03
+440 1.78310e+03 2.22830e+03
+441 1.75770e+03 2.22830e+03
+442 1.73230e+03 2.22830e+03
+443 1.70690e+03 2.22830e+03
+444 1.68150e+03 2.22830e+03
+445 1.65610e+03 2.22830e+03
+446 1.61800e+03 2.20930e+03
+447 1.82120e+03 2.20290e+03
+448 1.92280e+03 2.20290e+03
+449 2.07520e+03 2.20290e+03
+450 2.17680e+03 2.20290e+03
+451 1.64340e+03 2.18390e+03
+452 1.68150e+03 2.17750e+03
+453 1.78310e+03 2.17750e+03
+454 1.82120e+03 2.17750e+03
+455 1.92280e+03 2.17750e+03
+456 2.07520e+03 2.17750e+03
+457 2.17680e+03 2.17750e+03
+458 1.61800e+03 2.15850e+03
+459 1.68150e+03 2.15210e+03
+460 1.78310e+03 2.15210e+03
+461 1.82120e+03 2.15210e+03
+462 1.92280e+03 2.15210e+03
+463 1.97360e+03 2.15210e+03
+464 1.99900e+03 2.15210e+03
+465 2.02440e+03 2.15210e+03
+466 2.07520e+03 2.15210e+03
+467 2.17680e+03 2.15210e+03
+468 2.11330e+03 1.94890e+03
+469 2.13870e+03 1.94890e+03
+470 1.93550e+03 1.74570e+03
+471 1.91010e+03 1.74570e+03
+472 1.88470e+03 1.74570e+03
+473 1.85930e+03 1.74570e+03
+474 1.83390e+03 1.74570e+03
+475 1.80850e+03 1.74570e+03
+476 1.78310e+03 1.74570e+03
+477 1.75770e+03 1.74570e+03
+478 1.73230e+03 1.74570e+03
+479 1.70690e+03 1.74570e+03
+480 1.68150e+03 1.74570e+03
+481 1.65610e+03 1.74570e+03
+482 1.63070e+03 1.74570e+03
+483 1.60530e+03 1.74570e+03
+484 1.57990e+03 1.74570e+03
+485 1.97360e+03 1.73300e+03
+486 1.99900e+03 1.73300e+03
+487 2.02440e+03 1.73300e+03
+488 2.07520e+03 1.73300e+03
+489 2.17680e+03 1.73300e+03
+490 2.17680e+03 1.70760e+03
+491 2.07520e+03 1.70760e+03
+492 1.92280e+03 1.70130e+03
+493 1.82120e+03 1.70130e+03
+494 1.61800e+03 1.68860e+03
+495 1.68150e+03 1.68220e+03
+496 1.78310e+03 1.68220e+03
+497 2.07520e+03 1.68220e+03
+498 2.17680e+03 1.68220e+03
+499 1.92280e+03 1.67590e+03
+500 1.82120e+03 1.67590e+03
+501 1.64340e+03 1.66320e+03
+502 1.68150e+03 1.65680e+03
+503 1.78310e+03 1.65680e+03
+504 1.97360e+03 1.65680e+03
+505 1.99900e+03 1.65680e+03
+506 2.02440e+03 1.65680e+03
+507 2.07520e+03 1.65680e+03
+508 2.17680e+03 1.65680e+03
+509 1.94820e+03 1.63780e+03
+510 1.87200e+03 1.63780e+03
+511 1.61800e+03 1.63780e+03
+512 1.68150e+03 1.63140e+03
+513 1.78310e+03 1.63140e+03
+514 1.97360e+03 1.63140e+03
+515 1.99900e+03 1.63140e+03
+516 2.02440e+03 1.63140e+03
+517 2.07520e+03 1.63140e+03
+518 2.17680e+03 1.63140e+03
+519 2.17680e+03 1.60600e+03
+520 2.07520e+03 1.60600e+03
+521 1.78310e+03 1.60600e+03
+522 1.68150e+03 1.60600e+03
+523 1.61800e+03 1.58700e+03
+524 1.87200e+03 1.58700e+03
+525 1.94820e+03 1.58700e+03
+526 2.17680e+03 1.58060e+03
+527 2.07520e+03 1.58060e+03
+528 1.78310e+03 1.58060e+03
+529 1.68150e+03 1.58060e+03
+530 1.64340e+03 1.56160e+03
+531 1.68150e+03 1.55520e+03
+532 1.78310e+03 1.55520e+03
+533 1.87200e+03 1.55520e+03
+534 1.90370e+03 1.55520e+03
+535 1.92910e+03 1.55520e+03
+536 1.97360e+03 1.55520e+03
+537 1.99900e+03 1.55520e+03
+538 2.02440e+03 1.55520e+03
+539 2.07520e+03 1.55520e+03
+540 2.17680e+03 1.55520e+03
+541 1.61800e+03 1.53620e+03
+542 1.68150e+03 1.52980e+03
+543 1.78310e+03 1.52980e+03
+544 2.07520e+03 1.52980e+03
+545 2.17680e+03 1.52980e+03
+546 2.17680e+03 1.50440e+03
+547 2.07520e+03 1.50440e+03
+548 2.02440e+03 1.50440e+03
+549 1.99900e+03 1.50440e+03
+550 1.97360e+03 1.50440e+03
+551 1.78310e+03 1.50440e+03
+552 1.68150e+03 1.50440e+03
+553 1.61800e+03 1.48540e+03
+554 1.68150e+03 1.47900e+03
+555 1.78310e+03 1.47900e+03
+556 2.07520e+03 1.47900e+03
+557 2.17680e+03 1.47900e+03
+558 1.64340e+03 1.46000e+03
+559 1.68150e+03 1.45360e+03
+560 1.78310e+03 1.45360e+03
+561 1.87200e+03 1.45360e+03
+562 1.90370e+03 1.45360e+03
+563 1.92910e+03 1.45360e+03
+564 2.07520e+03 1.45360e+03
+565 2.17680e+03 1.45360e+03
+566 1.61800e+03 1.43460e+03
+567 1.68150e+03 1.42820e+03
+568 1.78310e+03 1.42820e+03
+569 1.82120e+03 1.42820e+03
+570 1.92280e+03 1.42820e+03
+571 1.97360e+03 1.42820e+03
+572 1.99900e+03 1.42820e+03
+573 2.02440e+03 1.42820e+03
+574 2.07520e+03 1.42820e+03
+575 2.17680e+03 1.42820e+03
+576 2.17680e+03 1.40280e+03
+577 2.07520e+03 1.40280e+03
+578 2.02440e+03 1.40280e+03
+579 1.99900e+03 1.40280e+03
+580 1.97360e+03 1.40280e+03
+581 1.92280e+03 1.40280e+03
+582 1.82120e+03 1.40280e+03
+583 1.78310e+03 1.40280e+03
+584 1.75770e+03 1.40280e+03
+585 1.73230e+03 1.40280e+03
+586 1.70690e+03 1.40280e+03
+587 1.68150e+03 1.40280e+03
+588 1.65610e+03 1.40280e+03
+589 1.61800e+03 1.38380e+03
+590 1.82120e+03 1.37740e+03
+591 1.92280e+03 1.37740e+03
+592 1.64340e+03 1.35840e+03
+593 1.68150e+03 1.35200e+03
+594 1.78310e+03 1.35200e+03
+595 1.82120e+03 1.35200e+03
+596 1.92280e+03 1.35200e+03
+597 2.11330e+03 1.35200e+03
+598 2.13870e+03 1.35200e+03
+599 1.61800e+03 1.33300e+03
+600 1.68150e+03 1.32660e+03
+601 1.78310e+03 1.32660e+03
+602 1.82120e+03 1.32660e+03
+603 1.92280e+03 1.32660e+03
+604 1.97360e+03 1.32660e+03
+605 1.99900e+03 1.32660e+03
+606 2.02440e+03 1.32660e+03
+607 1.93550e+03 1.28850e+03
+608 1.91010e+03 1.28850e+03
+609 1.88470e+03 1.28850e+03
+610 1.85930e+03 1.28850e+03
+611 1.83390e+03 1.28850e+03
+612 1.80850e+03 1.28850e+03
+613 1.78310e+03 1.28850e+03
+614 1.75770e+03 1.28850e+03
+615 1.73230e+03 1.28850e+03
+616 1.70690e+03 1.28850e+03
+617 1.68150e+03 1.28850e+03
+618 1.65610e+03 1.28850e+03
+619 1.63070e+03 1.28850e+03
+620 1.60530e+03 1.28850e+03
+621 1.57990e+03 1.28850e+03
+622 1.97360e+03 1.27580e+03
+623 1.99900e+03 1.27580e+03
+624 2.02440e+03 1.27580e+03
+625 2.07520e+03 1.27580e+03
+626 2.17680e+03 1.27580e+03
+627 2.17680e+03 1.25040e+03
+628 2.07520e+03 1.25040e+03
+629 1.92280e+03 1.24410e+03
+630 1.82120e+03 1.24410e+03
+631 1.61800e+03 1.23140e+03
+632 1.68150e+03 1.22500e+03
+633 1.78310e+03 1.22500e+03
+634 2.07520e+03 1.22500e+03
+635 2.17680e+03 1.22500e+03
+636 1.92280e+03 1.21870e+03
+637 1.82120e+03 1.21870e+03
+638 1.64340e+03 1.20600e+03
+639 1.68150e+03 1.19960e+03
+640 1.78310e+03 1.19960e+03
+641 1.97360e+03 1.19960e+03
+642 1.99900e+03 1.19960e+03
+643 2.02440e+03 1.19960e+03
+644 2.07520e+03 1.19960e+03
+645 2.17680e+03 1.19960e+03
+646 1.94820e+03 1.18060e+03
+647 1.87200e+03 1.18060e+03
+648 1.61800e+03 1.18060e+03
+649 1.68150e+03 1.17420e+03
+650 1.78310e+03 1.17420e+03
+651 1.97360e+03 1.17420e+03
+652 1.99900e+03 1.17420e+03
+653 2.02440e+03 1.17420e+03
+654 2.07520e+03 1.17420e+03
+655 2.17680e+03 1.17420e+03
+656 2.17680e+03 1.14880e+03
+657 2.07520e+03 1.14880e+03
+658 1.78310e+03 1.14880e+03
+659 1.68150e+03 1.14880e+03
+660 1.61800e+03 1.12980e+03
+661 1.87200e+03 1.12980e+03
+662 1.94820e+03 1.12980e+03
+663 2.17680e+03 1.12340e+03
+664 2.07520e+03 1.12340e+03
+665 1.78310e+03 1.12340e+03
+666 1.68150e+03 1.12340e+03
+667 1.64340e+03 1.10440e+03
+668 1.68150e+03 1.09800e+03
+669 1.78310e+03 1.09800e+03
+670 1.87830e+03 1.09800e+03
+671 1.90370e+03 1.09800e+03
+672 1.92910e+03 1.09800e+03
+673 1.97360e+03 1.09800e+03
+674 1.99900e+03 1.09800e+03
+675 2.02440e+03 1.09800e+03
+676 2.07520e+03 1.09800e+03
+677 2.17680e+03 1.09800e+03
+678 1.61800e+03 1.07900e+03
+679 1.68150e+03 1.07260e+03
+680 1.78310e+03 1.07260e+03
+681 2.07520e+03 1.07260e+03
+682 2.17680e+03 1.07260e+03
+683 2.17680e+03 1.04720e+03
+684 2.07520e+03 1.04720e+03
+685 2.02440e+03 1.04720e+03
+686 1.99900e+03 1.04720e+03
+687 1.97360e+03 1.04720e+03
+688 1.78310e+03 1.04720e+03
+689 1.68150e+03 1.04720e+03
+690 1.61800e+03 1.02820e+03
+691 1.68150e+03 1.02180e+03
+692 1.78310e+03 1.02180e+03
+693 2.07520e+03 1.02180e+03
+694 2.17680e+03 1.02180e+03
+695 1.64340e+03 1.00280e+03
+696 1.68150e+03 9.96400e+02
+697 1.78310e+03 9.96400e+02
+698 1.87830e+03 9.96400e+02
+699 1.90370e+03 9.96400e+02
+700 1.92910e+03 9.96400e+02
+701 2.07520e+03 9.96400e+02
+702 2.17680e+03 9.96400e+02
+703 1.61800e+03 9.77400e+02
+704 1.68150e+03 9.71000e+02
+705 1.78310e+03 9.71000e+02
+706 1.82120e+03 9.71000e+02
+707 1.92280e+03 9.71000e+02
+708 1.97360e+03 9.71000e+02
+709 1.99900e+03 9.71000e+02
+710 2.02440e+03 9.71000e+02
+711 2.07520e+03 9.71000e+02
+712 2.17680e+03 9.71000e+02
+713 2.17680e+03 9.45600e+02
+714 2.07520e+03 9.45600e+02
+715 2.02440e+03 9.45600e+02
+716 1.99900e+03 9.45600e+02
+717 1.97360e+03 9.45600e+02
+718 1.92280e+03 9.45600e+02
+719 1.82120e+03 9.45600e+02
+720 1.78310e+03 9.45600e+02
+721 1.75770e+03 9.45600e+02
+722 1.73230e+03 9.45600e+02
+723 1.70690e+03 9.45600e+02
+724 1.68150e+03 9.45600e+02
+725 1.65610e+03 9.45600e+02
+726 1.61800e+03 9.26600e+02
+727 1.82120e+03 9.20200e+02
+728 1.92280e+03 9.20200e+02
+729 1.64340e+03 9.01200e+02
+730 1.68150e+03 8.94800e+02
+731 1.78310e+03 8.94800e+02
+732 1.82120e+03 8.94800e+02
+733 1.92280e+03 8.94800e+02
+734 1.61800e+03 8.75800e+02
+735 1.68150e+03 8.69400e+02
+736 1.78310e+03 8.69400e+02
+737 1.82120e+03 8.69400e+02
+738 1.92280e+03 8.69400e+02
+739 1.97360e+03 8.69400e+02
+740 1.99900e+03 8.69400e+02
+741 2.02440e+03 8.69400e+02
+742 2.44980e+03 2.03780e+03
+743 2.47520e+03 2.03780e+03
+744 2.50060e+03 2.03780e+03
+745 2.52600e+03 2.03780e+03
+746 2.55140e+03 2.03780e+03
+747 2.57680e+03 2.03780e+03
+748 2.60220e+03 2.03780e+03
+749 2.62760e+03 2.03780e+03
+750 2.67210e+03 2.03780e+03
+751 2.69750e+03 2.03780e+03
+752 2.72290e+03 2.03780e+03
+753 2.74830e+03 2.03780e+03
+754 2.77370e+03 2.03780e+03
+755 2.79910e+03 2.03780e+03
+756 2.82450e+03 2.03780e+03
+757 2.84990e+03 2.03780e+03
+758 2.92610e+03 2.07590e+03
+759 3.00230e+03 2.07590e+03
+760 3.05310e+03 2.07590e+03
+761 3.10390e+03 2.07590e+03
+762 3.16740e+03 2.07590e+03
+763 3.24360e+03 2.07590e+03
+764 3.29440e+03 2.07590e+03
+765 3.34520e+03 2.07590e+03
+766 3.38330e+03 2.08860e+03
+767 3.45950e+03 2.08860e+03
+768 3.49760e+03 2.08860e+03
+769 3.59920e+03 2.08860e+03
+770 3.65000e+03 2.08860e+03
+771 3.67540e+03 2.08860e+03
+772 3.70080e+03 2.08860e+03
+773 2.84990e+03 2.11400e+03
+774 2.82450e+03 2.11400e+03
+775 2.79910e+03 2.11400e+03
+776 2.77370e+03 2.11400e+03
+777 2.74830e+03 2.11400e+03
+778 2.72290e+03 2.11400e+03
+779 2.69750e+03 2.11400e+03
+780 2.67210e+03 2.11400e+03
+781 2.62760e+03 2.11400e+03
+782 2.60220e+03 2.11400e+03
+783 2.57680e+03 2.11400e+03
+784 2.55140e+03 2.11400e+03
+785 2.52600e+03 2.11400e+03
+786 2.50060e+03 2.11400e+03
+787 2.47520e+03 2.11400e+03
+788 2.44980e+03 2.11400e+03
+789 3.49760e+03 2.12670e+03
+790 3.59920e+03 2.12670e+03
+791 3.45950e+03 2.13940e+03
+792 3.38330e+03 2.13940e+03
+793 3.34520e+03 2.15210e+03
+794 3.29440e+03 2.15210e+03
+795 3.24360e+03 2.15210e+03
+796 3.16740e+03 2.15210e+03
+797 3.10390e+03 2.15210e+03
+798 3.05310e+03 2.15210e+03
+799 3.00230e+03 2.15210e+03
+800 2.92610e+03 2.15210e+03
+801 2.87530e+03 2.15210e+03
+802 2.84990e+03 2.15210e+03
+803 2.82450e+03 2.15210e+03
+804 2.77370e+03 2.15210e+03
+805 2.67210e+03 2.15210e+03
+806 2.63400e+03 2.15210e+03
+807 2.53240e+03 2.15210e+03
+808 2.46890e+03 2.15850e+03
+809 2.53240e+03 2.17750e+03
+810 2.63400e+03 2.17750e+03
+811 2.67210e+03 2.17750e+03
+812 2.77370e+03 2.17750e+03
+813 2.49430e+03 2.18390e+03
+814 2.67210e+03 2.20290e+03
+815 2.77370e+03 2.20290e+03
+816 2.92610e+03 2.20290e+03
+817 3.00230e+03 2.20290e+03
+818 3.05310e+03 2.20290e+03
+819 3.10390e+03 2.20290e+03
+820 3.16740e+03 2.20290e+03
+821 3.24360e+03 2.20290e+03
+822 3.29440e+03 2.20290e+03
+823 3.34520e+03 2.20290e+03
+824 2.46890e+03 2.20930e+03
+825 3.38330e+03 2.21560e+03
+826 3.45950e+03 2.21560e+03
+827 3.49760e+03 2.21560e+03
+828 3.59920e+03 2.21560e+03
+829 3.67540e+03 2.21560e+03
+830 3.72620e+03 2.21560e+03
+831 2.87530e+03 2.22830e+03
+832 2.84990e+03 2.22830e+03
+833 2.82450e+03 2.22830e+03
+834 2.77370e+03 2.22830e+03
+835 2.67210e+03 2.22830e+03
+836 2.63400e+03 2.22830e+03
+837 2.60860e+03 2.22830e+03
+838 2.58320e+03 2.22830e+03
+839 2.55780e+03 2.22830e+03
+840 2.53240e+03 2.22830e+03
+841 2.50700e+03 2.22830e+03
+842 3.67540e+03 2.24100e+03
+843 3.72620e+03 2.24100e+03
+844 3.59920e+03 2.25370e+03
+845 3.49760e+03 2.25370e+03
+846 2.87530e+03 2.25370e+03
+847 2.84990e+03 2.25370e+03
+848 2.82450e+03 2.25370e+03
+849 2.77370e+03 2.25370e+03
+850 2.67210e+03 2.25370e+03
+851 2.63400e+03 2.25370e+03
+852 2.53240e+03 2.25370e+03
+853 2.46890e+03 2.26010e+03
+854 3.38330e+03 2.26640e+03
+855 3.45950e+03 2.26640e+03
+856 3.67540e+03 2.26640e+03
+857 3.72620e+03 2.26640e+03
+858 3.34520e+03 2.27910e+03
+859 3.29440e+03 2.27910e+03
+860 3.24360e+03 2.27910e+03
+861 3.16740e+03 2.27910e+03
+862 3.10390e+03 2.27910e+03
+863 3.05310e+03 2.27910e+03
+864 3.00230e+03 2.27910e+03
+865 2.92610e+03 2.27910e+03
+866 2.78000e+03 2.27910e+03
+867 2.75460e+03 2.27910e+03
+868 2.72920e+03 2.27910e+03
+869 2.63400e+03 2.27910e+03
+870 2.53240e+03 2.27910e+03
+871 2.49430e+03 2.28550e+03
+872 3.67540e+03 2.29180e+03
+873 3.72620e+03 2.29180e+03
+874 2.63400e+03 2.30450e+03
+875 2.53240e+03 2.30450e+03
+876 2.46890e+03 2.31090e+03
+877 3.67540e+03 2.31720e+03
+878 3.72620e+03 2.31720e+03
+879 3.34520e+03 2.32990e+03
+880 3.29440e+03 2.32990e+03
+881 3.24360e+03 2.32990e+03
+882 3.16740e+03 2.32990e+03
+883 3.10390e+03 2.32990e+03
+884 3.05310e+03 2.32990e+03
+885 3.00230e+03 2.32990e+03
+886 2.92610e+03 2.32990e+03
+887 2.87530e+03 2.32990e+03
+888 2.84990e+03 2.32990e+03
+889 2.82450e+03 2.32990e+03
+890 2.63400e+03 2.32990e+03
+891 2.53240e+03 2.32990e+03
+892 3.38330e+03 2.34260e+03
+893 3.45950e+03 2.34260e+03
+894 3.49760e+03 2.34260e+03
+895 3.59920e+03 2.34260e+03
+896 3.67540e+03 2.34260e+03
+897 3.72620e+03 2.34260e+03
+898 2.63400e+03 2.35530e+03
+899 2.53240e+03 2.35530e+03
+900 2.46890e+03 2.36170e+03
+901 3.67540e+03 2.36800e+03
+902 3.72620e+03 2.36800e+03
+903 3.59920e+03 2.38070e+03
+904 3.49760e+03 2.38070e+03
+905 2.87530e+03 2.38070e+03
+906 2.84990e+03 2.38070e+03
+907 2.82450e+03 2.38070e+03
+908 2.78000e+03 2.38070e+03
+909 2.75460e+03 2.38070e+03
+910 2.72920e+03 2.38070e+03
+911 2.63400e+03 2.38070e+03
+912 2.53240e+03 2.38070e+03
+913 2.49430e+03 2.38710e+03
+914 3.38330e+03 2.39340e+03
+915 3.45950e+03 2.39340e+03
+916 3.67540e+03 2.39340e+03
+917 3.72620e+03 2.39340e+03
+918 3.34520e+03 2.40610e+03
+919 3.29440e+03 2.40610e+03
+920 3.24360e+03 2.40610e+03
+921 3.16740e+03 2.40610e+03
+922 3.10390e+03 2.40610e+03
+923 3.05310e+03 2.40610e+03
+924 3.00230e+03 2.40610e+03
+925 2.92610e+03 2.40610e+03
+926 2.63400e+03 2.40610e+03
+927 2.53240e+03 2.40610e+03
+928 2.46890e+03 2.41250e+03
+929 2.72290e+03 2.41250e+03
+930 2.79910e+03 2.41250e+03
+931 3.67540e+03 2.41880e+03
+932 3.72620e+03 2.41880e+03
+933 2.63400e+03 2.43150e+03
+934 2.53240e+03 2.43150e+03
+935 3.67540e+03 2.44420e+03
+936 3.72620e+03 2.44420e+03
+937 3.34520e+03 2.45690e+03
+938 3.29440e+03 2.45690e+03
+939 3.24360e+03 2.45690e+03
+940 3.16740e+03 2.45690e+03
+941 3.10390e+03 2.45690e+03
+942 3.05310e+03 2.45690e+03
+943 3.00230e+03 2.45690e+03
+944 2.92610e+03 2.45690e+03
+945 2.87530e+03 2.45690e+03
+946 2.84990e+03 2.45690e+03
+947 2.82450e+03 2.45690e+03
+948 2.63400e+03 2.45690e+03
+949 2.53240e+03 2.45690e+03
+950 2.46890e+03 2.46330e+03
+951 2.72290e+03 2.46330e+03
+952 2.79910e+03 2.46330e+03
+953 3.38330e+03 2.46960e+03
+954 3.45950e+03 2.46960e+03
+955 3.49760e+03 2.46960e+03
+956 3.59920e+03 2.46960e+03
+957 3.67540e+03 2.46960e+03
+958 3.72620e+03 2.46960e+03
+959 2.87530e+03 2.48230e+03
+960 2.84990e+03 2.48230e+03
+961 2.82450e+03 2.48230e+03
+962 2.63400e+03 2.48230e+03
+963 2.53240e+03 2.48230e+03
+964 2.49430e+03 2.48870e+03
+965 3.67540e+03 2.49500e+03
+966 3.72620e+03 2.49500e+03
+967 2.77370e+03 2.50140e+03
+968 2.67210e+03 2.50140e+03
+969 2.53240e+03 2.50770e+03
+970 2.63400e+03 2.50770e+03
+971 3.49760e+03 2.50770e+03
+972 3.59920e+03 2.50770e+03
+973 2.46890e+03 2.51410e+03
+974 3.38330e+03 2.52040e+03
+975 3.45950e+03 2.52040e+03
+976 3.67540e+03 2.52040e+03
+977 3.72620e+03 2.52040e+03
+978 2.77370e+03 2.52680e+03
+979 2.67210e+03 2.52680e+03
+980 2.92610e+03 2.53310e+03
+981 3.00230e+03 2.53310e+03
+982 3.05310e+03 2.53310e+03
+983 3.10390e+03 2.53310e+03
+984 3.16740e+03 2.53310e+03
+985 3.24360e+03 2.53310e+03
+986 3.29440e+03 2.53310e+03
+987 3.34520e+03 2.53310e+03
+988 3.67540e+03 2.54580e+03
+989 3.72620e+03 2.54580e+03
+990 2.87530e+03 2.55850e+03
+991 2.84990e+03 2.55850e+03
+992 2.82450e+03 2.55850e+03
+993 2.43080e+03 2.57120e+03
+994 2.45620e+03 2.57120e+03
+995 2.48160e+03 2.57120e+03
+996 2.50700e+03 2.57120e+03
+997 2.53240e+03 2.57120e+03
+998 2.55780e+03 2.57120e+03
+999 2.58320e+03 2.57120e+03
+1000 2.60860e+03 2.57120e+03
+1001 2.63400e+03 2.57120e+03
+1002 2.65940e+03 2.57120e+03
+1003 2.68480e+03 2.57120e+03
+1004 2.71020e+03 2.57120e+03
+1005 2.73560e+03 2.57120e+03
+1006 2.76100e+03 2.57120e+03
+1007 2.78640e+03 2.57120e+03
+1008 3.67540e+03 2.57120e+03
+1009 3.72620e+03 2.57120e+03
+1010 3.34520e+03 2.58390e+03
+1011 3.29440e+03 2.58390e+03
+1012 3.24360e+03 2.58390e+03
+1013 3.16740e+03 2.58390e+03
+1014 3.10390e+03 2.58390e+03
+1015 3.05310e+03 2.58390e+03
+1016 3.00230e+03 2.58390e+03
+1017 2.92610e+03 2.58390e+03
+1018 3.38330e+03 2.59660e+03
+1019 3.45950e+03 2.59660e+03
+1020 3.49760e+03 2.59660e+03
+1021 3.59920e+03 2.59660e+03
+1022 3.67540e+03 2.59660e+03
+1023 3.72620e+03 2.59660e+03
+1024 2.87530e+03 2.60930e+03
+1025 2.84990e+03 2.60930e+03
+1026 2.82450e+03 2.60930e+03
+1027 2.77370e+03 2.60930e+03
+1028 2.67210e+03 2.60930e+03
+1029 2.63400e+03 2.60930e+03
+1030 2.53240e+03 2.60930e+03
+1031 2.46890e+03 2.61570e+03
+1032 3.67540e+03 2.62200e+03
+1033 3.72620e+03 2.62200e+03
+1034 3.59920e+03 2.63470e+03
+1035 3.49760e+03 2.63470e+03
+1036 2.77370e+03 2.63470e+03
+1037 2.67210e+03 2.63470e+03
+1038 2.63400e+03 2.63470e+03
+1039 2.53240e+03 2.63470e+03
+1040 2.49430e+03 2.64110e+03
+1041 3.38330e+03 2.64740e+03
+1042 3.45950e+03 2.64740e+03
+1043 3.67540e+03 2.64740e+03
+1044 3.72620e+03 2.64740e+03
+1045 3.34520e+03 2.66010e+03
+1046 3.29440e+03 2.66010e+03
+1047 3.24360e+03 2.66010e+03
+1048 3.16740e+03 2.66010e+03
+1049 3.10390e+03 2.66010e+03
+1050 3.05310e+03 2.66010e+03
+1051 3.00230e+03 2.66010e+03
+1052 2.92610e+03 2.66010e+03
+1053 2.77370e+03 2.66010e+03
+1054 2.67210e+03 2.66010e+03
+1055 2.46890e+03 2.66650e+03
+1056 3.67540e+03 2.67280e+03
+1057 3.72620e+03 2.67280e+03
+1058 2.63400e+03 2.67920e+03
+1059 2.60860e+03 2.67920e+03
+1060 2.58320e+03 2.67920e+03
+1061 2.50700e+03 2.68550e+03
+1062 2.53240e+03 2.68550e+03
+1063 2.55780e+03 2.68550e+03
+1064 2.67210e+03 2.68550e+03
+1065 2.77370e+03 2.68550e+03
+1066 2.82450e+03 2.68550e+03
+1067 2.84990e+03 2.68550e+03
+1068 2.87530e+03 2.68550e+03
+1069 3.67540e+03 2.69820e+03
+1070 3.72620e+03 2.69820e+03
+1071 3.34520e+03 2.71090e+03
+1072 3.29440e+03 2.71090e+03
+1073 3.24360e+03 2.71090e+03
+1074 3.16740e+03 2.71090e+03
+1075 3.10390e+03 2.71090e+03
+1076 3.05310e+03 2.71090e+03
+1077 3.00230e+03 2.71090e+03
+1078 2.92610e+03 2.71090e+03
+1079 2.87530e+03 2.71090e+03
+1080 2.84990e+03 2.71090e+03
+1081 2.82450e+03 2.71090e+03
+1082 2.77370e+03 2.71090e+03
+1083 2.67210e+03 2.71090e+03
+1084 2.63400e+03 2.71090e+03
+1085 2.53240e+03 2.71090e+03
+1086 2.46890e+03 2.71730e+03
+1087 3.38330e+03 2.72360e+03
+1088 3.45950e+03 2.72360e+03
+1089 3.49760e+03 2.72360e+03
+1090 3.59920e+03 2.72360e+03
+1091 3.67540e+03 2.72360e+03
+1092 3.72620e+03 2.72360e+03
+1093 2.78000e+03 2.73630e+03
+1094 2.75460e+03 2.73630e+03
+1095 2.72920e+03 2.73630e+03
+1096 2.63400e+03 2.73630e+03
+1097 2.53240e+03 2.73630e+03
+1098 2.49430e+03 2.74270e+03
+1099 3.67540e+03 2.74900e+03
+1100 3.72620e+03 2.74900e+03
+1101 3.59920e+03 2.76170e+03
+1102 3.49760e+03 2.76170e+03
+1103 2.63400e+03 2.76170e+03
+1104 2.53240e+03 2.76170e+03
+1105 2.46890e+03 2.76810e+03
+1106 3.38330e+03 2.77440e+03
+1107 3.45950e+03 2.77440e+03
+1108 3.67540e+03 2.77440e+03
+1109 3.72620e+03 2.77440e+03
+1110 3.34520e+03 2.78710e+03
+1111 3.29440e+03 2.78710e+03
+1112 3.24360e+03 2.78710e+03
+1113 3.16740e+03 2.78710e+03
+1114 3.10390e+03 2.78710e+03
+1115 3.05310e+03 2.78710e+03
+1116 3.00230e+03 2.78710e+03
+1117 2.92610e+03 2.78710e+03
+1118 2.87530e+03 2.78710e+03
+1119 2.84990e+03 2.78710e+03
+1120 2.82450e+03 2.78710e+03
+1121 2.63400e+03 2.78710e+03
+1122 2.53240e+03 2.78710e+03
+1123 3.67540e+03 2.79980e+03
+1124 3.72620e+03 2.79980e+03
+1125 2.63400e+03 2.81250e+03
+1126 2.53240e+03 2.81250e+03
+1127 2.46890e+03 2.81890e+03
+1128 3.67540e+03 2.82520e+03
+1129 3.72620e+03 2.82520e+03
+1130 3.34520e+03 2.83790e+03
+1131 3.29440e+03 2.83790e+03
+1132 3.24360e+03 2.83790e+03
+1133 3.16740e+03 2.83790e+03
+1134 3.10390e+03 2.83790e+03
+1135 3.05310e+03 2.83790e+03
+1136 3.00230e+03 2.83790e+03
+1137 2.92610e+03 2.83790e+03
+1138 2.87530e+03 2.83790e+03
+1139 2.84990e+03 2.83790e+03
+1140 2.82450e+03 2.83790e+03
+1141 2.78000e+03 2.83790e+03
+1142 2.75460e+03 2.83790e+03
+1143 2.72920e+03 2.83790e+03
+1144 2.63400e+03 2.83790e+03
+1145 2.53240e+03 2.83790e+03
+1146 2.49430e+03 2.84430e+03
+1147 3.38330e+03 2.85060e+03
+1148 3.45950e+03 2.85060e+03
+1149 3.49760e+03 2.85060e+03
+1150 3.59920e+03 2.85060e+03
+1151 3.67540e+03 2.85060e+03
+1152 3.72620e+03 2.85060e+03
+1153 2.63400e+03 2.86330e+03
+1154 2.53240e+03 2.86330e+03
+1155 2.46890e+03 2.86970e+03
+1156 2.72290e+03 2.86970e+03
+1157 2.79910e+03 2.86970e+03
+1158 3.67540e+03 2.87600e+03
+1159 3.72620e+03 2.87600e+03
+1160 3.59920e+03 2.88870e+03
+1161 3.49760e+03 2.88870e+03
+1162 2.63400e+03 2.88870e+03
+1163 2.53240e+03 2.88870e+03
+1164 3.38330e+03 2.90140e+03
+1165 3.45950e+03 2.90140e+03
+1166 3.67540e+03 2.90140e+03
+1167 3.72620e+03 2.90140e+03
+1168 3.34520e+03 2.91410e+03
+1169 3.29440e+03 2.91410e+03
+1170 3.24360e+03 2.91410e+03
+1171 3.16740e+03 2.91410e+03
+1172 3.10390e+03 2.91410e+03
+1173 3.05310e+03 2.91410e+03
+1174 3.00230e+03 2.91410e+03
+1175 2.92610e+03 2.91410e+03
+1176 2.87530e+03 2.91410e+03
+1177 2.84990e+03 2.91410e+03
+1178 2.82450e+03 2.91410e+03
+1179 2.63400e+03 2.91410e+03
+1180 2.53240e+03 2.91410e+03
+1181 2.46890e+03 2.92050e+03
+1182 2.72290e+03 2.92050e+03
+1183 2.79910e+03 2.92050e+03
+1184 3.67540e+03 2.92680e+03
+1185 3.72620e+03 2.92680e+03
+1186 2.87530e+03 2.93950e+03
+1187 2.84990e+03 2.93950e+03
+1188 2.82450e+03 2.93950e+03
+1189 2.63400e+03 2.93950e+03
+1190 2.53240e+03 2.93950e+03
+1191 2.49430e+03 2.94590e+03
+1192 3.67540e+03 2.95220e+03
+1193 3.72620e+03 2.95220e+03
+1194 2.77370e+03 2.95860e+03
+1195 2.67210e+03 2.95860e+03
+1196 2.53240e+03 2.96490e+03
+1197 2.63400e+03 2.96490e+03
+1198 2.92610e+03 2.96490e+03
+1199 3.00230e+03 2.96490e+03
+1200 3.05310e+03 2.96490e+03
+1201 3.10390e+03 2.96490e+03
+1202 3.16740e+03 2.96490e+03
+1203 3.24360e+03 2.96490e+03
+1204 3.29440e+03 2.96490e+03
+1205 3.34520e+03 2.96490e+03
+1206 2.46890e+03 2.97130e+03
+1207 3.38330e+03 2.97760e+03
+1208 3.45950e+03 2.97760e+03
+1209 3.49760e+03 2.97760e+03
+1210 3.59920e+03 2.97760e+03
+1211 3.67540e+03 2.97760e+03
+1212 3.72620e+03 2.97760e+03
+1213 2.77370e+03 2.98400e+03
+1214 2.67210e+03 2.98400e+03
+1215 3.67540e+03 3.00300e+03
+1216 3.72620e+03 3.00300e+03
+1217 3.59920e+03 3.01570e+03
+1218 3.49760e+03 3.01570e+03
+1219 2.87530e+03 3.01570e+03
+1220 2.84990e+03 3.01570e+03
+1221 2.82450e+03 3.01570e+03
+1222 2.43080e+03 3.02840e+03
+1223 2.45620e+03 3.02840e+03
+1224 2.48160e+03 3.02840e+03
+1225 2.50700e+03 3.02840e+03
+1226 2.53240e+03 3.02840e+03
+1227 2.55780e+03 3.02840e+03
+1228 2.58320e+03 3.02840e+03
+1229 2.60860e+03 3.02840e+03
+1230 2.63400e+03 3.02840e+03
+1231 2.65940e+03 3.02840e+03
+1232 2.68480e+03 3.02840e+03
+1233 2.71020e+03 3.02840e+03
+1234 2.73560e+03 3.02840e+03
+1235 2.76100e+03 3.02840e+03
+1236 2.78640e+03 3.02840e+03
+1237 3.38330e+03 3.02840e+03
+1238 3.45950e+03 3.02840e+03
+1239 3.34520e+03 3.04110e+03
+1240 3.29440e+03 3.04110e+03
+1241 3.24360e+03 3.04110e+03
+1242 3.16740e+03 3.04110e+03
+1243 3.10390e+03 3.04110e+03
+1244 3.05310e+03 3.04110e+03
+1245 3.00230e+03 3.04110e+03
+1246 2.92610e+03 3.04110e+03
+1247 3.53570e+03 3.06650e+03
+1248 3.56110e+03 3.06650e+03
+1249 3.58650e+03 3.06650e+03
+1250 3.58650e+03 2.01240e+03
+1251 3.53570e+03 2.01240e+03
+1252 3.48490e+03 2.01240e+03
+1253 3.40870e+03 2.01240e+03
+1254 3.34520e+03 2.01240e+03
+1255 3.29440e+03 2.01240e+03
+1256 3.24360e+03 2.01240e+03
+1257 3.16740e+03 2.01240e+03
+1258 3.10390e+03 2.01240e+03
+1259 3.05310e+03 2.01240e+03
+1260 3.00230e+03 2.01240e+03
+1261 2.92610e+03 2.01240e+03
+1262 2.92610e+03 1.93620e+03
+1263 3.00230e+03 1.93620e+03
+1264 3.05310e+03 1.93620e+03
+1265 3.10390e+03 1.93620e+03
+1266 3.16740e+03 1.93620e+03
+1267 3.24360e+03 1.93620e+03
+1268 3.29440e+03 1.93620e+03
+1269 3.34520e+03 1.93620e+03
+1270 3.40870e+03 1.93620e+03
+1271 3.48490e+03 1.93620e+03
+1272 3.53570e+03 1.93620e+03
+1273 3.58650e+03 1.93620e+03
+1274 3.44680e+03 1.79650e+03
+1275 3.42140e+03 1.79650e+03
+1276 3.39600e+03 1.79650e+03
+1277 2.78640e+03 1.74570e+03
+1278 2.76100e+03 1.74570e+03
+1279 2.73560e+03 1.74570e+03
+1280 2.71020e+03 1.74570e+03
+1281 2.68480e+03 1.74570e+03
+1282 2.65940e+03 1.74570e+03
+1283 2.63400e+03 1.74570e+03
+1284 2.60860e+03 1.74570e+03
+1285 2.58320e+03 1.74570e+03
+1286 2.55780e+03 1.74570e+03
+1287 2.53240e+03 1.74570e+03
+1288 2.50700e+03 1.74570e+03
+1289 2.48160e+03 1.74570e+03
+1290 2.45620e+03 1.74570e+03
+1291 2.43080e+03 1.74570e+03
+1292 2.82450e+03 1.73300e+03
+1293 2.84990e+03 1.73300e+03
+1294 2.87530e+03 1.73300e+03
+1295 2.77370e+03 1.70130e+03
+1296 2.67210e+03 1.70130e+03
+1297 2.46890e+03 1.68860e+03
+1298 2.53240e+03 1.68220e+03
+1299 2.63400e+03 1.68220e+03
+1300 3.24990e+03 1.68220e+03
+1301 3.35150e+03 1.68220e+03
+1302 2.77370e+03 1.67590e+03
+1303 2.67210e+03 1.67590e+03
+1304 2.49430e+03 1.66320e+03
+1305 2.53240e+03 1.65680e+03
+1306 2.63400e+03 1.65680e+03
+1307 2.82450e+03 1.65680e+03
+1308 2.84990e+03 1.65680e+03
+1309 2.87530e+03 1.65680e+03
+1310 3.24990e+03 1.65680e+03
+1311 3.35150e+03 1.65680e+03
+1312 2.79910e+03 1.63780e+03
+1313 2.72290e+03 1.63780e+03
+1314 2.46890e+03 1.63780e+03
+1315 2.53240e+03 1.63140e+03
+1316 2.63400e+03 1.63140e+03
+1317 2.82450e+03 1.63140e+03
+1318 2.84990e+03 1.63140e+03
+1319 2.87530e+03 1.63140e+03
+1320 3.24990e+03 1.63140e+03
+1321 3.35150e+03 1.63140e+03
+1322 3.35150e+03 1.60600e+03
+1323 3.24990e+03 1.60600e+03
+1324 2.63400e+03 1.60600e+03
+1325 2.53240e+03 1.60600e+03
+1326 2.46890e+03 1.58700e+03
+1327 2.72290e+03 1.58700e+03
+1328 2.79910e+03 1.58700e+03
+1329 2.53240e+03 1.58060e+03
+1330 2.63400e+03 1.58060e+03
+1331 3.24990e+03 1.58060e+03
+1332 3.35150e+03 1.58060e+03
+1333 2.49430e+03 1.56160e+03
+1334 2.53240e+03 1.55520e+03
+1335 2.63400e+03 1.55520e+03
+1336 2.72920e+03 1.55520e+03
+1337 2.75460e+03 1.55520e+03
+1338 2.78000e+03 1.55520e+03
+1339 2.82450e+03 1.55520e+03
+1340 2.84990e+03 1.55520e+03
+1341 2.87530e+03 1.55520e+03
+1342 2.46890e+03 1.53620e+03
+1343 2.53240e+03 1.52980e+03
+1344 2.63400e+03 1.52980e+03
+1345 2.53240e+03 1.50440e+03
+1346 2.63400e+03 1.50440e+03
+1347 2.82450e+03 1.50440e+03
+1348 2.84990e+03 1.50440e+03
+1349 2.87530e+03 1.50440e+03
+1350 2.46890e+03 1.48540e+03
+1351 2.53240e+03 1.47900e+03
+1352 2.63400e+03 1.47900e+03
+1353 2.96420e+03 1.47900e+03
+1354 2.49430e+03 1.46000e+03
+1355 2.53240e+03 1.45360e+03
+1356 2.63400e+03 1.45360e+03
+1357 2.72920e+03 1.45360e+03
+1358 2.75460e+03 1.45360e+03
+1359 2.78000e+03 1.45360e+03
+1360 2.46890e+03 1.43460e+03
+1361 2.53240e+03 1.42820e+03
+1362 2.63400e+03 1.42820e+03
+1363 2.67210e+03 1.42820e+03
+1364 2.77370e+03 1.42820e+03
+1365 2.82450e+03 1.42820e+03
+1366 2.84990e+03 1.42820e+03
+1367 2.87530e+03 1.42820e+03
+1368 2.87530e+03 1.40280e+03
+1369 2.84990e+03 1.40280e+03
+1370 2.82450e+03 1.40280e+03
+1371 2.77370e+03 1.40280e+03
+1372 2.67210e+03 1.40280e+03
+1373 2.63400e+03 1.40280e+03
+1374 2.60860e+03 1.40280e+03
+1375 2.58320e+03 1.40280e+03
+1376 2.55780e+03 1.40280e+03
+1377 2.53240e+03 1.40280e+03
+1378 2.50700e+03 1.40280e+03
+1379 2.46890e+03 1.38380e+03
+1380 2.67210e+03 1.37740e+03
+1381 2.77370e+03 1.37740e+03
+1382 2.96420e+03 1.37740e+03
+1383 2.49430e+03 1.35840e+03
+1384 2.53240e+03 1.35200e+03
+1385 2.63400e+03 1.35200e+03
+1386 2.67210e+03 1.35200e+03
+1387 2.77370e+03 1.35200e+03
+1388 2.46890e+03 1.33300e+03
+1389 2.53240e+03 1.32660e+03
+1390 2.63400e+03 1.32660e+03
+1391 2.67210e+03 1.32660e+03
+1392 2.77370e+03 1.32660e+03
+1393 2.82450e+03 1.32660e+03
+1394 2.84990e+03 1.32660e+03
+1395 2.87530e+03 1.32660e+03
+1396 2.78640e+03 1.28850e+03
+1397 2.76100e+03 1.28850e+03
+1398 2.73560e+03 1.28850e+03
+1399 2.71020e+03 1.28850e+03
+1400 2.68480e+03 1.28850e+03
+1401 2.65940e+03 1.28850e+03
+1402 2.63400e+03 1.28850e+03
+1403 2.60860e+03 1.28850e+03
+1404 2.58320e+03 1.28850e+03
+1405 2.55780e+03 1.28850e+03
+1406 2.53240e+03 1.28850e+03
+1407 2.50700e+03 1.28850e+03
+1408 2.48160e+03 1.28850e+03
+1409 2.45620e+03 1.28850e+03
+1410 2.43080e+03 1.28850e+03
+1411 2.82450e+03 1.27580e+03
+1412 2.84990e+03 1.27580e+03
+1413 2.87530e+03 1.27580e+03
+1414 2.77370e+03 1.24410e+03
+1415 2.67210e+03 1.24410e+03
+1416 2.46890e+03 1.23140e+03
+1417 2.53240e+03 1.22500e+03
+1418 2.63400e+03 1.22500e+03
+1419 2.67210e+03 1.21870e+03
+1420 2.77370e+03 1.21870e+03
+1421 2.49430e+03 1.20600e+03
+1422 2.53240e+03 1.19960e+03
+1423 2.63400e+03 1.19960e+03
+1424 2.82450e+03 1.19960e+03
+1425 2.84990e+03 1.19960e+03
+1426 2.87530e+03 1.19960e+03
+1427 2.79910e+03 1.18060e+03
+1428 2.72290e+03 1.18060e+03
+1429 2.46890e+03 1.18060e+03
+1430 2.53240e+03 1.17420e+03
+1431 2.63400e+03 1.17420e+03
+1432 2.82450e+03 1.17420e+03
+1433 2.84990e+03 1.17420e+03
+1434 2.87530e+03 1.17420e+03
+1435 2.63400e+03 1.14880e+03
+1436 2.53240e+03 1.14880e+03
+1437 2.46890e+03 1.12980e+03
+1438 2.72290e+03 1.12980e+03
+1439 2.79910e+03 1.12980e+03
+1440 2.63400e+03 1.12340e+03
+1441 2.53240e+03 1.12340e+03
+1442 2.49430e+03 1.10440e+03
+1443 2.53240e+03 1.09800e+03
+1444 2.63400e+03 1.09800e+03
+1445 2.72920e+03 1.09800e+03
+1446 2.75460e+03 1.09800e+03
+1447 2.78000e+03 1.09800e+03
+1448 2.82450e+03 1.09800e+03
+1449 2.84990e+03 1.09800e+03
+1450 2.87530e+03 1.09800e+03
+1451 2.46890e+03 1.07900e+03
+1452 2.53240e+03 1.07260e+03
+1453 2.63400e+03 1.07260e+03
+1454 2.91970e+03 1.06630e+03
+1455 3.02130e+03 1.06630e+03
+1456 3.09120e+03 1.06630e+03
+1457 3.19280e+03 1.06630e+03
+1458 3.24360e+03 1.06630e+03
+1459 3.34520e+03 1.06630e+03
+1460 2.87530e+03 1.04720e+03
+1461 2.84990e+03 1.04720e+03
+1462 2.82450e+03 1.04720e+03
+1463 2.63400e+03 1.04720e+03
+1464 2.53240e+03 1.04720e+03
+1465 2.91970e+03 1.04090e+03
+1466 3.02130e+03 1.04090e+03
+1467 3.09120e+03 1.04090e+03
+1468 3.19280e+03 1.04090e+03
+1469 3.24360e+03 1.04090e+03
+1470 3.34520e+03 1.04090e+03
+1471 2.46890e+03 1.02820e+03
+1472 2.53240e+03 1.02180e+03
+1473 2.63400e+03 1.02180e+03
+1474 2.91970e+03 1.01550e+03
+1475 3.02130e+03 1.01550e+03
+1476 3.09120e+03 1.01550e+03
+1477 3.19280e+03 1.01550e+03
+1478 3.24360e+03 1.01550e+03
+1479 3.34520e+03 1.01550e+03
+1480 2.49430e+03 1.00280e+03
+1481 2.53240e+03 9.96400e+02
+1482 2.63400e+03 9.96400e+02
+1483 2.72920e+03 9.96400e+02
+1484 2.75460e+03 9.96400e+02
+1485 2.78000e+03 9.96400e+02
+1486 2.91970e+03 9.90100e+02
+1487 3.02130e+03 9.90100e+02
+1488 2.46890e+03 9.77400e+02
+1489 2.53240e+03 9.71000e+02
+1490 2.63400e+03 9.71000e+02
+1491 2.67210e+03 9.71000e+02
+1492 2.77370e+03 9.71000e+02
+1493 2.82450e+03 9.71000e+02
+1494 2.84990e+03 9.71000e+02
+1495 2.87530e+03 9.71000e+02
+1496 2.87530e+03 9.45600e+02
+1497 2.84990e+03 9.45600e+02
+1498 2.82450e+03 9.45600e+02
+1499 2.77370e+03 9.45600e+02
+1500 2.67210e+03 9.45600e+02
+1501 2.63400e+03 9.45600e+02
+1502 2.60860e+03 9.45600e+02
+1503 2.58320e+03 9.45600e+02
+1504 2.55780e+03 9.45600e+02
+1505 2.53240e+03 9.45600e+02
+1506 2.50700e+03 9.45600e+02
+1507 2.46890e+03 9.26600e+02
+1508 2.67210e+03 9.20200e+02
+1509 2.77370e+03 9.20200e+02
+1510 2.49430e+03 9.01200e+02
+1511 2.53240e+03 8.94800e+02
+1512 2.63400e+03 8.94800e+02
+1513 2.67210e+03 8.94800e+02
+1514 2.77370e+03 8.94800e+02
+1515 2.46890e+03 8.75800e+02
+1516 2.53240e+03 8.69400e+02
+1517 2.63400e+03 8.69400e+02
+1518 2.67210e+03 8.69400e+02
+1519 2.77370e+03 8.69400e+02
+1520 2.82450e+03 8.69400e+02
+1521 2.84990e+03 8.69400e+02
+1522 2.87530e+03 8.69400e+02
+1523 3.09120e+03 9.58300e+02
+1524 3.11660e+03 9.58300e+02
+1525 3.14200e+03 9.58300e+02
+1526 3.16740e+03 9.58300e+02
+1527 3.19280e+03 9.58300e+02
+1528 3.21820e+03 9.58300e+02
+1529 3.24360e+03 9.58300e+02
+1530 3.26900e+03 9.58300e+02
+1531 3.29440e+03 9.58300e+02
+1532 3.31980e+03 9.58300e+02
+1533 3.31980e+03 8.82100e+02
+1534 3.29440e+03 8.82100e+02
+1535 3.26900e+03 8.82100e+02
+1536 3.24360e+03 8.82100e+02
+1537 3.21820e+03 8.82100e+02
+1538 3.19280e+03 8.82100e+02
+1539 3.16740e+03 8.82100e+02
+1540 3.14200e+03 8.82100e+02
+1541 3.11660e+03 8.82100e+02
+1542 3.09120e+03 8.82100e+02
+1543 3.11660e+03 8.44000e+02
+1544 3.21820e+03 8.44000e+02
+1545 3.53570e+03 8.31300e+02
+1546 3.56110e+03 8.31300e+02
+1547 3.58650e+03 8.31300e+02
+1548 3.65000e+03 8.82100e+02
+1549 3.67540e+03 8.82100e+02
+1550 3.72620e+03 8.82100e+02
+1551 3.72620e+03 9.07500e+02
+1552 3.67540e+03 9.07500e+02
+1553 3.65000e+03 9.07500e+02
+1554 3.65000e+03 9.32900e+02
+1555 3.67540e+03 9.32900e+02
+1556 3.72620e+03 9.32900e+02
+1557 3.72620e+03 9.58300e+02
+1558 3.67540e+03 9.58300e+02
+1559 3.65000e+03 9.58300e+02
+1560 3.65000e+03 9.83700e+02
+1561 3.67540e+03 9.83700e+02
+1562 3.72620e+03 9.83700e+02
+1563 3.72620e+03 1.00910e+03
+1564 3.67540e+03 1.00910e+03
+1565 3.65000e+03 1.00910e+03
+1566 3.65000e+03 1.03450e+03
+1567 3.67540e+03 1.03450e+03
+1568 3.72620e+03 1.03450e+03
+1569 3.72620e+03 1.05990e+03
+1570 3.67540e+03 1.05990e+03
+1571 3.65000e+03 1.05990e+03
+1572 3.65000e+03 1.08530e+03
+1573 3.67540e+03 1.08530e+03
+1574 3.72620e+03 1.08530e+03
+1575 3.72620e+03 1.11070e+03
+1576 3.67540e+03 1.11070e+03
+1577 3.65000e+03 1.11070e+03
+1578 3.65000e+03 1.13610e+03
+1579 3.67540e+03 1.13610e+03
+1580 3.72620e+03 1.13610e+03
+1581 3.72620e+03 1.16150e+03
+1582 3.67540e+03 1.16150e+03
+1583 3.65000e+03 1.16150e+03
+1584 3.65000e+03 1.18690e+03
+1585 3.67540e+03 1.18690e+03
+1586 3.72620e+03 1.18690e+03
+1587 3.58650e+03 1.19960e+03
+1588 3.56110e+03 1.19960e+03
+1589 3.65000e+03 1.21230e+03
+1590 3.67540e+03 1.21230e+03
+1591 3.72620e+03 1.21230e+03
+1592 3.72620e+03 1.23770e+03
+1593 3.67540e+03 1.23770e+03
+1594 3.65000e+03 1.23770e+03
+1595 3.65000e+03 1.26310e+03
+1596 3.67540e+03 1.26310e+03
+1597 3.72620e+03 1.26310e+03
+1598 3.72620e+03 1.28850e+03
+1599 3.67540e+03 1.28850e+03
+1600 3.65000e+03 1.28850e+03
+1601 3.58650e+03 1.30120e+03
+1602 3.56110e+03 1.30120e+03
+1603 3.65000e+03 1.31390e+03
+1604 3.67540e+03 1.31390e+03
+1605 3.72620e+03 1.31390e+03
+1606 3.72620e+03 1.33930e+03
+1607 3.67540e+03 1.33930e+03
+1608 3.65000e+03 1.33930e+03
+1609 3.65000e+03 1.36470e+03
+1610 3.67540e+03 1.36470e+03
+1611 3.72620e+03 1.36470e+03
+1612 3.72620e+03 1.39010e+03
+1613 3.67540e+03 1.39010e+03
+1614 3.65000e+03 1.39010e+03
+1615 3.65000e+03 1.41550e+03
+1616 3.67540e+03 1.41550e+03
+1617 3.72620e+03 1.41550e+03
+1618 3.72620e+03 1.44090e+03
+1619 3.67540e+03 1.44090e+03
+1620 3.65000e+03 1.44090e+03
+1621 3.65000e+03 1.46630e+03
+1622 3.67540e+03 1.46630e+03
+1623 3.72620e+03 1.46630e+03
+1624 3.72620e+03 1.49170e+03
+1625 3.67540e+03 1.49170e+03
+1626 3.65000e+03 1.49170e+03
+1627 3.65000e+03 1.51710e+03
+1628 3.67540e+03 1.51710e+03
+1629 3.72620e+03 1.51710e+03
+1630 3.72620e+03 1.54250e+03
+1631 3.67540e+03 1.54250e+03
+1632 3.65000e+03 1.54250e+03
+1633 3.57380e+03 1.54890e+03
+1634 3.54840e+03 1.54890e+03
+1635 3.65000e+03 1.56790e+03
+1636 3.67540e+03 1.56790e+03
+1637 3.72620e+03 1.56790e+03
+1638 3.72620e+03 1.59330e+03
+1639 3.67540e+03 1.59330e+03
+1640 3.65000e+03 1.59330e+03
+1641 3.65000e+03 1.61870e+03
+1642 3.67540e+03 1.61870e+03
+1643 3.72620e+03 1.61870e+03
+1644 3.72620e+03 1.64410e+03
+1645 3.67540e+03 1.64410e+03
+1646 3.65000e+03 1.64410e+03
+1647 3.72620e+03 1.66950e+03
+1648 3.67540e+03 1.66950e+03
+1649 3.65000e+03 1.66950e+03
+1650 3.59920e+03 1.66950e+03
+1651 3.49760e+03 1.66950e+03
+1652 3.49760e+03 1.69490e+03
+1653 3.59920e+03 1.69490e+03
+1654 3.59920e+03 1.72030e+03
+1655 3.49760e+03 1.72030e+03
+EOF
diff --git a/tests/data_sample/a280_cities_minimum_2579.txt b/tests/data_sample/a280_cities_minimum_2579.txt
new file mode 100644
index 0000000..7c040c9
--- /dev/null
+++ b/tests/data_sample/a280_cities_minimum_2579.txt
@@ -0,0 +1,2 @@
+[[288, 149], [288, 129], [270, 133], [256, 141], [256, 157], [246, 157], [236, 169], [228, 169], [228, 161], [220, 169], [212, 169], [204, 169], [196, 169], [188, 169], [196, 161], [188, 145], [172, 145], [164, 145], [156, 145], [148, 145], [140, 145], [148, 169], [164, 169], [172, 169], [156, 169], [140, 169], [132, 169], [124, 169], [116, 161], [104, 153], [104, 161], [104, 169], [90, 165], [80, 157], [64, 157], [64, 165], [56, 169], [56, 161], [56, 153], [56, 145], [56, 137], [56, 129], [56, 121], [40, 121], [40, 129], [40, 137], [40, 145], [40, 153], [40, 161], [40, 169], [32, 169], [32, 161], [32, 153], [32, 145], [32, 137], [32, 129], [32, 121], [32, 113], [40, 113], [56, 113], [56, 105], [48, 99], [40, 99], [32, 97], [32, 89], [24, 89], [16, 97], [16, 109], [8, 109], [8, 97], [8, 89], [8, 81], [8, 73], [8, 65], [8, 57], [16, 57], [8, 49], [8, 41], [24, 45], [32, 41], [32, 49], [32, 57], [32, 65], [32, 73], [32, 81], [40, 83], [40, 73], [40, 63], [40, 51], [44, 43], [44, 35], [44, 27], [32, 25], [24, 25], [16, 25], [16, 17], [24, 17], [32, 17], [44, 11], [56, 9], [56, 17], [56, 25], [56, 33], [56, 41], [64, 41], [72, 41], [72, 49], [56, 49], [48, 51], [56, 57], [56, 65], [48, 63], [48, 73], [56, 73], [56, 81], [48, 83], [56, 89], [56, 97], [104, 97], [104, 105], [104, 113], [104, 121], [104, 129], [104, 137], [104, 145], [116, 145], [124, 145], [132, 145], [132, 137], [140, 137], [148, 137], [156, 137], [164, 137], [172, 125], [172, 117], [172, 109], [172, 101], [172, 93], [172, 85], [180, 85], [180, 77], [180, 69], [180, 61], [180, 53], [172, 53], [172, 61], [172, 69], [172, 77], [164, 81], [148, 85], [124, 85], [124, 93], [124, 109], [124, 125], [124, 117], [124, 101], [104, 89], [104, 81], [104, 73], [104, 65], [104, 49], [104, 41], [104, 33], [104, 25], [104, 17], [92, 9], [80, 9], [72, 9], [64, 21], [72, 25], [80, 25], [80, 25], [80, 41], [88, 49], [104, 57], [124, 69], [124, 77], [132, 81], [140, 65], [132, 61], [124, 61], [124, 53], [124, 45], [124, 37], [124, 29], [132, 21], [124, 21], [120, 9], [128, 9], [136, 9], [148, 9], [162, 9], [156, 25], [172, 21], [180, 21], [180, 29], [172, 29], [172, 37], [172, 45], [180, 45], [180, 37], [188, 41], [196, 49], [204, 57], [212, 65], [220, 73], [228, 69], [228, 77], [236, 77], [236, 69], [236, 61], [228, 61], [228, 53], [236, 53], [236, 45], [228, 45], [228, 37], [236, 37], [236, 29], [228, 29], [228, 21], [236, 21], [252, 21], [260, 29], [260, 37], [260, 45], [260, 53], [260, 61], [260, 69], [260, 77], [276, 77], [276,
+69], [276, 61], [276, 53], [284, 53], [284, 61], [284, 69], [284, 77], [284, 85], [284, 93], [284, 101], [288, 109], [280, 109], [276, 101], [276, 93], [276, 85], [268, 97], [260, 109], [252, 101], [260, 93], [260, 85], [236, 85], [228, 85], [228, 93], [236, 93], [236, 101], [228, 101], [228, 109], [228, 117], [228, 125], [220, 125], [212, 117], [204, 109], [196, 101], [188, 93], [180, 93], [180, 101], [180, 109], [180, 117], [180, 125], [196, 145], [204, 145], [212, 145], [220, 145], [228, 145], [236, 145], [246, 141], [252, 125], [260, 129], [280, 133]]
\ No newline at end of file
diff --git a/tests/data_sample/d1655_cities_minimum_62128.txt b/tests/data_sample/d1655_cities_minimum_62128.txt
new file mode 100644
index 0000000..b706a7d
--- /dev/null
+++ b/tests/data_sample/d1655_cities_minimum_62128.txt
@@ -0,0 +1,23 @@
+[[0.0, 0.0], [1224.3, 945.6], [1325.9, 945.6], [1325.9, 971.0], [1224.3, 971.0], [1224.3, 996.4], [1325.9, 996.4], [1325.9, 1021.8], [1224.3, 1021.8], [1186.2, 1034.5], [1084.6, 1034.5], [1052.8, 1034.5], [1027.4, 1034.5], [1224.3, 1047.2], [1325.9, 1047.2], [1186.2, 1059.9], [1084.6, 1059.9], [1052.8, 1059.9], [1027.4, 1059.9], [1224.3, 1072.6], [1325.9, 1072.6], [1186.2, 1085.3], [1084.6, 1085.3], [1052.8, 1085.3], [1027.4, 1085.3], [1224.3, 1098.0], [1325.9, 1098.0], [1186.2, 1110.7], [1084.6, 1110.7], [1052.8, 1110.7], [1027.4, 1110.7], [1224.3, 1123.4], [1325.9, 1123.4], [1186.2, 1136.1], [1084.6, 1136.1], [1052.8, 1136.1], [1027.4, 1136.1], [1224.3, 1148.8], [1325.9, 1148.8], [1186.2,
+1161.5], [1084.6, 1161.5], [1052.8, 1161.5], [1027.4, 1161.5], [1224.3, 1174.2], [1325.9, 1174.2], [1186.2, 1186.9], [1084.6, 1186.9], [1052.8, 1186.9], [1027.4, 1186.9], [1224.3, 1199.6], [1325.9, 1199.6], [1186.2, 1212.3], [1084.6, 1212.3], [1052.8, 1212.3], [1027.4, 1212.3], [1224.3, 1225.0], [1325.9, 1225.0], [1186.2, 1237.7], [1084.6, 1237.7], [1052.8, 1237.7], [1027.4, 1237.7], [1224.3, 1250.4], [1325.9, 1250.4], [1186.2, 1263.1], [1084.6, 1263.1], [1052.8, 1263.1], [1027.4, 1263.1], [1224.3, 1275.8], [1325.9, 1275.8], [1186.2, 1288.5], [1084.6, 1288.5], [1052.8, 1288.5], [1027.4, 1288.5], [1027.4, 1313.9], [1052.8, 1313.9], [1084.6, 1313.9], [1186.2, 1313.9], [1287.8, 1339.3], [1262.4, 1339.3], [1186.2, 1339.3], [1084.6, 1339.3], [1052.8, 1339.3], [1027.4, 1339.3], [1027.4, 1364.7], [1052.8, 1364.7], [1084.6, 1364.7], [1186.2, 1364.7], [1186.2, 1390.1], [1084.6, 1390.1], [1052.8, 1390.1], [1027.4, 1390.1], [1224.3, 1402.8], [1325.9, 1402.8], [1186.2, 1415.5], [1084.6, 1415.5], [1052.8, 1415.5], [1027.4, 1415.5], [1224.3, 1428.2], [1325.9, 1428.2], [1325.9, 1453.6], [1224.3, 1453.6], [1224.3, 1479.0], [1325.9, 1479.0], [1186.2, 1491.7], [1084.6, 1491.7], [1052.8, 1491.7], [1027.4, 1504.4], [1224.3, 1504.4], [1325.9, 1504.4], [1052.8,
+1517.1], [1224.3, 1529.8], [1325.9, 1529.8], [1325.9, 1555.2], [1224.3, 1555.2], [1224.3, 1580.6], [1325.9, 1580.6], [1325.9, 1606.0], [1224.3, 1606.0], [1224.3, 1631.4], [1325.9, 1631.4], [1325.9, 1656.8], [1224.3, 1656.8], [1224.3, 1682.2], [1325.9, 1682.2], [1325.9, 1707.6], [1224.3, 1707.6], [1224.3, 1733.0], [1325.9, 1733.0], [1097.3, 1948.9], [1071.9, 1948.9], [1224.3, 2152.1], [1325.9, 2152.1], [1325.9, 2177.5], [1224.3, 2177.5], [1224.3, 2202.9], [1325.9, 2202.9], [1325.9, 2228.3], [1224.3, 2228.3], [1224.3, 2253.7], [1325.9, 2253.7], [1325.9, 2279.1], [1224.3, 2279.1], [1224.3, 2304.5], [1325.9, 2304.5], [1325.9, 2329.9], [1224.3, 2329.9], [1224.3, 2355.3], [1325.9, 2355.3], [1325.9, 2380.7], [1224.3, 2380.7], [1224.3, 2406.1], [1325.9, 2406.1], [1325.9, 2431.5], [1224.3, 2431.5], [1224.3, 2456.9], [1325.9, 2456.9], [1325.9, 2482.3], [1224.3, 2482.3], [1262.4, 2545.8], [1287.8, 2545.8], [1325.9, 2609.3], [1224.3, 2609.3], [1224.3, 2634.7], [1325.9, 2634.7], [1186.2, 2647.4], [1084.6, 2647.4], [1052.8, 2647.4], [1027.4, 2660.1], [1224.3, 2660.1], [1325.9, 2660.1], [1052.8, 2672.8], [1224.3, 2685.5], [1325.9, 2685.5], [1325.9, 2710.9], [1224.3, 2710.9], [1224.3, 2736.3], [1325.9, 2736.3], [1325.9, 2761.7], [1224.3, 2761.7], [1224.3,
+2787.1], [1325.9, 2787.1], [1325.9, 2812.5], [1224.3, 2812.5], [1325.9, 2837.9], [1224.3, 2837.9], [1186.2, 2837.9], [1084.6, 2837.9], [1224.3, 2863.3], [1325.9, 2863.3], [1325.9, 2888.7], [1224.3, 2888.7], [1224.3, 2914.1], [1325.9, 2914.1], [1325.9, 2939.5], [1224.3, 2939.5], [1579.9, 3028.4], [1605.3, 3028.4], [1630.7, 3028.4], [1656.1, 3028.4], [1681.5, 3028.4], [1706.9, 3028.4], [1732.3, 3028.4], [1757.7, 3028.4], [1783.1, 3028.4], [1808.5, 3028.4], [1833.9, 3028.4], [1859.3, 3028.4], [1884.7, 3028.4], [1910.1, 3028.4], [1935.5, 3028.4], [1973.6, 3015.7], [1999.0, 3015.7], [2024.4, 3015.7], [1922.8, 2984.0], [1821.2, 2984.0], [1618.0, 2971.3], [1681.5, 2964.9], [1783.1, 2964.9], [1821.2, 2958.6], [1922.8, 2958.6], [1643.4, 2945.9], [1681.5, 2939.5], [1783.1, 2939.5], [1973.6, 2939.5], [1999.0, 2939.5], [2024.4, 2939.5], [2075.2, 2939.5], [2176.8, 2939.5], [1948.2, 2920.5], [1872.0, 2920.5], [1618.0, 2920.5], [1681.5, 2914.1], [1783.1, 2914.1], [1973.6, 2914.1], [1999.0, 2914.1], [2024.4, 2914.1], [2075.2, 2914.1], [2176.8, 2914.1], [2176.8, 2888.7], [2075.2, 2888.7], [1783.1, 2888.7], [1681.5, 2888.7], [1618.0, 2869.7], [1872.0, 2869.7], [1948.2, 2869.7], [2176.8, 2863.3], [2075.2, 2863.3], [1783.1, 2863.3], [1681.5, 2863.3], [1643.4,
+2844.3], [1681.5, 2837.9], [1783.1, 2837.9], [1878.3, 2837.9], [1903.7, 2837.9], [1929.1, 2837.9], [1973.6, 2837.9], [1999.0, 2837.9], [2024.4, 2837.9], [2075.2, 2837.9], [2176.8, 2837.9], [1618.0, 2818.9], [1681.5, 2812.5], [1783.1, 2812.5], [2075.2, 2812.5], [2176.8, 2812.5], [2176.8, 2787.1], [2075.2, 2787.1], [2024.4, 2787.1], [1999.0, 2787.1], [1973.6, 2787.1], [1783.1, 2787.1], [1681.5, 2787.1], [1618.0, 2768.1], [1681.5, 2761.7], [1783.1, 2761.7], [2075.2, 2761.7], [2176.8, 2761.7], [1643.4, 2742.7], [1681.5, 2736.3], [1783.1, 2736.3], [1878.3, 2736.3], [1903.7, 2736.3], [1929.1, 2736.3], [2075.2, 2736.3], [2176.8, 2736.3], [1618.0, 2717.3], [1681.5, 2710.9], [1783.1, 2710.9], [1821.2, 2710.9], [1922.8, 2710.9], [1973.6, 2710.9], [1999.0, 2710.9], [2024.4, 2710.9], [2075.2, 2710.9], [2176.8, 2710.9], [2176.8, 2685.5], [2075.2, 2685.5], [2024.4, 2685.5], [1999.0, 2685.5], [1973.6, 2685.5], [1922.8, 2685.5], [1821.2, 2685.5], [1783.1, 2685.5], [1757.7, 2685.5], [1732.3, 2685.5], [1706.9, 2685.5], [1681.5, 2685.5], [1656.1, 2685.5], [1618.0, 2666.5], [1821.2, 2660.1], [1922.8, 2660.1], [2075.2, 2660.1], [2176.8, 2660.1], [1643.4, 2641.1], [1681.5, 2634.7], [1783.1, 2634.7], [1821.2, 2634.7], [1922.8, 2634.7], [2075.2, 2634.7], [2176.8,
+2634.7], [1618.0, 2615.7], [1681.5, 2609.3], [1783.1, 2609.3], [1821.2, 2609.3], [1922.8, 2609.3], [1973.6, 2609.3], [1999.0, 2609.3], [2024.4, 2609.3], [2075.2, 2609.3], [2176.8, 2609.3], [1935.5, 2571.2], [1910.1, 2571.2], [1884.7, 2571.2], [1859.3, 2571.2], [1833.9, 2571.2], [1808.5, 2571.2], [1783.1, 2571.2], [1757.7, 2571.2], [1732.3, 2571.2], [1706.9, 2571.2], [1681.5, 2571.2], [1656.1, 2571.2], [1630.7, 2571.2], [1605.3, 2571.2], [1579.9, 2571.2], [1973.6, 2558.5], [1999.0, 2558.5], [2024.4, 2558.5], [2113.3, 2545.8], [2138.7, 2545.8], [1922.8, 2526.8], [1821.2, 2526.8], [1618.0, 2514.1], [1681.5, 2507.7], [1783.1, 2507.7], [1821.2, 2501.4], [1922.8, 2501.4], [1643.4, 2488.7], [1681.5, 2482.3], [1783.1, 2482.3], [1973.6, 2482.3], [1999.0, 2482.3], [2024.4, 2482.3], [2075.2, 2482.3], [2176.8, 2482.3], [1948.2, 2463.3], [1872.0, 2463.3], [1618.0, 2463.3], [1681.5, 2456.9], [1783.1, 2456.9], [1973.6, 2456.9], [1999.0, 2456.9], [2024.4, 2456.9], [2075.2, 2456.9], [2176.8, 2456.9], [2176.8, 2431.5], [2075.2, 2431.5], [1783.1, 2431.5], [1681.5, 2431.5], [1618.0, 2412.5], [1872.0, 2412.5], [1948.2, 2412.5], [2176.8, 2406.1], [2075.2, 2406.1], [1783.1, 2406.1], [1681.5, 2406.1], [1643.4, 2387.1], [1681.5, 2380.7], [1783.1, 2380.7], [1878.3,
+2380.7], [1903.7, 2380.7], [1929.1, 2380.7], [1973.6, 2380.7], [1999.0, 2380.7], [2024.4, 2380.7], [2075.2, 2380.7], [2176.8, 2380.7], [1618.0, 2361.7], [1681.5, 2355.3], [1783.1, 2355.3], [2075.2, 2355.3], [2176.8, 2355.3], [2176.8, 2329.9], [2075.2, 2329.9], [2024.4, 2329.9], [1999.0, 2329.9], [1973.6, 2329.9], [1783.1, 2329.9], [1681.5, 2329.9], [1618.0, 2310.9], [1681.5, 2304.5], [1783.1, 2304.5], [2075.2, 2304.5], [2176.8, 2304.5], [1643.4, 2285.5], [1681.5, 2279.1], [1783.1, 2279.1], [1878.3, 2279.1], [1903.7, 2279.1], [1929.1, 2279.1], [2075.2, 2279.1], [2176.8, 2279.1], [1618.0, 2260.1], [1681.5, 2253.7], [1783.1, 2253.7], [1821.2, 2253.7], [1922.8, 2253.7], [1973.6, 2253.7], [1999.0, 2253.7], [2024.4, 2253.7], [2075.2, 2253.7], [2176.8, 2253.7], [2176.8, 2228.3], [2075.2, 2228.3], [2024.4, 2228.3], [1999.0, 2228.3], [1973.6, 2228.3], [1922.8, 2228.3], [1821.2, 2228.3], [1783.1, 2228.3], [1757.7, 2228.3], [1732.3, 2228.3], [1706.9, 2228.3], [1681.5, 2228.3], [1656.1, 2228.3], [1618.0, 2209.3], [1821.2, 2202.9], [1922.8, 2202.9], [2075.2, 2202.9], [2176.8, 2202.9], [1643.4, 2183.9], [1681.5, 2177.5], [1783.1, 2177.5], [1821.2, 2177.5], [1922.8, 2177.5], [2075.2, 2177.5], [2176.8, 2177.5], [1618.0, 2158.5], [1681.5, 2152.1], [1783.1,
+2152.1], [1821.2, 2152.1], [1922.8, 2152.1], [1973.6, 2152.1], [1999.0, 2152.1], [2024.4, 2152.1], [2075.2, 2152.1], [2176.8, 2152.1], [2113.3, 1948.9], [2138.7, 1948.9], [1935.5, 1745.7], [1910.1, 1745.7], [1884.7, 1745.7], [1859.3, 1745.7], [1833.9, 1745.7], [1808.5, 1745.7], [1783.1, 1745.7], [1757.7, 1745.7], [1732.3, 1745.7], [1706.9, 1745.7], [1681.5, 1745.7], [1656.1, 1745.7], [1630.7, 1745.7], [1605.3, 1745.7], [1579.9, 1745.7], [1973.6, 1733.0], [1999.0, 1733.0], [2024.4, 1733.0], [2075.2, 1733.0], [2176.8, 1733.0], [2176.8, 1707.6], [2075.2, 1707.6], [1922.8, 1701.3], [1821.2, 1701.3], [1618.0, 1688.6], [1681.5, 1682.2], [1783.1, 1682.2], [2075.2, 1682.2], [2176.8, 1682.2], [1922.8, 1675.9], [1821.2, 1675.9], [1643.4, 1663.2], [1681.5, 1656.8], [1783.1, 1656.8], [1973.6, 1656.8], [1999.0, 1656.8], [2024.4, 1656.8], [2075.2, 1656.8], [2176.8, 1656.8], [1948.2, 1637.8], [1872.0, 1637.8], [1618.0, 1637.8], [1681.5, 1631.4], [1783.1, 1631.4], [1973.6, 1631.4], [1999.0, 1631.4], [2024.4, 1631.4], [2075.2, 1631.4], [2176.8, 1631.4], [2176.8, 1606.0], [2075.2, 1606.0], [1783.1, 1606.0], [1681.5, 1606.0], [1618.0, 1587.0], [1872.0, 1587.0], [1948.2, 1587.0], [2176.8, 1580.6], [2075.2, 1580.6], [1783.1, 1580.6], [1681.5, 1580.6], [1643.4,
+1561.6], [1681.5, 1555.2], [1783.1, 1555.2], [1872.0, 1555.2], [1903.7, 1555.2], [1929.1, 1555.2], [1973.6, 1555.2], [1999.0, 1555.2], [2024.4, 1555.2], [2075.2, 1555.2], [2176.8, 1555.2], [1618.0, 1536.2], [1681.5, 1529.8], [1783.1, 1529.8], [2075.2, 1529.8], [2176.8, 1529.8], [2176.8, 1504.4], [2075.2, 1504.4], [2024.4, 1504.4], [1999.0, 1504.4], [1973.6, 1504.4], [1783.1, 1504.4], [1681.5, 1504.4], [1618.0, 1485.4], [1681.5, 1479.0], [1783.1, 1479.0], [2075.2, 1479.0], [2176.8, 1479.0], [1643.4, 1460.0], [1681.5, 1453.6], [1783.1, 1453.6], [1872.0, 1453.6], [1903.7, 1453.6], [1929.1, 1453.6], [2075.2, 1453.6], [2176.8, 1453.6], [1618.0, 1434.6], [1681.5, 1428.2], [1783.1, 1428.2], [1821.2, 1428.2], [1922.8, 1428.2], [1973.6, 1428.2], [1999.0, 1428.2], [2024.4, 1428.2], [2075.2, 1428.2], [2176.8, 1428.2], [2176.8, 1402.8], [2075.2, 1402.8], [2024.4, 1402.8], [1999.0, 1402.8], [1973.6, 1402.8], [1922.8, 1402.8], [1821.2, 1402.8], [1783.1, 1402.8], [1757.7, 1402.8], [1732.3, 1402.8], [1706.9, 1402.8], [1681.5, 1402.8], [1656.1, 1402.8], [1618.0, 1383.8], [1821.2, 1377.4], [1922.8, 1377.4], [1643.4, 1358.4], [1681.5, 1352.0], [1783.1, 1352.0], [1821.2, 1352.0], [1922.8, 1352.0], [2113.3, 1352.0], [2138.7, 1352.0], [1618.0, 1333.0], [1681.5,
+1326.6], [1783.1, 1326.6], [1821.2, 1326.6], [1922.8, 1326.6], [1973.6, 1326.6], [1999.0, 1326.6], [2024.4, 1326.6], [1935.5, 1288.5], [1910.1, 1288.5], [1884.7, 1288.5], [1859.3, 1288.5], [1833.9, 1288.5], [1808.5, 1288.5], [1783.1, 1288.5], [1757.7, 1288.5], [1732.3, 1288.5], [1706.9, 1288.5], [1681.5, 1288.5], [1656.1, 1288.5], [1630.7, 1288.5], [1605.3, 1288.5], [1579.9, 1288.5], [1973.6, 1275.8], [1999.0, 1275.8], [2024.4, 1275.8], [2075.2, 1275.8], [2176.8, 1275.8], [2176.8, 1250.4], [2075.2, 1250.4], [1922.8, 1244.1], [1821.2, 1244.1], [1618.0, 1231.4], [1681.5, 1225.0], [1783.1, 1225.0], [2075.2, 1225.0], [2176.8, 1225.0], [1922.8, 1218.7], [1821.2, 1218.7], [1643.4, 1206.0], [1681.5, 1199.6], [1783.1, 1199.6], [1973.6, 1199.6], [1999.0, 1199.6], [2024.4, 1199.6], [2075.2, 1199.6], [2176.8, 1199.6], [1948.2, 1180.6], [1872.0, 1180.6], [1618.0, 1180.6], [1681.5, 1174.2], [1783.1, 1174.2], [1973.6, 1174.2], [1999.0, 1174.2], [2024.4, 1174.2], [2075.2, 1174.2], [2176.8, 1174.2], [2176.8, 1148.8], [2075.2, 1148.8], [1783.1, 1148.8], [1681.5, 1148.8], [1618.0, 1129.8], [1872.0, 1129.8], [1948.2, 1129.8], [2176.8, 1123.4], [2075.2, 1123.4], [1783.1, 1123.4], [1681.5, 1123.4], [1643.4, 1104.4], [1681.5, 1098.0], [1783.1, 1098.0], [1878.3,
+1098.0], [1903.7, 1098.0], [1929.1, 1098.0], [1973.6, 1098.0], [1999.0, 1098.0], [2024.4, 1098.0], [2075.2, 1098.0], [2176.8, 1098.0], [1618.0, 1079.0], [1681.5, 1072.6], [1783.1, 1072.6], [2075.2, 1072.6], [2176.8, 1072.6], [2176.8, 1047.2], [2075.2, 1047.2], [2024.4, 1047.2], [1999.0, 1047.2], [1973.6, 1047.2], [1783.1, 1047.2], [1681.5, 1047.2], [1618.0, 1028.2], [1681.5, 1021.8], [1783.1, 1021.8], [2075.2, 1021.8], [2176.8, 1021.8], [1643.4, 1002.8], [1681.5, 996.4], [1783.1, 996.4], [1878.3, 996.4], [1903.7, 996.4], [1929.1, 996.4], [2075.2, 996.4], [2176.8, 996.4], [1618.0, 977.4], [1681.5, 971.0], [1783.1, 971.0], [1821.2, 971.0], [1922.8, 971.0], [1973.6, 971.0], [1999.0, 971.0], [2024.4, 971.0], [2075.2, 971.0], [2176.8, 971.0], [2176.8, 945.6], [2075.2, 945.6], [2024.4, 945.6], [1999.0, 945.6], [1973.6, 945.6], [1922.8, 945.6], [1821.2, 945.6], [1783.1, 945.6], [1757.7, 945.6], [1732.3, 945.6], [1706.9, 945.6], [1681.5, 945.6], [1656.1, 945.6], [1618.0, 926.6], [1821.2, 920.2], [1922.8, 920.2], [1643.4, 901.2], [1681.5, 894.8], [1783.1, 894.8], [1821.2, 894.8], [1922.8, 894.8], [1618.0, 875.8], [1681.5, 869.4], [1783.1, 869.4], [1821.2, 869.4], [1922.8, 869.4], [1973.6, 869.4], [1999.0, 869.4], [2024.4, 869.4], [2449.8, 2037.8], [2475.2, 2037.8], [2500.6, 2037.8], [2526.0, 2037.8], [2551.4, 2037.8], [2576.8, 2037.8], [2602.2, 2037.8], [2627.6, 2037.8], [2672.1, 2037.8], [2697.5, 2037.8], [2722.9, 2037.8], [2748.3, 2037.8], [2773.7, 2037.8], [2799.1, 2037.8], [2824.5, 2037.8], [2849.9, 2037.8], [2926.1, 2075.9], [3002.3, 2075.9], [3053.1, 2075.9], [3103.9, 2075.9], [3167.4, 2075.9], [3243.6, 2075.9], [3294.4, 2075.9], [3345.2, 2075.9], [3383.3, 2088.6], [3459.5, 2088.6], [3497.6, 2088.6], [3599.2, 2088.6], [3650.0, 2088.6], [3675.4, 2088.6], [3700.8, 2088.6], [2849.9, 2114.0], [2824.5, 2114.0], [2799.1, 2114.0], [2773.7, 2114.0], [2748.3, 2114.0], [2722.9, 2114.0], [2697.5, 2114.0], [2672.1, 2114.0], [2627.6, 2114.0], [2602.2, 2114.0], [2576.8, 2114.0], [2551.4, 2114.0], [2526.0, 2114.0], [2500.6, 2114.0], [2475.2, 2114.0], [2449.8, 2114.0], [3497.6, 2126.7], [3599.2, 2126.7], [3459.5, 2139.4], [3383.3, 2139.4], [3345.2, 2152.1], [3294.4, 2152.1], [3243.6, 2152.1], [3167.4, 2152.1], [3103.9,
+2152.1], [3053.1, 2152.1], [3002.3, 2152.1], [2926.1, 2152.1], [2875.3, 2152.1], [2849.9, 2152.1], [2824.5, 2152.1], [2773.7, 2152.1], [2672.1, 2152.1], [2634.0, 2152.1], [2532.4, 2152.1], [2468.9, 2158.5], [2532.4, 2177.5], [2634.0, 2177.5], [2672.1, 2177.5], [2773.7, 2177.5], [2494.3, 2183.9], [2672.1, 2202.9], [2773.7, 2202.9], [2926.1, 2202.9], [3002.3, 2202.9], [3053.1, 2202.9], [3103.9, 2202.9], [3167.4, 2202.9], [3243.6, 2202.9], [3294.4, 2202.9], [3345.2, 2202.9], [2468.9, 2209.3], [3383.3, 2215.6], [3459.5, 2215.6], [3497.6, 2215.6], [3599.2, 2215.6], [3675.4, 2215.6], [3726.2, 2215.6], [2875.3, 2228.3], [2849.9, 2228.3], [2824.5, 2228.3], [2773.7, 2228.3], [2672.1, 2228.3], [2634.0, 2228.3], [2608.6, 2228.3], [2583.2, 2228.3], [2557.8, 2228.3], [2532.4, 2228.3], [2507.0, 2228.3], [3675.4, 2241.0], [3726.2, 2241.0], [3599.2, 2253.7], [3497.6, 2253.7], [2875.3, 2253.7], [2849.9, 2253.7], [2824.5, 2253.7], [2773.7, 2253.7], [2672.1, 2253.7], [2634.0, 2253.7], [2532.4, 2253.7], [2468.9, 2260.1], [3383.3, 2266.4], [3459.5, 2266.4], [3675.4, 2266.4], [3726.2, 2266.4], [3345.2, 2279.1], [3294.4, 2279.1], [3243.6, 2279.1], [3167.4, 2279.1], [3103.9, 2279.1], [3053.1, 2279.1], [3002.3, 2279.1], [2926.1, 2279.1], [2780.0, 2279.1], [2754.6,
+2279.1], [2729.2, 2279.1], [2634.0, 2279.1], [2532.4, 2279.1], [2494.3, 2285.5], [3675.4, 2291.8], [3726.2, 2291.8], [2634.0, 2304.5], [2532.4, 2304.5], [2468.9, 2310.9], [3675.4, 2317.2], [3726.2, 2317.2], [3345.2, 2329.9], [3294.4, 2329.9], [3243.6, 2329.9], [3167.4, 2329.9], [3103.9, 2329.9], [3053.1, 2329.9], [3002.3, 2329.9], [2926.1, 2329.9], [2875.3, 2329.9], [2849.9, 2329.9], [2824.5, 2329.9], [2634.0, 2329.9], [2532.4, 2329.9], [3383.3, 2342.6], [3459.5, 2342.6], [3497.6, 2342.6], [3599.2, 2342.6], [3675.4, 2342.6], [3726.2, 2342.6], [2634.0, 2355.3], [2532.4, 2355.3], [2468.9, 2361.7], [3675.4, 2368.0], [3726.2, 2368.0], [3599.2, 2380.7], [3497.6, 2380.7], [2875.3, 2380.7], [2849.9, 2380.7], [2824.5, 2380.7], [2780.0, 2380.7], [2754.6, 2380.7], [2729.2, 2380.7], [2634.0, 2380.7], [2532.4, 2380.7], [2494.3, 2387.1], [3383.3, 2393.4], [3459.5, 2393.4], [3675.4, 2393.4], [3726.2, 2393.4], [3345.2, 2406.1], [3294.4, 2406.1], [3243.6, 2406.1], [3167.4, 2406.1], [3103.9, 2406.1], [3053.1, 2406.1], [3002.3, 2406.1], [2926.1, 2406.1], [2634.0, 2406.1], [2532.4, 2406.1], [2468.9, 2412.5], [2722.9, 2412.5], [2799.1, 2412.5], [3675.4, 2418.8], [3726.2, 2418.8], [2634.0, 2431.5], [2532.4, 2431.5], [3675.4, 2444.2], [3726.2, 2444.2], [3345.2,
+2456.9], [3294.4, 2456.9], [3243.6, 2456.9], [3167.4, 2456.9], [3103.9, 2456.9], [3053.1, 2456.9], [3002.3, 2456.9], [2926.1, 2456.9], [2875.3, 2456.9], [2849.9, 2456.9], [2824.5, 2456.9], [2634.0, 2456.9], [2532.4, 2456.9], [2468.9, 2463.3], [2722.9, 2463.3], [2799.1, 2463.3], [3383.3, 2469.6], [3459.5, 2469.6], [3497.6, 2469.6], [3599.2, 2469.6], [3675.4, 2469.6], [3726.2, 2469.6], [2875.3, 2482.3], [2849.9, 2482.3], [2824.5, 2482.3], [2634.0, 2482.3], [2532.4, 2482.3], [2494.3, 2488.7], [3675.4, 2495.0], [3726.2, 2495.0], [2773.7, 2501.4], [2672.1, 2501.4], [2532.4, 2507.7], [2634.0, 2507.7], [3497.6, 2507.7], [3599.2, 2507.7], [2468.9, 2514.1], [3383.3, 2520.4], [3459.5, 2520.4], [3675.4, 2520.4], [3726.2, 2520.4], [2773.7, 2526.8], [2672.1, 2526.8], [2926.1, 2533.1], [3002.3, 2533.1], [3053.1, 2533.1], [3103.9, 2533.1], [3167.4, 2533.1], [3243.6, 2533.1], [3294.4, 2533.1], [3345.2, 2533.1], [3675.4, 2545.8], [3726.2, 2545.8], [2875.3, 2558.5], [2849.9, 2558.5], [2824.5, 2558.5], [2430.8, 2571.2], [2456.2, 2571.2], [2481.6, 2571.2], [2507.0, 2571.2], [2532.4, 2571.2], [2557.8, 2571.2], [2583.2, 2571.2], [2608.6, 2571.2], [2634.0, 2571.2], [2659.4, 2571.2], [2684.8, 2571.2], [2710.2, 2571.2], [2735.6, 2571.2], [2761.0, 2571.2], [2786.4,
+2571.2], [3675.4, 2571.2], [3726.2, 2571.2], [3345.2, 2583.9], [3294.4, 2583.9], [3243.6, 2583.9], [3167.4, 2583.9], [3103.9, 2583.9], [3053.1, 2583.9], [3002.3, 2583.9], [2926.1, 2583.9], [3383.3, 2596.6], [3459.5, 2596.6], [3497.6, 2596.6], [3599.2, 2596.6], [3675.4, 2596.6], [3726.2, 2596.6], [2875.3, 2609.3], [2849.9, 2609.3], [2824.5, 2609.3], [2773.7, 2609.3], [2672.1, 2609.3], [2634.0, 2609.3], [2532.4, 2609.3], [2468.9, 2615.7], [3675.4, 2622.0], [3726.2, 2622.0], [3599.2, 2634.7], [3497.6, 2634.7], [2773.7, 2634.7], [2672.1, 2634.7], [2634.0, 2634.7], [2532.4, 2634.7], [2494.3, 2641.1], [3383.3, 2647.4], [3459.5, 2647.4], [3675.4, 2647.4], [3726.2, 2647.4], [3345.2, 2660.1], [3294.4, 2660.1], [3243.6, 2660.1], [3167.4, 2660.1], [3103.9, 2660.1], [3053.1, 2660.1], [3002.3, 2660.1], [2926.1, 2660.1], [2773.7, 2660.1], [2672.1, 2660.1], [2468.9, 2666.5], [3675.4, 2672.8], [3726.2, 2672.8], [2634.0, 2679.2], [2608.6, 2679.2], [2583.2, 2679.2], [2507.0, 2685.5], [2532.4, 2685.5], [2557.8, 2685.5], [2672.1, 2685.5], [2773.7, 2685.5], [2824.5, 2685.5], [2849.9, 2685.5], [2875.3, 2685.5], [3675.4, 2698.2], [3726.2, 2698.2], [3345.2, 2710.9], [3294.4, 2710.9], [3243.6, 2710.9], [3167.4, 2710.9], [3103.9, 2710.9], [3053.1, 2710.9], [3002.3,
+2710.9], [2926.1, 2710.9], [2875.3, 2710.9], [2849.9, 2710.9], [2824.5, 2710.9], [2773.7, 2710.9], [2672.1, 2710.9], [2634.0, 2710.9], [2532.4, 2710.9], [2468.9, 2717.3], [3383.3, 2723.6], [3459.5, 2723.6], [3497.6, 2723.6], [3599.2, 2723.6], [3675.4, 2723.6], [3726.2, 2723.6], [2780.0, 2736.3], [2754.6, 2736.3], [2729.2, 2736.3], [2634.0, 2736.3], [2532.4, 2736.3], [2494.3, 2742.7], [3675.4, 2749.0], [3726.2, 2749.0], [3599.2, 2761.7], [3497.6, 2761.7], [2634.0, 2761.7], [2532.4, 2761.7], [2468.9, 2768.1], [3383.3, 2774.4], [3459.5, 2774.4], [3675.4, 2774.4], [3726.2, 2774.4], [3345.2, 2787.1], [3294.4, 2787.1], [3243.6, 2787.1], [3167.4, 2787.1], [3103.9, 2787.1], [3053.1, 2787.1], [3002.3, 2787.1], [2926.1, 2787.1], [2875.3, 2787.1], [2849.9, 2787.1], [2824.5, 2787.1], [2634.0, 2787.1], [2532.4, 2787.1], [3675.4, 2799.8], [3726.2, 2799.8], [2634.0, 2812.5], [2532.4, 2812.5], [2468.9, 2818.9], [3675.4, 2825.2], [3726.2, 2825.2], [3345.2, 2837.9], [3294.4, 2837.9], [3243.6, 2837.9], [3167.4, 2837.9], [3103.9, 2837.9], [3053.1, 2837.9], [3002.3, 2837.9], [2926.1, 2837.9], [2875.3, 2837.9], [2849.9, 2837.9], [2824.5, 2837.9], [2780.0, 2837.9], [2754.6, 2837.9], [2729.2, 2837.9], [2634.0, 2837.9], [2532.4, 2837.9], [2494.3, 2844.3], [3383.3,
+2850.6], [3459.5, 2850.6], [3497.6, 2850.6], [3599.2, 2850.6], [3675.4, 2850.6], [3726.2, 2850.6], [2634.0, 2863.3], [2532.4, 2863.3], [2468.9, 2869.7], [2722.9, 2869.7], [2799.1, 2869.7], [3675.4, 2876.0], [3726.2, 2876.0], [3599.2, 2888.7], [3497.6, 2888.7], [2634.0, 2888.7], [2532.4, 2888.7], [3383.3, 2901.4], [3459.5, 2901.4], [3675.4, 2901.4], [3726.2, 2901.4], [3345.2, 2914.1], [3294.4, 2914.1], [3243.6, 2914.1], [3167.4, 2914.1], [3103.9, 2914.1], [3053.1, 2914.1], [3002.3, 2914.1], [2926.1, 2914.1], [2875.3, 2914.1], [2849.9, 2914.1], [2824.5, 2914.1], [2634.0, 2914.1], [2532.4, 2914.1], [2468.9, 2920.5], [2722.9, 2920.5], [2799.1, 2920.5], [3675.4, 2926.8], [3726.2, 2926.8], [2875.3, 2939.5], [2849.9, 2939.5], [2824.5, 2939.5], [2634.0, 2939.5], [2532.4, 2939.5], [2494.3, 2945.9], [3675.4, 2952.2], [3726.2, 2952.2], [2773.7, 2958.6], [2672.1, 2958.6], [2532.4, 2964.9], [2634.0, 2964.9], [2926.1, 2964.9], [3002.3, 2964.9], [3053.1, 2964.9], [3103.9, 2964.9], [3167.4, 2964.9], [3243.6, 2964.9], [3294.4, 2964.9], [3345.2, 2964.9], [2468.9, 2971.3], [3383.3, 2977.6], [3459.5, 2977.6], [3497.6, 2977.6], [3599.2, 2977.6], [3675.4, 2977.6], [3726.2, 2977.6], [2773.7, 2984.0], [2672.1, 2984.0], [3675.4, 3003.0], [3726.2, 3003.0], [3599.2,
+3015.7], [3497.6, 3015.7], [2875.3, 3015.7], [2849.9, 3015.7], [2824.5, 3015.7], [2430.8, 3028.4], [2456.2, 3028.4], [2481.6, 3028.4], [2507.0, 3028.4], [2532.4, 3028.4], [2557.8, 3028.4], [2583.2, 3028.4], [2608.6, 3028.4], [2634.0, 3028.4], [2659.4, 3028.4], [2684.8, 3028.4], [2710.2, 3028.4], [2735.6, 3028.4], [2761.0, 3028.4], [2786.4, 3028.4], [3383.3, 3028.4], [3459.5, 3028.4], [3345.2, 3041.1], [3294.4, 3041.1], [3243.6, 3041.1], [3167.4, 3041.1], [3103.9, 3041.1], [3053.1, 3041.1], [3002.3, 3041.1], [2926.1, 3041.1], [3535.7, 3066.5], [3561.1, 3066.5], [3586.5, 3066.5], [3586.5, 2012.4], [3535.7, 2012.4], [3484.9, 2012.4], [3408.7, 2012.4], [3345.2, 2012.4], [3294.4, 2012.4], [3243.6, 2012.4], [3167.4, 2012.4], [3103.9, 2012.4], [3053.1, 2012.4], [3002.3, 2012.4], [2926.1, 2012.4], [2926.1, 1936.2], [3002.3, 1936.2], [3053.1, 1936.2], [3103.9, 1936.2], [3167.4, 1936.2], [3243.6, 1936.2], [3294.4, 1936.2], [3345.2, 1936.2], [3408.7, 1936.2], [3484.9, 1936.2], [3535.7, 1936.2], [3586.5, 1936.2], [3446.8, 1796.5], [3421.4, 1796.5], [3396.0, 1796.5], [2786.4, 1745.7], [2761.0, 1745.7], [2735.6, 1745.7], [2710.2, 1745.7], [2684.8, 1745.7], [2659.4, 1745.7], [2634.0, 1745.7], [2608.6, 1745.7], [2583.2, 1745.7], [2557.8, 1745.7], [2532.4,
+1745.7], [2507.0, 1745.7], [2481.6, 1745.7], [2456.2, 1745.7], [2430.8, 1745.7], [2824.5, 1733.0], [2849.9, 1733.0], [2875.3, 1733.0], [2773.7, 1701.3], [2672.1, 1701.3], [2468.9, 1688.6], [2532.4, 1682.2], [2634.0, 1682.2], [3249.9, 1682.2], [3351.5, 1682.2], [2773.7, 1675.9], [2672.1, 1675.9], [2494.3, 1663.2], [2532.4, 1656.8], [2634.0, 1656.8], [2824.5, 1656.8], [2849.9, 1656.8], [2875.3, 1656.8], [3249.9, 1656.8], [3351.5, 1656.8], [2799.1, 1637.8], [2722.9, 1637.8], [2468.9, 1637.8], [2532.4, 1631.4], [2634.0, 1631.4], [2824.5, 1631.4], [2849.9, 1631.4], [2875.3, 1631.4], [3249.9, 1631.4], [3351.5, 1631.4], [3351.5, 1606.0], [3249.9, 1606.0], [2634.0, 1606.0], [2532.4, 1606.0], [2468.9, 1587.0], [2722.9, 1587.0], [2799.1, 1587.0], [2532.4, 1580.6], [2634.0, 1580.6], [3249.9, 1580.6], [3351.5, 1580.6], [2494.3, 1561.6], [2532.4, 1555.2], [2634.0, 1555.2], [2729.2, 1555.2], [2754.6, 1555.2], [2780.0, 1555.2], [2824.5, 1555.2], [2849.9, 1555.2], [2875.3, 1555.2], [2468.9, 1536.2], [2532.4, 1529.8], [2634.0, 1529.8], [2532.4, 1504.4], [2634.0, 1504.4], [2824.5, 1504.4], [2849.9, 1504.4], [2875.3, 1504.4], [2468.9, 1485.4], [2532.4, 1479.0], [2634.0, 1479.0], [2964.2, 1479.0], [2494.3, 1460.0], [2532.4, 1453.6], [2634.0, 1453.6], [2729.2,
+1453.6], [2754.6, 1453.6], [2780.0, 1453.6], [2468.9, 1434.6], [2532.4, 1428.2], [2634.0, 1428.2], [2672.1, 1428.2], [2773.7, 1428.2], [2824.5, 1428.2], [2849.9, 1428.2], [2875.3, 1428.2], [2875.3, 1402.8], [2849.9, 1402.8], [2824.5, 1402.8], [2773.7, 1402.8], [2672.1, 1402.8], [2634.0, 1402.8], [2608.6, 1402.8], [2583.2, 1402.8], [2557.8, 1402.8], [2532.4, 1402.8], [2507.0, 1402.8], [2468.9, 1383.8], [2672.1, 1377.4], [2773.7, 1377.4], [2964.2, 1377.4], [2494.3, 1358.4], [2532.4, 1352.0], [2634.0, 1352.0], [2672.1, 1352.0], [2773.7, 1352.0], [2468.9, 1333.0], [2532.4, 1326.6], [2634.0, 1326.6], [2672.1, 1326.6], [2773.7, 1326.6], [2824.5, 1326.6], [2849.9, 1326.6], [2875.3, 1326.6], [2786.4, 1288.5], [2761.0, 1288.5], [2735.6, 1288.5], [2710.2, 1288.5], [2684.8, 1288.5], [2659.4, 1288.5], [2634.0, 1288.5], [2608.6, 1288.5], [2583.2, 1288.5], [2557.8, 1288.5], [2532.4, 1288.5], [2507.0, 1288.5], [2481.6, 1288.5], [2456.2, 1288.5], [2430.8, 1288.5], [2824.5, 1275.8], [2849.9, 1275.8], [2875.3, 1275.8], [2773.7, 1244.1], [2672.1, 1244.1], [2468.9, 1231.4], [2532.4, 1225.0], [2634.0, 1225.0], [2672.1, 1218.7], [2773.7, 1218.7], [2494.3, 1206.0], [2532.4, 1199.6], [2634.0, 1199.6], [2824.5, 1199.6], [2849.9, 1199.6], [2875.3, 1199.6], [2799.1,
+1180.6], [2722.9, 1180.6], [2468.9, 1180.6], [2532.4, 1174.2], [2634.0, 1174.2], [2824.5, 1174.2], [2849.9, 1174.2], [2875.3, 1174.2], [2634.0, 1148.8], [2532.4, 1148.8], [2468.9, 1129.8], [2722.9, 1129.8], [2799.1, 1129.8], [2634.0, 1123.4], [2532.4, 1123.4], [2494.3, 1104.4], [2532.4, 1098.0], [2634.0, 1098.0], [2729.2, 1098.0], [2754.6, 1098.0], [2780.0, 1098.0], [2824.5, 1098.0], [2849.9, 1098.0], [2875.3, 1098.0], [2468.9, 1079.0], [2532.4, 1072.6], [2634.0, 1072.6], [2919.7, 1066.3], [3021.3, 1066.3], [3091.2, 1066.3], [3192.8, 1066.3], [3243.6, 1066.3], [3345.2, 1066.3], [2875.3, 1047.2], [2849.9, 1047.2], [2824.5, 1047.2], [2634.0, 1047.2], [2532.4, 1047.2], [2919.7, 1040.9], [3021.3, 1040.9], [3091.2, 1040.9], [3192.8, 1040.9], [3243.6, 1040.9], [3345.2, 1040.9], [2468.9, 1028.2], [2532.4, 1021.8], [2634.0, 1021.8], [2919.7, 1015.5], [3021.3, 1015.5], [3091.2, 1015.5], [3192.8, 1015.5], [3243.6, 1015.5], [3345.2, 1015.5], [2494.3, 1002.8], [2532.4, 996.4],
+[2634.0, 996.4], [2729.2, 996.4], [2754.6, 996.4], [2780.0, 996.4], [2919.7, 990.1], [3021.3, 990.1], [2468.9, 977.4], [2532.4, 971.0], [2634.0, 971.0], [2672.1, 971.0], [2773.7, 971.0], [2824.5, 971.0], [2849.9, 971.0], [2875.3, 971.0], [2875.3, 945.6], [2849.9, 945.6], [2824.5, 945.6], [2773.7, 945.6], [2672.1, 945.6], [2634.0, 945.6], [2608.6, 945.6], [2583.2, 945.6], [2557.8, 945.6], [2532.4, 945.6], [2507.0, 945.6], [2468.9, 926.6], [2672.1, 920.2], [2773.7, 920.2], [2494.3, 901.2], [2532.4, 894.8], [2634.0, 894.8], [2672.1, 894.8], [2773.7, 894.8], [2468.9, 875.8], [2532.4, 869.4], [2634.0, 869.4], [2672.1, 869.4], [2773.7, 869.4], [2824.5, 869.4], [2849.9, 869.4], [2875.3, 869.4], [3091.2, 958.3], [3116.6, 958.3], [3142.0, 958.3], [3167.4, 958.3], [3192.8, 958.3], [3218.2, 958.3], [3243.6, 958.3], [3269.0, 958.3], [3294.4, 958.3], [3319.8, 958.3], [3319.8, 882.1], [3294.4, 882.1], [3269.0, 882.1], [3243.6, 882.1], [3218.2, 882.1], [3192.8, 882.1], [3167.4, 882.1], [3142.0, 882.1], [3116.6, 882.1], [3091.2, 882.1], [3116.6, 844.0], [3218.2, 844.0], [3535.7, 831.3], [3561.1, 831.3], [3586.5, 831.3], [3650.0, 882.1], [3675.4, 882.1], [3726.2, 882.1], [3726.2, 907.5], [3675.4, 907.5], [3650.0, 907.5], [3650.0, 932.9], [3675.4, 932.9], [3726.2, 932.9], [3726.2, 958.3], [3675.4, 958.3], [3650.0, 958.3], [3650.0, 983.7], [3675.4, 983.7], [3726.2, 983.7], [3726.2, 1009.1], [3675.4, 1009.1], [3650.0, 1009.1], [3650.0, 1034.5], [3675.4, 1034.5], [3726.2, 1034.5], [3726.2, 1059.9], [3675.4, 1059.9], [3650.0, 1059.9], [3650.0, 1085.3], [3675.4, 1085.3], [3726.2, 1085.3], [3726.2, 1110.7], [3675.4, 1110.7], [3650.0, 1110.7], [3650.0, 1136.1], [3675.4, 1136.1], [3726.2, 1136.1], [3726.2, 1161.5], [3675.4, 1161.5], [3650.0, 1161.5], [3650.0, 1186.9], [3675.4, 1186.9], [3726.2, 1186.9], [3586.5, 1199.6], [3561.1, 1199.6], [3650.0, 1212.3], [3675.4, 1212.3], [3726.2, 1212.3], [3726.2, 1237.7], [3675.4, 1237.7], [3650.0, 1237.7], [3650.0, 1263.1], [3675.4, 1263.1], [3726.2, 1263.1], [3726.2, 1288.5], [3675.4, 1288.5], [3650.0, 1288.5], [3586.5, 1301.2], [3561.1, 1301.2], [3650.0, 1313.9], [3675.4, 1313.9], [3726.2, 1313.9], [3726.2, 1339.3], [3675.4, 1339.3], [3650.0, 1339.3], [3650.0, 1364.7], [3675.4, 1364.7], [3726.2, 1364.7], [3726.2, 1390.1], [3675.4, 1390.1], [3650.0, 1390.1], [3650.0, 1415.5], [3675.4, 1415.5], [3726.2, 1415.5], [3726.2, 1440.9], [3675.4, 1440.9], [3650.0, 1440.9], [3650.0, 1466.3], [3675.4, 1466.3], [3726.2, 1466.3], [3726.2, 1491.7], [3675.4, 1491.7], [3650.0,
+1491.7], [3650.0, 1517.1], [3675.4, 1517.1], [3726.2, 1517.1], [3726.2, 1542.5], [3675.4, 1542.5], [3650.0, 1542.5], [3573.8, 1548.9], [3548.4, 1548.9], [3650.0, 1567.9], [3675.4, 1567.9], [3726.2, 1567.9], [3726.2, 1593.3], [3675.4, 1593.3], [3650.0, 1593.3], [3650.0, 1618.7], [3675.4, 1618.7], [3726.2, 1618.7], [3726.2, 1644.1], [3675.4, 1644.1], [3650.0, 1644.1], [3726.2, 1669.5], [3675.4, 1669.5], [3650.0, 1669.5], [3599.2, 1669.5], [3497.6, 1669.5], [3497.6, 1694.9], [3599.2, 1694.9], [3599.2, 1720.3], [3497.6, 1720.3]]
\ No newline at end of file