Skip to content

Instantly share code, notes, and snippets.

@luizcartolano2
Last active November 13, 2019 18:44
Show Gist options
  • Save luizcartolano2/dc3095b8f5930d8a2572a8be6b8f4920 to your computer and use it in GitHub Desktop.
Save luizcartolano2/dc3095b8f5930d8a2572a8be6b8f4920 to your computer and use it in GitHub Desktop.
Código dos testes feitos no Projeto de MC906
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Buscas não supervisionadas"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Imports"
]
},
{
"cell_type": "code",
"execution_count": 197,
"metadata": {},
"outputs": [],
"source": [
"# imports necessarios\n",
"from search import *\n",
"from notebook import psource, heatmap, gaussian_kernel, show_map, final_path_colors, display_visual, plot_NQueens\n",
"import networkx as nx\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib.ticker import MultipleLocator\n",
"import time\n",
"from statistics import mean, stdev\n",
"from math import sqrt\n",
"from memory_profiler import memory_usage\n",
"import matplotlib.pyplot as plt\n",
"import random\n",
"import heapq\n",
"import math\n",
"import sys\n",
"from collections import defaultdict, deque, Counter\n",
"from itertools import combinations\n",
"\n",
"\n",
"# Needed to hide warnings in the matplotlib sections\n",
"import warnings\n",
"warnings.filterwarnings(\"ignore\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Criação do mapa e do grafo"
]
},
{
"cell_type": "code",
"execution_count": 198,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"# make the dict where the key is associated with his neighbors\n",
"mapa = {}\n",
"for i in range(0,60):\n",
" for j in range(0,60):\n",
" mapa[(i,j)] = {(i+1,j):1, (i-1,j):1, (i,j+1):1, (i,j-1):1,}\n",
" #(i+1,j+1):sqrt(2), (i-1,j-1):sqrt(2), (i-1,j+1):sqrt(2), (i+1,j-1):sqrt(2),}\n",
" \n",
"grafo = UndirectedGraph(mapa)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Modelagem da classe problema"
]
},
{
"cell_type": "code",
"execution_count": 199,
"metadata": {},
"outputs": [],
"source": [
"class RobotProblem(Problem):\n",
"\n",
" \"\"\"Problema para encontrar o goal saindo de uma posicao (x,y) com um robo.\"\"\"\n",
"\n",
" def __init__(self, initial, goal, mapa, graph):\n",
" Problem.__init__(self, initial, goal)\n",
" self.mapa = mapa\n",
" self.graph = graph\n",
"\n",
" def actions(self, actual_pos):\n",
" \"\"\"The actions at a graph node are just its neighbors.\"\"\"\n",
" neighbors = list(self.graph.get(actual_pos).keys())\n",
" valid_actions = []\n",
" for act in neighbors:\n",
" if act[0] == 0 or act[0] == 60 or act[1] == 0 or act[1] == 60:\n",
" i = 1\n",
" elif (act[0] == 20 and (0<= act[1] <= 40)):\n",
" i = 2\n",
" elif (act[0] == 40 and (20<= act[1] <= 60)):\n",
" i = 3\n",
" else:\n",
" valid_actions.append(act)\n",
" \n",
" return valid_actions\n",
"\n",
" def result(self, state, action):\n",
" \"\"\"The result of going to a neighbor is just that neighbor.\"\"\"\n",
" return action\n",
"\n",
" def path_cost(self, cost_so_far, state1, action, state2):\n",
" return cost_so_far + 1\n",
"\n",
" def goal_test(self, state):\n",
" if state[0] == self.goal[0] and state[1] == self.goal[1]:\n",
" return True\n",
" else:\n",
" return False\n",
" def find_min_edge(self):\n",
" \"\"\"Find minimum value of edges.\"\"\"\n",
" m = infinity\n",
" for d in self.graph.graph_dict.values():\n",
" local_min = min(d.values())\n",
" m = min(m, local_min)\n",
" \n",
" def h(self, node):\n",
" \"\"\"h function is straight-line distance from a node's state to goal.\"\"\"\n",
" locs = getattr(self.graph, 'locations', None)\n",
" if locs:\n",
" if type(node) is str:\n",
" return int(distance(locs[node], locs[self.goal]))\n",
"\n",
" return int(distance(locs[node.state], locs[self.goal]))\n",
" else:\n",
" return infinity"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Busca nao supervisionada: DFS - Teste 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculo do custo da busca e o caminho percorrido"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"None\n"
]
}
],
"source": [
"init_pos = (10,10)\n",
"goal_pos = (50,50)\n",
"\n",
"robot_problem = RobotProblem(init_pos, goal_pos, mapa, grafo)\n",
"node = depth_first_graph_search(robot_problem)\n",
"print(node)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"list_nodes = []\n",
"try:\n",
" for n in node.path():\n",
" list_nodes.append(n.state)\n",
"except:\n",
" pass"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"x = []\n",
"y = []\n",
"for nod in list_nodes:\n",
" x.append(nod[0])\n",
" y.append(nod[1])"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"plt.xlim(0,60)\n",
"plt.ylim(0,60)\n",
"plt.title('Caminho percorrido pelo robo na busca DFS')\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(0, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(60, 0), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(60,0), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(0,60), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,0), xycoords='data',\n",
" xytext=(20, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,40), xycoords='data',\n",
" xytext=(0, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.scatter(x,y)\n",
"plt.scatter(10,10,color='r')\n",
"plt.scatter(50,50,color='r')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Busca nao supervisionada: BFS - Teste 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculo do custo da busca e o caminho percorrido"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"None\n"
]
}
],
"source": [
"init_pos = (10,10)\n",
"goal_pos = (50,50)\n",
"\n",
"robot_problem = RobotProblem(init_pos, goal_pos, mapa, grafo)\n",
"node = breadth_first_graph_search(robot_problem)\n",
"print(node.path_cost)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"list_nodes = []\n",
"try:\n",
" for n in node.path():\n",
" list_nodes.append(n.state)\n",
"except:\n",
" pass"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"x = []\n",
"y = []\n",
"for nod in list_nodes:\n",
" x.append(nod[0])\n",
" y.append(nod[1])"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"plt.xlim(0,60)\n",
"plt.ylim(0,60)\n",
"plt.title('Caminho percorrido pelo robo na busca DFS')\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(0, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(60, 0), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(60,0), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(0,60), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,0), xycoords='data',\n",
" xytext=(20, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,40), xycoords='data',\n",
" xytext=(0, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.scatter(x,y)\n",
"plt.scatter(10,10,color='r')\n",
"plt.scatter(50,50,color='r')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Busca nao supervisionada: BFS - Teste 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculo do custo da busca e o caminho percorrido"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<Node (50, 50)>\n"
]
}
],
"source": [
"init_pos = (10,10)\n",
"goal_pos = (50,50)\n",
"\n",
"robot_problem = RobotProblem(init_pos, goal_pos, mapa, grafo)\n",
"node = breadth_first_graph_search(robot_problem)\n",
"print(node)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"list_nodes = []\n",
"try:\n",
" for n in node.path():\n",
" list_nodes.append(n.state)\n",
"except:\n",
" pass\n",
"x = []\n",
"y = []\n",
"for nod in list_nodes:\n",
" x.append(nod[0])\n",
" y.append(nod[1])"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"plt.xlim(0,60)\n",
"plt.ylim(0,60)\n",
"plt.title('Caminho percorrido pelo robo na busca BFS')\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(0, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(60, 0), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(60,0), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(0,60), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,0), xycoords='data',\n",
" xytext=(20, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,40), xycoords='data',\n",
" xytext=(19, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(17,40), xycoords='data',\n",
" xytext=(0, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"\n",
"plt.scatter(x,y)\n",
"plt.scatter(10,10,color='r')\n",
"plt.scatter(50,50,color='r')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Busca nao supervisionada: DFS - Teste 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculo do custo da busca e o caminho percorrido"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"566\n"
]
}
],
"source": [
"init_pos = (10,10)\n",
"goal_pos = (50,50)\n",
"\n",
"robot_problem = RobotProblem(init_pos, goal_pos, mapa, grafo)\n",
"node = depth_first_graph_search(robot_problem)\n",
"print(node.path_cost)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [],
"source": [
"list_nodes = []\n",
"try:\n",
" for n in node.path():\n",
" list_nodes.append(n.state)\n",
"except:\n",
" pass"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [],
"source": [
"x = []\n",
"y = []\n",
"for nod in list_nodes:\n",
" x.append(nod[0])\n",
" y.append(nod[1])"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"plt.xlim(0,60)\n",
"plt.ylim(0,60)\n",
"plt.title('Caminho percorrido pelo robo na busca DFS')\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(0, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(60, 0), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(60,0), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(0,60), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,0), xycoords='data',\n",
" xytext=(20, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"\n",
"plt.scatter(x,y)\n",
"plt.scatter(10,10,color='r')\n",
"plt.scatter(50,50,color='r')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Busca nao supervisionada: DFS - Teste 3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculo do custo da busca e o caminho percorrido"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"194\n"
]
}
],
"source": [
"init_pos = (10,10)\n",
"goal_pos = (50,50)\n",
"\n",
"robot_problem = RobotProblem(init_pos, goal_pos, mapa, grafo)\n",
"node = depth_first_graph_search(robot_problem)\n",
"print(node.path_cost)"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [],
"source": [
"list_nodes = []\n",
"try:\n",
" for n in node.path():\n",
" list_nodes.append(n.state)\n",
"except:\n",
" pass"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [],
"source": [
"x = []\n",
"y = []\n",
"for nod in list_nodes:\n",
" x.append(nod[0])\n",
" y.append(nod[1])"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"plt.xlim(0,60)\n",
"plt.ylim(0,60)\n",
"plt.title('Caminho percorrido pelo robo na busca DFS')\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(0, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(60, 0), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(60,0), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(0,60), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,0), xycoords='data',\n",
" xytext=(20, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(40,20), xycoords='data',\n",
" xytext=(40, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,0), xycoords='data',\n",
" xytext=(20, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.scatter(x,y)\n",
"plt.scatter(10,10,color='r')\n",
"plt.scatter(50,50,color='r')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Busca nao supervisionada: BFS - Teste 3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculo do custo da busca e o caminho percorrido"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"84\n"
]
}
],
"source": [
"init_pos = (10,10)\n",
"goal_pos = (50,50)\n",
"\n",
"robot_problem = RobotProblem(init_pos, goal_pos, mapa, grafo)\n",
"node = breadth_first_graph_search(robot_problem)\n",
"print(node.path_cost)"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [],
"source": [
"list_nodes = []\n",
"try:\n",
" for n in node.path():\n",
" list_nodes.append(n.state)\n",
"except:\n",
" pass"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [],
"source": [
"x = []\n",
"y = []\n",
"for nod in list_nodes:\n",
" x.append(nod[0])\n",
" y.append(nod[1])"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"plt.xlim(0,60)\n",
"plt.ylim(0,60)\n",
"plt.title('Caminho percorrido pelo robo na busca BFS')\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(0, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(60, 0), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(60,0), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(0,60), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,0), xycoords='data',\n",
" xytext=(20, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(40,20), xycoords='data',\n",
" xytext=(40, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,0), xycoords='data',\n",
" xytext=(20, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.scatter(x,y)\n",
"plt.scatter(10,10,color='r')\n",
"plt.scatter(50,50,color='r')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Busca nao supervisionada: Uniform Cost Search"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculo do custo da busca e o caminho percorrido"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"84\n"
]
}
],
"source": [
"init_pos = (10,10)\n",
"goal_pos = (50,50)\n",
"\n",
"robot_problem = RobotProblem(init_pos, goal_pos, mapa, grafo)\n",
"node = uniform_cost_search(robot_problem)\n",
"print(node.path_cost)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"list_nodes = []\n",
"try:\n",
" for n in node.path():\n",
" list_nodes.append(n.state)\n",
"except:\n",
" pass"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"x = []\n",
"y = []\n",
"for nod in list_nodes:\n",
" x.append(nod[0])\n",
" y.append(nod[1])"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"plt.xlim(0,60)\n",
"plt.ylim(0,60)\n",
"plt.title('Caminho percorrido pelo robo na busca BFS')\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(0, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(60, 0), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(60,0), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(0,60), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,0), xycoords='data',\n",
" xytext=(20, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(40,20), xycoords='data',\n",
" xytext=(40, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,0), xycoords='data',\n",
" xytext=(20, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.scatter(x,y)\n",
"plt.scatter(10,10,color='r')\n",
"plt.scatter(50,50,color='r')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Busca nao supervisionada: Best First Search"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculo do custo da busca e o caminho percorrido"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"136\n"
]
}
],
"source": [
"init_pos = (10,10)\n",
"goal_pos = (50,50)\n",
"\n",
"robot_problem = RobotProblem(init_pos, goal_pos, mapa, grafo)\n",
"node = best_first_graph_search(robot_problem, robot_problem.h)\n",
"print(node.path_cost)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"list_nodes = []\n",
"try:\n",
" for n in node.path():\n",
" list_nodes.append(n.state)\n",
"except:\n",
" pass"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"x = []\n",
"y = []\n",
"for nod in list_nodes:\n",
" x.append(nod[0])\n",
" y.append(nod[1])"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"plt.xlim(0,60)\n",
"plt.ylim(0,60)\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(0, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(60, 0), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(60,0), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(0,60), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,0), xycoords='data',\n",
" xytext=(20, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(40,20), xycoords='data',\n",
" xytext=(40, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,0), xycoords='data',\n",
" xytext=(20, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.scatter(x,y)\n",
"plt.scatter(10,10,color='r')\n",
"plt.scatter(50,50,color='r')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Marcando todos os nós visitados pelos algoritmos"
]
},
{
"cell_type": "code",
"execution_count": 179,
"metadata": {},
"outputs": [],
"source": [
"# class Node:\n",
"# \"A Node in a search tree.\"\n",
"# def __init__(self, state, parent=None, action=None, path_cost=0):\n",
"# self.__dict__.update(state=state, parent=parent, action=action, path_cost=path_cost)\n",
"\n",
"# def __repr__(self): return '<{}>'.format(self.state)\n",
"# def __len__(self): return 0 if self.parent is None else (1 + len(self.parent))\n",
"# def __lt__(self, other): return self.path_cost < other.path_cost"
]
},
{
"cell_type": "code",
"execution_count": 180,
"metadata": {},
"outputs": [],
"source": [
"FIFOQueue = deque\n",
"\n",
"LIFOQueue = list\n",
"\n",
"class PriorityQueue:\n",
" \"\"\"A queue in which the item with minimum f(item) is always popped first.\"\"\"\n",
"\n",
" def __init__(self, items=(), key=lambda x: x): \n",
" self.key = key\n",
" self.items = [] # a heap of (score, item) pairs\n",
" for item in items:\n",
" self.add(item)\n",
" \n",
" def add(self, item):\n",
" \"\"\"Add item to the queuez.\"\"\"\n",
" pair = (self.key(item), item)\n",
" heapq.heappush(self.items, pair)\n",
"\n",
" def pop(self):\n",
" \"\"\"Pop and return the item with min f(item) value.\"\"\"\n",
" return heapq.heappop(self.items)[1]\n",
" \n",
" def top(self): return self.items[0][1]\n",
"\n",
" def __len__(self): return len(self.items)"
]
},
{
"cell_type": "code",
"execution_count": 181,
"metadata": {},
"outputs": [],
"source": [
"def expand(problem, node):\n",
" \"Expand a node, generating the children nodes.\"\n",
" s = node.state\n",
" for action in problem.actions(s):\n",
" s1 = problem.result(s, action)\n",
" cost = node.path_cost + 1\n",
" yield Node(s1, node, action, cost)\n",
" \n",
"\n",
"def path_actions(node):\n",
" \"The sequence of actions to get to this node.\"\n",
" if node.parent is None:\n",
" return [] \n",
" return path_actions(node.parent) + [node.action]\n",
"\n",
"\n",
"def path_states(node):\n",
" \"The sequence of states to get to this node.\"\n",
" if node in (cutoff, failure, None): \n",
" return []\n",
" return path_states(node.parent) + [node.state]\n",
"\n",
"def best_first_search(problem, f):\n",
" \"Search nodes with minimum f(node) value first; make `reached` global.\"\n",
" global reached # <<<<<<<<<<< Only change here\n",
" frontier = PriorityQueue([Node(problem.initial)], key=f)\n",
" reached = {}\n",
" while frontier:\n",
" node = frontier.pop()\n",
" if problem.goal_test(node.state):\n",
" return node\n",
" for child in expand(problem, node):\n",
" s = child.state\n",
" if s not in reached or child.path_cost < reached[s].path_cost:\n",
" reached[s] = child\n",
" frontier.add(child)\n",
" return failure"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Busca nao supervisionada: DFS - Printa todos os nos visitados"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculo do custo da busca e o caminho percorrido"
]
},
{
"cell_type": "code",
"execution_count": 185,
"metadata": {},
"outputs": [],
"source": [
"init_pos = (10,10)\n",
"goal_pos = (50,50)\n",
"\n",
"robot_problem = RobotProblem(init_pos, goal_pos, mapa, grafo)\n",
"# node, l = breadth_first_graph_search_mod(robot_problem)\n",
"node = best_first_search(robot_problem,f=lambda n: -len(n))\n",
"# node = depth_first_graph_search(robot_problem)"
]
},
{
"cell_type": "code",
"execution_count": 186,
"metadata": {
"scrolled": false
},
"outputs": [],
"source": [
"x_reach = []\n",
"y_reach = []\n",
"for nod in list(reached):\n",
" x_reach.append(nod[0])\n",
" y_reach.append(nod[1])"
]
},
{
"cell_type": "code",
"execution_count": 177,
"metadata": {},
"outputs": [],
"source": [
"list_nodes = []\n",
"try:\n",
" for n in node.path():\n",
" list_nodes.append(n.state)\n",
"except:\n",
" pass"
]
},
{
"cell_type": "code",
"execution_count": 178,
"metadata": {},
"outputs": [],
"source": [
"x = []\n",
"y = []\n",
"for nod in list_nodes:\n",
" x.append(nod[0])\n",
" y.append(nod[1])"
]
},
{
"cell_type": "code",
"execution_count": 187,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJztnX2UXXV57z/PzGSSTBJIBiNE8jIoiFAq0SJi6e2igiVSKNwutU1ZlirCutZCtL3Xgt5yq6vXZZeuir3XehciipWV0ktfMJQWe1Oo1Ra0CEgk8qKEECGEhExIMnmZzDz3j3OGmXPO3me/nL3P+c3O97PWrDPnme/+7ee3z5nf7HnOdz/b3B0hhBDVoq/XCQghhCgeLe5CCFFBtLgLIUQF0eIuhBAVRIu7EEJUEC3uQghRQQbSiMxsMXAzcAbgwPuBx4HbgRFgC/Aed9+dYqwhYFG+dIUQ4qhhEtjpOf3qlmY7M7sV+Fd3v9nMBoEh4GPAS+7+aTO7Dlji7n/QZow5wO8AZwOWJ1khhDjKGAU+7+6PZ90wcXE3s2OAR4DXzvwLYmaPA+e5+/Nmtgy4z91PbTPOfwbeQ+3MXwjRPabKr5M9zULkZS/wX7KewadZ3FcDNwGPAWcCDwLrgJ+6++IZut3uviRi+w8C1wPDZrZg4cKFDAykqgYJITrA3RkfH2d8fByAgYEBBgcHMdM/zrMBd+fgwYNMTEwwPj5+EFid5Qw+zSo7ALwZuMbdHzCzzwPXZcjxGeDbwPDAwMCFw8PDnHXWWTw39hyPvPAIY4fHGBoc4szjz2Rk8QhbRrekjgOlaBfMeZEFgz9m/hznwLix//DrWLrgLby4/3up4/vHl3acW5b9AZHaTueXZdwijmdZ88j6OmXJLW5/3TwWUe+h4b5hNm3a1PDLeNppp7FkScs5WAJbqP3zPkatIntmPd4cG4nRjmQYN26MuP1VlyeeeIKdO3eyaNEiNm3aNAZcY2bXpD2DT3PmfgJwv7uP1J//J2qL+8mkKMuY2bXAOQALFy5cOzIywqIVi/jenu9xZPLIK7qBvgFOX3o6j734WKp4n9X+05z0yUK1b3gVnH8SzOmfnsP4BLywf5jjF7yUOr7xaeNHO6ePbdbcfmlkGa8/7tlU+zsyWfsQo7+vUfvErhXcu+X53PPLMm4Rx7OseWR9naKOfVxuceN289jHvYfeOPhG9j+/n5m87nWv4/Wvfz3p+RHw/4AjM2JRVZ4B4HRq/+AfaYpfALwhxbhxY8TtL2rc6vCtb32Lvr4+RkZGuOOOO14C7gF+191fSrN92g9U/xX4gLs/bmZ/BCyo/2jXjA9Uh939oxHbfgR4C8CSJUvWrlmzhnuPv5fti7e37Kff+pnwidTxKDrVPr0ORha3ao9MwEB/+viWUTjp8/lz27IOVmXII4pnRmGkKYes80s7LhRzPNPur8zXKe7YRxE3brePfRRLty7lggMXNMQuvfRSfv3Xfz3dAEDt7PiZlNp+IOr9vYra2XiacePGiCJq3Opw7bXXsnPnTgDWr18/tbivc/cX02yftvh9DXBb3SnzE+B91P6c/pWZXQlsBd6dNunt+7ZDxJs8buFLuyAWoV15bLS2P+aKgLh41DhZcluRMY+0Y2SdX9pxoZjjmXZ/Zb5OcfPLMm63j30UL469WIAvbWsGbdz7O2qMuHHT/45ky+3oI9Xbyt0fdvez3P2N7n6Zu+92913ufr67n1J/TPWvAsAJC0+IjPdb9OlLXLwM7dY90dqJGJ9BXDxqnCy5PZsxj7RjZJ1f2nGhmOOZdn9lvk5x88sybrePfRRLh5amF8eyMoM27v0dNUbcuOl/R7LldvTRkytUf37Fz0fGTz0u2kkZFy9De9fj0FypcocHfjqf/Ycb4/sP1+JR+rsiPtPOktt3ti5Oncfhieicv7O19d+jLPPLMi50fjzLmkfW1ynu2I83nVS2G7fbxz6Kn3vNz6XWxnNRTLz5n/4h4LwMY8SNe159rJnELVNxYwjo0eL+b8/+W2T88V3RLp+4eBnai0+FZqeYGSw/5gBXbajVaCe99njVhlo8Sn9xxDqeJbdzV46mzmPPweicz1052tH8sowbN7+y9lfm6xR37EcPph+328c+igefezC1Np67Y+LHUqt5W/3xJuCpDGPEjftUfayZY8e5e+LGEJC+5l4os7HmvuJYWL+p9jWTr/9atL6smntUHhM3pB8jy/yyjAudH8+y5gHZXqe4+R03BK/+ZLpxu33soyi35v4SsLMp9t4MY8SNuxW4vP41Rdw5qGru7ejJmfsx846JjFvMOzEuXoZ211i0toh4ltyyjBuCFjo/nmXmFkIeZc4vikWDRbRwGs4QD0ErpgiqK6THdCaIi3dTWwTd3l+3qfr8hJhN9GRxf/ngy73YbSqOa/4sp+B4GXmEoI0jlNxCyKPbx37v4b3pxbHEmeCi4iFoxRQ9WdxnoxUyzoIWFy/LCpnFYtdNLXR+PMvMLcvrVIS22/OLolwrZBZ7Yze1YgpZIZuIs6vFWdDibHNlWSGzWOy6qYXOj2eZuWV5nYrQdnt+UZRrhcxib+ymVkwhK2QTcXa1OAtanG2uLCtkFotdN7XQ+fEsM7csr1MR2m7PL4pyrZBZ7I3d1IoperK4b9/X2lcGwrdCZomXaYVMs69ua6Hz41lmbllepyK03Z5fFC+OpWpBkkA7y2KIWjGFrJBNyAqZTwuyQvZKG4eskEc3skJ2kapbBas+PyFmE7JCNiErZD5tHKHkFkIeskJ2QyumkBWyCVkh82lBVsikuKyQ3dCKKWSFbEJWyHxakBWyyJxlhcyrFVPICtmErJD5tCArZJE5ywqZVyumkBWyCVkh82lBVsikuKyQ3dCKKVRzb0I193xaUM09Ka6aeze0YgrV3JtQzT2fFlRzLzJn1dzzasUUqrk3oZp7Pi2o5l5kzqq559WKKVRzb0I193xaUM09Ka6aeze0Ygq1H2hC7QfyaUHtB3qljUPtB45u1H6gi1T98vyqz0+I2YTaDzSh9gP5tHGEklsIeaj9QDe0YgpZIZuQFTKfFmSFTIqHZIW87dHbGLlxhL5P9DFy4wi3PXpbZCzObrjv8HBqLaxsGXvf4biSSjatiEdWyCZkhcynBVkhi8y5TCvkbY/extUbruaZPc/gOM/seYb3/d37eP+d72+IXb3hau7bsiAyj7945KXU2vu2LGjZ39ce3tWx9kc7T059LI5GZIVsQlbIfFqQFbLInMu0Qn5848cZG2/8ZHZ8cpzDE4cbYmPjY5y0+LHIPN55iqfWnrT4sZb9XfT66Pll0S4cvC9yfqLGQBqRmW0B9gITwBF3P8vMhoHbgRFgC/Aed9+dZrzt+7ZDxAmIrJD59heK3VBWyPbxnlghIwxaW/ektxCGfCxesyj979PRSJYz919y99Xuflb9+XXARnc/BdhYf54K1dyTCaGWq5p7fm3INfeVx6avVYd8LJ7b28+P/uwCjqw0vM84stL40Z9dEC0+CumkLHMpcGv9+1uBy9JuqJp7MiHUclVzz68NueZ+0SnpL9sP+Vgc+togp16/kYFnwRwGnoVTr9+oBb5O2sXdgW+a2YNmdnU9dry7Pw9Qf3x12p2q5p5MCLVc1dzza0Ouud/9ZPrL9kM+Fq/9zAGs6aIuG4OTP7sxbjpHFWkX93Pd/c3AO4EPmdkvZtjHOcCFwIWHDh0C1H4gDSHUclVzz68NpuYeQVVq7jwbHe7fRoRNM9r+GRcPQdspqT5Qdffn6o87zOxvgbOBF8xsmbs/b2bLgB0xm99P7YNY5s6duxZq7QdepvVCJsMir3KMi0fRqXbXGCxd0Kptdzl4Wn2W3LKMG4IWOj+eZeYWQh5lzi+KRYOLYLw1Pjx/mF0HdqUaI4T5bd0DI1HVqBVEtpeZOBGe2fMMwCs2ze9s/Q63PnLrK06cdvH33/l+3J3xyfGeaa/ecDW/sOsXOI7jIiaejsQzdzNbYGaLpr4HfhnYBHwDuKIuuwK4M3cWddR+YHZT9fmJ3vCxjbC/0aXJ/sPwzfeDN12x60Pwf36tMTY2PsZND97UYrGMix+eOPzKAtwr7dj4GP/+7L/TCWnKMscD3zazR4DvAn/v7v8IfBp4h5k9Cbyj/jwVaj9QbB4haOMIJbcQ8gil/cBLB9Jfth/C/NZvgqs2wJZRmPTa41UbYA3whQ/AkeXgVnv8wgfgmogLWkMo+WbV7j3UWfuIxLKMu/8EODMivgs4P89OT1h4Attprbv3W3/kROPiUXSqjfsXsJ3Na1WEPs4KmTa3uHHjrGJpcy5LC50fzzJzy/I6FaHt9vyiWDq0FA60xlceu/KVskUSIRwLqC3w6zc1xvqtn2uGJ7jmA9HbNGt7vbZk1S6a21lXT7UfaEJWyHxakBWyyJxlhUymiHWhm2tLVu3I4pHUY0Sh9gNNyAqZTwuyQhaZs6yQyRSxLnRzbcmq3TK6JfUYUehOTE3ICplPC7JCJsVlhWy/fbsxoihiXahyzV13YmpCd2LKpwXdialX2jji7sQ0PD/9HYxCnl8R60I315as2nkD81KPEYXuxNRFqm4VrPr8RFgU8bsewtpS1u+N7sTUhKyQ+bRxhJJbCHnICplPe7Ry8MjBjrbXnZiaUFfIfFpQV8ikuLpCtt++3RhRFLEudHNtyaqVFbJgrayQ+bQgK2SROcsKmYyskO2RFbIJWSHzaUFWyCJzlhUyGVkh2yMrZBOyQubTgqyQSXFZIdtv326MKGSFbI9q7k2o5p5PC6q5J8VVc2+/fbsxolDNvT2quTehmns+LajmXmTOqrkno5p7e1Rzb0I193xaUM29yJxVc09GNff2qObehGru+bSgmntSXDX39tu3GyMK1dzbo/YDTaj9QD4tqP1Ar7RxqP1AslbtB7pEyJcIF0HVL8+v+vxEWKj9QHvUfqAJtR/Ip40jlNxCyEPtB/Jpj1bUfqBgrayQ+bQgK2RSXFbI9tu3GyMKWSHbIytkE7JC5tOCrJBF5iwrZDKyQrZHVsgmZIXMpwVZIYvMWVbIZGSFbI+skE3ICplPC7JCJsVlhWy/fbsxopAVsj2quTehmns+LajmnhRXzb399u3GiEI19/ao5t6Eau75tKCae5E5q+aejGru7VHNvQnV3PNpQTX3InNWzT0Z1dzbo5p7E6q5p9OuPQOeXgcTN9Qe156hmntSXDX39tu3GyMK1dzbo/YDTaj9QLJ23yH40iUwshj6rPb4pUtqC3yvc1P7gWnUfiBZq/YDXSLkS4SLoCqX5y8YrH01xz51fm/yEUcnaj/QHrUfaELtB5K1fTEnJVH/aocwj1DyUPuBfNqjla61HzCzfjN7yMzuqj8/ycweMLMnzex2MxtMGmMKWSGTCcFiF6edmAw3N1khp5EVMlkrK2SNdcDmGc//BPicu58C7AauTDuQrJDJhGCx+9hG2H+4Mbb/MDy0vfe5yQqZjKyQydqj3gppZsuBXwFurj834O3AHXXJrcBlaXcqK2QyIVjs1m+CdX8/nz/8Y+O33wef/YLx0PYPsmzR3p7nJitkMrJCJmurbIUcSKm7EfgoMPV/wnHAqLsfqT/fBpwYs+05wAUAhw4dAupWyIg/0CHYlWSFbOTLnzzAqt2rALjvXhjbdQL//Q+j5xGKTTNLvPJWyIjPR2SFLHaMsrSlWyHN7GJgh7vPPA2I+kgt7iPf+4F7gHvmzp0LyAqZhiAsaOPQ92zjW2TDhg3sPtD73GSFTEZWyGRtla2Qac7czwV+1cwuAuYBx1A7k19sZgP1s/flwHMdZULYdqUimHVWyINA00nFvn37qP1tn2VzEZVDVsj2JJ65u/v17r7c3UeA3wD+2d0vB+4F3lWXXQHcmXanskIWm0eZFrRJb7XGLJkf/WYM2SoYQh6yQubTHq308k5MfwD8npk9Ra0G/+W0G8oKmUwoFrv+vtacn9sbPQ9ZIdvHZYVsv327MaKQFbI9mRZ3d7/P3S+uf/8Tdz/b3U9293e7+6G048gKmUwoFrv5c+a3xJ566dSe5yYrZDKyQiZrj3orZNHICplMKBa7A+Otn56ePPx4z3OTFTIZWSGTtVW2QqorZBOyQjYyMdma82sWyQqZZ3/qCtl++3ZjRCErZHt0J6YmVHNvRDX3fFrV3NvHVXNP1upOTAVrVXNvRDX3fFrV3Ke1qrnn06rmXrBWNfdGVHPPp1XNfVqrmns+rWruBWtVc29ENfd8WtXc28dVc0/Wzsqau9oPJBPKZd991voWUfuBsLRxqP1AsrbK7Qd0J6YuMuvaD8SS/o0rRFmo/UB7dCemJtR+oBG1HwhfG4faD8xuetl+IDeyQiYTisVOVsh8Wlkh28dlhUzWygpZsFZWyEZkhcynlRVyWisrZD6trJAFa2WFbERWyHxaWSGntbJC5tPKClmwVlbIRmSFzKeVFbJ9XFbIZO2stEKq5p5MKLVc1dzzaVVzbx9XzT1Zq5p7wVrV3BtRzT2fVjX3aa1q7vm0qrkXrFXNvRHV3PNpVXOf1qrmnk+rmnvBWtXcG1HNPZ9WNff2cdXck7Wzsuau9gPJhHLZt9oPhK+NQ+0HkrVqP9AlQr5EuAjUfkCI4lD7gfao/UATaj/QiNoPhK+NQ+0HZjdqP1CwVlbIRmSFzKeVFbJ9XFbIZK2skAVrZYVsRFbIfFpZIae1skLm08oKWbBWVshGZIXMp5UVclorK2Q+rayQBWtlhWxEVsh8Wlkh28dlhUzWygpZsFZWyEZkhQxfG4eskMlaWSG7RMh2pSKQFVKI4pAVsj2yQjYhK2QjskKGr41DVsjZTelWSDObZ2bfNbNHzOyHZvaJevwkM3vAzJ40s9vNbDDtTmWFTCYUi52skPm0skK2j8sKmazthhXyEPB2dz8TWA2sMbNzgD8BPufupwC7gSvT7lRWyGRCsdjJCplPKyvktFZWyHza0q2QXmNf/emc+pcDbwfuqMdvBS5Lu1NZIZMJxWInK2Q+rayQ01pZIfNpO7VCDqQRmVk/8CBwMvAF4MfAqLsfqUu2ASfGbH4OcAHAoUOHgLoVMuIPdAh2JVkhG5EVMp82GCtkxGffskIWO0ZZ2q5YId19wt1XA8uBs4HTomQxm98P3APcM3fuXEA19zSEUstVzT2fVjX39nHV3JO1XW0/4O6jwH3UzsYXm9nUmf9y4Lm046jmnkwotVzV3PNpVXOf1qrmnk9bes3dzJaa2eL69/OplVg2A/cC76rLrgDuTLtT1dyTCaWWq5p7Pq1q7tNa1dzzabtRc18G3Fqvu/cBf+Xud5nZY8BfmtkfAw8BX067U9Xckwmllquaez6tau7t46q5J2tLr7m7+w/c/U3u/kZ3P8PdP1mP/8Tdz3b3k9393e5+KO1O1X4gmVAu+1b7gfC1caj9QLJW7Qe6RMiXCBeB2g8IURxqP9AetR9oQu0HGlH7gfC1caj9wOxGd2IqWCsrZCOyQubTygrZPi4rZLJWd2IqWCsrZCOyQubTygo5rZUVMp9Wd2IqWCsrZCOyQubTygo5rZUVMp9Wd2IqWCsrZCOyQubTBmOFjEBWyGLHKEs7K+/EpJp7MqHUclVzz6dVzb19XDX3ZK1q7gVrVXNvRDX3fFrV3Ke1qrnn06rmXrBWNfdGVHPPp1XNfVqrmns+rWruBWtVc29ENfd8WtXc28dVc0/Wzsqau9oPJBPKZd9qPxC+Ng61H0jWqv1Alwj5EuEiUPsBIYpD7Qfao/YDTaj9QCNqPxC+Ng61H5jdqP1AwVpZIRuRFTKfVlbI9nFZIZO1skIWrJUVshFZIfNpZYWc1soKmU8rK2TBWlkhG5EVMp9WVshprayQ+bSyQhaslRWyEVkh82llhWwflxUyWSsrZMFaWSEbkRUyfG0cskIma2WF7BIh25WKQFZIIYpDVsj2yArZhKyQjcgKGb42DlkhZzeyQhaslRWyEVkh82llhWwflxUyWSsrZMFaWSEbkRUyn1ZWyGmtrJD5tLJCFqyVFbIRWSHzaWWFnNbKCplPKytkwVpZIRuRFTKfVlbI9nFZIZO1s9IKqZp7MqHUclVzz6dVzb19XDX3ZK1q7gVrVXNvRDX3fFrV3Ke1qrnn06rmXrBWNfdGVHPPp1XNfVqrmns+bek1dzNbYWb3mtlmM/uhma2rx4fN7J/M7Mn645K0O1XNPZlQarmquefTqubePq6ae7K2GzX3I8Dvu/tpwDnAh8zsdOA6YKO7nwJsrD9PhdoPJBPKZd9qPxC+No5FC1prtkNDQ2o/UPAYZWlLbz/g7s+7+/fr3+8FNgMnApcCt9ZltwKXdZQJYV8iXARqPyC6ycBrBhgcHJx+PjDA6tWre5hRsaj9QHsGsojNbAR4E/AAcLy7Pw+1PwBm9uqYzc4BLgA4dOgQoPYDReeh9gPFxmebNo7R/lGuv/567r77biYnJ7nwwgtZsWKF2g/MErrWfsDMFgJ/DXzY3bOszvcD9wD3zJ07F5AVMg2hWOxkhcyn7fb81p4BT6+DiRtqj2vPqFkeX5z/ed595X/jI7/3X1m8cjXf3vo7rDx2ZaQ+y/5khSxf2xUrpJnNobaw3+buf1MPv2Bmy+o/XwbsSLtTWSGTCcViJytkPm0357f2DPjSJTCyGPqs9vilS+DGC8d50wlfZPkxE/QZLD9mgjed8EVuvHA8Uh+1wIdwLOKQFbI9adwyBnwZ2OzufzrjR98Arqh/fwVwZ9qdygqZTCgWO1kh82m7Ob9PnQ8LBhtjCwbh4tc/lyn+qfNbhg7iWMQhK2R70tTczwXeCzxqZg/XYx8DPg38lZldCWwF3p12p9v3bYeIP9Ah2JVkhWxEVsh82hCORX/MqVtcPNRjEYeskO1J45b5trubu7/R3VfXv+52913ufr67n1J/TP0pjWruyYRSy1XNPZ82hGMx0fpZeNt4qMciDtXc26P2A02o5t6Iau75tCEciwd+Op/9hxvj+w/X4rPpWMShmnt71H6gCdXcG1HNPZ82hGOx/JgDXLUBtozCpNcer9pQi8+mYxGHau7tyeRzLwrV3JMJoZYLqrnn1YZyLNZvqn3N5Ou/Fq0P9VjEoZp7e3py5q72A8mEctm32g9USxtKHkW0H6g6pbcf6CYhXyJcBGo/IERxVL23TKf0ZHFX+4Fi81D7gWLjVdaGkkcRvzdV7y3TtfYDRSIrZDIhWOxAVsi8Wh2L9nFZIZO1skIWrJUVspEoK+S+w+dFjvH06OkMzWk89br7iej9dVM7NGeIp0dPj9T/w5NWilbHoric5/TNYbC/8ZLaoTlDXP1zV3ekLWKMMnN724q30QmyQjYhK2QjUVbIN7zqqcgxzhvZz02X3MSqY1dhGKuOXcVvrT6u59qbLrmJ80b2R+rfe+ZwKVodi+Jy/splX+GWS29p2d+f/8qfd6QtYowyc8tyMhiFefOfz4Ixs48AbwFYsmTJ2jVr1rB+wXpYXupuczNxQ62ZUjOTDv2f7FxfRh5ladkL3AyrFq96JTR//nw2b34cIuuEBjTX6PsC0IaSRwjaUPLImvPRx7XXXsvOnTsBWL9+/UvUuuuuc/foW2w1IStkE7JCNhJlhYS4O/lExUPQhpJHCNpQ8siam8iKrJBdpDpWSCFE6MgK2YSskI1EWSEhrkdcVDwEbSh5hKANJY+suYmsyArZhKyQjURZIWFltDgyHoI2lDxC0IaSR9bcRFZkhWxCVshGoqyQcFFM1lHxELSh5BGCNpQ8suYmsiIrZBOyQjYSZYWEu2OyjoqHoA0ljxC0oeSRNTeRlZ4s7tv3bY+Mh9C5TV0hG4nqClm78VYUUfEQtKHkEYI2lDyy5iayopp7E6q5N6Kae9W0oeShmnvZqObehGrujajmXjVtKHmo5l42qrk3oZp7I6q5V00bSh6quZeNau5NFFlzf3pd7XL/p9fB2jNUc++dNpQ8QtCGkodq7mWj9gNNFNV+wICRxbU+LiOL4UuXwG+ekTo1tR8oVBtKHiFoQ8lD7QfKRu0HSqK59LFgEP7n+aXtTgghGlD7gSbKbDMQVxLpdH9qP1B0vMraUPJQ+4GykRWyiaKskHHatWe01uI73Z+skEXHq6wNJQ9ZIctGVsgmsloF//d3X8P+w42xwxPRY2x7eT5fuqS1Fh+1wMsKWaQ2lDxC0IaSh6yQZSMrZBNZrYKfu/8FrtoAW0ZrN7zYMgp7DkaP8dYTD7Cg8S5bLBiET0XU4mWFLFIbSh4haEPJQ1bIshlIEpjZLcDFwA53P6MeGwZuB0aALcB73H132p1u37cdIk4UZ6MVcsInWL8J1m+aEbshWtsf86c0ap+yQhapDSWPELSh5CErZNmkOXP/KrCmKXYdsNHdTwE21p+npko1937r53+9BOM3w+Qnao/7vhKtnYi5e1g37ySvmnsv8whBG0oeqrmXTeLi7u7fovUj7EuBW+vf3wpclmWnH3zLB1PfiTwuPtg/yJy+OYVr/+FJi6xJP/T8ayLn8rWxRXzoZhjYBua1x0XXwPhfNOr2H4YHfjo/dasC1dyL1IaSRwjaUPJQzb1s8tbcj3f35wHqj6/OsvGak9ekvhN5XPyWS2/hK5d9pXDte88cjqxJn3XiC5Fzec9to1jTBUA2Bn0fb6zDX7UBlh9zIHWrAtXci9SGkkcI2lDyUM29bMybT+OiRGYjwF0zau6j7r54xs93u/uSmG1vBy4AGBoaGr700kv58Ic/zNlnn11A+mUQfVf2SYf+T7aqJz9RO2Nvxg36/kdjbOKGmksmzdghaNkL3AyrFq96JTR//nw2b36ccu5yX5Y2lDxC0IaSR9acjz6uvfZadu7cCcD69etfAu4B1rn7i2m2z3vm/oKZLQOoP+5oo72/ntQ9c+fOzbm7bhJ9+fPowehDNbk8epSoeAgtBdR+oJd5hKANJQ+1HyibvIv7N4Ar6t9fAdxZTDrhMjRnfuTnAfs/ATRf3TkE+/+oW5kJIUQriYu7ma0H/h041cy2mdmVwKeBd5jZk8A76s8rQvTlz/MGxiI/D1j428BNwCpq/1Guqj1f+L7WMUJoKaD2A73MIwRtKHmo/UDZJPrc3X1tzI8q2gZrJfBMZPzyn72cy3/28obotpc5dN3FAAAJMUlEQVSvYPnlE9AYZmvE55PP7oFVEaaUOCtklDbO3jhSghbaWSGjj1GY2lDyCEEbSh5ZcxZZCaorZBhks2jtO3xepLXwH55s/NRyaM4QT4+e3rH26dHTW8pDdz8RbW/sVDtvzjwWz4uySIZgj6u6/U/HQnSGFvcWslm03vCqpyKthe89c7ilhHPeyP6OteeN7G8pD/3W6uNK0X72lz/LwsGFHR6jELSh5BGCNpQ8ZIUsm1RWyI52YPYR4C0AS5YsWbtmzZpZaYWsjq0svXb79u2cc845DTFZIWe7NpQ8ZIVMoldWyApTdVtZERa0EHLT65RPG0oeskKWjRZ3IYSoIFrcW6i6rawIC1oIuel1yqcNJQ9ZIctGi3sLVe+wV0Q3vhBy0+uUTxtKHuoKWTZa3Fuouq2sCAtaCLnpdcqnDSUPWSHLRot7C1W3lRVhQQshN71O+bSh5CErZNlocW+h6ne1KeIOOCHkptcpnzaUPHQnprLR4t5C1euXqrn3Lo8QtKHkoZp72Whxb6Hq9UvV3HuXRwjaUPJQzb1stLi3UPX6pWruvcsjBG0oeajmXjZa3Fuoev1SNffe5RGCNpQ8VHMvGy3uLVT9Um61H+hdHiFoQ8lD7QfKRou7EEJUEC3uLVT9Um61H+hdHiFoQ8lD7QfKRot7C1W3lckK2bs8QtCGkoeskGWjxb2FqtvKZIXsXR4haEPJQ1bIstHi3kLVbWWyQvYujxC0oeQhK2TZaHFvoeq2Mlkhe5dHCNpQ8pAVsmy0uLdQ9fqlau69yyMEbSh5qOZeNlrcW6h6/VI1997lEYI2lDxUcy8bLe4tVL1+qZp77/IIQRtKHqq5l40W9xba1QJvA0aoHbaR+vMi6ozPlDRuVM7PZBg3jrL2V+Y8Ztux17EQnaHFvYW4y58XAFdTe1N6/fFqYCjDOO0urW4ed0EB4w7RmnMcRbQf6HR/Zc5jth17HQvRGQO9TmD2sJ/aG3MmY5Tz93EMsALGOQBMFjBOr/fXzXmEfux1LEQ6dObeQtzlz80L+xRxb9osl1xn2V+WcbP8QhXRfqDT/ZU5j9l27HUsRGd0dOZuZmuAzwP9wM3u/ukI2SvvjomJCZ566im+/vWv8y//8i+d7LpEjgVGI+JG9Bs9Ln4s8JmUY0dRxLhxY0TROu7LL7/Mnj17GmJjY2N85jPl7K+sebQfO4reH3sdC/Hwww9jZixbtmxmOO2BzL+4m1k/8AXgHcA24Htm9g13f6xJuhU4Gzjm4MGD7Nixg23btrFz5868uy6Z04DvAhMzYv3AScDTGeKnAQ+lGNvqXzPPbooYN26MuP21jjs5OYm7Mz4+/kps7ty5PPRQOfsrax7xY4d77HUsxN69e9m9ezf79u2bCu0nw782nZy5nw085e4/ATCzvwQuBZoX928CbwF+yd058cQTmTdvXge7LZuR+uMj1GqOQ8CZ9fjSjPG0Y2fdX6c5x2kb6evr47TTTuPRRx/F3env7+dnfuZngONL2V9Z82g/dpb9dTPnssZtN3aW/XU756OPlStXsm/fPnbt2jUV+qq7p65xmXvqs/zGDc3eBaxx9w/Un78XeKu7/26T7mpqH5W/ClhB+v8HZyNzgUO9TqIk5lP7ZKyqVPm1A81vNmPAHHdflGWjTs7coz5Gb/lL4e43ATeZ2SLgCeDeDvYZOhcC9/Q6iZKo8txA85vtVHV+Dvw5tc82M9HJ4r6N2pn4FMuB5+LE7r7XzH4K/CG1T02qyGrgs71OoiSqPDfQ/GY7VZzfJLXS9z6z7JbUThb37wGnmNlJwE+B3wB+M2kjd/9xB/sMGjMbc/fv9zqPMqjy3EDzm+1UfX55yL24u/sRM/tdav8K9QO3uPsPEza7Ke/+ZglVnl+V5waa32xH82si9weqQgghwkVXqAohRAXR4i6EEBWkK4u7ma0xs8fN7Ckzu64b+ywTM7vFzHaY2aYZsWEz+ycze7L+uKSXOXaCma0ws3vNbLOZ/dDM1tXjlZijmc0zs++a2SP1+X2iHj/JzB6oz+92Mxvsda55MbN+M3vIzO6qP6/S3LaY2aNm9rCZ/Uc9Von3JoCZLTazO8zsR/XfwbflmV/pi/uMNgXvBE4H1prZ6WXvt2S+Cqxpil0HbHT3U4CN9eezlSPA77v7acA5wIfqr1lV5ngIeLu7n0nNQrfGzM4B/gT4XH1+u4Ere5hjp6wDNs94XqW5Qe2K99Xuflb9eVXem1DztP+ju7+B2mW7m8kzP3cv9Qt4G3DPjOfXA9eXvd8uzGsE2DTj+ePAsvr3y4DHe51jgXO9k1oPocrNkdp1798H3grsBAbq8Yb37Wz6onbNyUbg7cBd1C44rMTc6vlvAV7VFKvEexM4hlojHut0ft0oy5wIPDvj+bZ6rGoc7+7PA9QfX93jfArBzEaANwEPUKE51ssWDwM7gH8CfgyMuvuRumQ2v09vBD7KdFeu46jO3KB21eY3zezBensTqM5787XAi8BX6mW1m81sATnm143FPVWbAhEeZrYQ+Gvgw+7+cq/zKRJ3n3D31dTOcs+m1o6wRdbdrDrHzC4Gdrj7gzPDEdJZN7cZnOvub6ZW6v2Qmf1irxMqkAHgzcAX3f1N1DpB5ioxdWNxz9SmYBbzgpktA6g/7uhxPh1hZnOoLey3ufvf1MOVmiOAu48C91H7bGGxmU1d2Ddb36fnAr9qZluAv6RWmrmRaswNAHd/rv64A/hban+cq/Le3AZsc/cH6s/voLbYZ55fNxb3V9oU1D+h/w3gG13Yb7f5BnBF/fsrqNWpZyVWa2TxZWCzu//pjB9VYo5mttTMFte/nw9cQO1Dq3uBd9Vls3J+7n69uy939xFqv2v/7O6XU4G5AZjZgnoTQurlil8GNlGR96a7bweeNbNT66HzqbVRzz6/Ln1IcBG1jpA/Bj7e6w8tCpjPeuB5YJzaX9orqdU1NwJP1h+He51nB/P7BWr/tv8AeLj+dVFV5gi8kdodIX5AbWG4oR5/LbW7TTwF/F9gbq9z7XCe5wF3VWlu9Xk8Uv/64dR6UpX3Zn0uq4H/qL8//w5Ykmd+aj8ghBAVRFeoCiFEBdHiLoQQFUSLuxBCVBAt7kIIUUG0uAshRAXR4i6EEBVEi7sQQlSQ/w+FHELeNMEM6AAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"plt.xlim(0,60)\n",
"plt.ylim(0,60)\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(0, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(60, 0), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(60,0), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(0,60), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,0), xycoords='data',\n",
" xytext=(20, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(40,20), xycoords='data',\n",
" xytext=(40, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,0), xycoords='data',\n",
" xytext=(20, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"\n",
"plt.scatter(x_reach,y_reach,color='g')\n",
"plt.scatter(x,y,color='yellow')\n",
"plt.scatter(10,10,color='r')\n",
"plt.scatter(50,50,color='r')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Busca nao supervisionada: BFS - Printa todos os nos visitados"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculo do custo da busca e o caminho percorrido"
]
},
{
"cell_type": "code",
"execution_count": 188,
"metadata": {},
"outputs": [],
"source": [
"init_pos = (10,10)\n",
"goal_pos = (50,50)\n",
"\n",
"robot_problem = RobotProblem(init_pos, goal_pos, mapa, grafo)\n",
"# node, l = breadth_first_graph_search_mod(robot_problem)\n",
"node = best_first_search(robot_problem,len)\n",
"# node = breadth_first_graph_search(robot_problem)"
]
},
{
"cell_type": "code",
"execution_count": 189,
"metadata": {},
"outputs": [],
"source": [
"x_reach = []\n",
"y_reach = []\n",
"for nod in list(reached):\n",
" x_reach.append(nod[0])\n",
" y_reach.append(nod[1])"
]
},
{
"cell_type": "code",
"execution_count": 166,
"metadata": {},
"outputs": [],
"source": [
"list_nodes = []\n",
"try:\n",
" for n in node.path():\n",
" list_nodes.append(n.state)\n",
"except:\n",
" pass"
]
},
{
"cell_type": "code",
"execution_count": 167,
"metadata": {},
"outputs": [],
"source": [
"x = []\n",
"y = []\n",
"for nod in list_nodes:\n",
" x.append(nod[0])\n",
" y.append(nod[1])"
]
},
{
"cell_type": "code",
"execution_count": 195,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"plt.xlim(0,60)\n",
"plt.ylim(0,60)\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(0, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(0,0), xycoords='data',\n",
" xytext=(60, 0), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(60,0), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"plt.annotate(\"\",\n",
" xy=(0,60), xycoords='data',\n",
" xytext=(60, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,0), xycoords='data',\n",
" xytext=(20, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(40,20), xycoords='data',\n",
" xytext=(40, 60), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"plt.annotate(\"\",\n",
" xy=(20,0), xycoords='data',\n",
" xytext=(20, 40), textcoords='data',\n",
" arrowprops=dict(arrowstyle=\"-\",\n",
" edgecolor = \"black\",\n",
" linewidth=5,\n",
" alpha=0.65,\n",
" connectionstyle=\"arc3,rad=0.\"),\n",
" )\n",
"\n",
"\n",
"plt.scatter(x_reach,y_reach,color='g')\n",
"plt.scatter(x,y,color='yellow')\n",
"plt.scatter(10,10,color='r')\n",
"plt.scatter(50,50,color='r')\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment