Skip to content

Instantly share code, notes, and snippets.

@luizcartolano2
Last active November 13, 2019 18:43
Show Gist options
  • Save luizcartolano2/e334f48ffd761d36e7febdddd277f9ed to your computer and use it in GitHub Desktop.
Save luizcartolano2/e334f48ffd761d36e7febdddd277f9ed to your computer and use it in GitHub Desktop.
Códigos de implementação das buscas supervisionadas e não supervisionadas no Trabalho de MC906.
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.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Buscas supervisionadas"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Imports"
]
},
{
"cell_type": "code",
"execution_count": 77,
"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",
"\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": 78,
"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",
" \n",
"grafo = UndirectedGraph(mapa)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Modelagem da classe problema"
]
},
{
"cell_type": "code",
"execution_count": 79,
"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",
" \n",
" def heuristic_1(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\n",
" \n",
" def heuristic_2(self,node):\n",
" \"\"\" Manhattan Heuristic Function \"\"\"\n",
" x1,y1 = node.state[0], node.state[1]\n",
" x2,y2 = self.goal[0], self.goal[1]\n",
" \n",
" return abs(x2 - x1) + abs(y2 - y1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Busca supervisionada A*: Heuristica 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculo do consumo de memoria"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [],
"source": [
"def calc_memory_a_h1():\n",
" init_pos = (10,10)\n",
" goal_pos = (50,50)\n",
"\n",
" robot_problem = RobotProblem(init_pos, goal_pos, mapa, grafo)\n",
" node = astar_search(robot_problem, h=robot_problem.heuristic_1)"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [],
"source": [
"mem_usage = memory_usage(calc_memory_a_h1)"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Memória usada (em intervalos de .1 segundos): [45.5390625, 45.6875, 45.9375, 46.11328125, 46.515625, 48.71484375, 54.1875, 60.69921875, 64.99609375, 78.73046875, 89.4375, 94.87109375, 97.34765625, 98.2578125, 98.234375]\n",
"Maximo de memoria usada: 98.2578125\n"
]
}
],
"source": [
"print('Memória usada (em intervalos de .1 segundos): %s' % mem_usage)\n",
"print('Maximo de memoria usada: %s' % max(mem_usage))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculo do custo da busca e o caminho percorrido"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Custo da busca A* com a primeira heuristica: 142\n"
]
}
],
"source": [
"init_pos = (10,10)\n",
"goal_pos = (50,50)\n",
"\n",
"robot_problem = RobotProblem(init_pos, goal_pos, mapa, grafo)\n",
"node = astar_search(robot_problem, h=robot_problem.heuristic_1)\n",
"print(\"Custo da busca A* com a primeira heuristica: \" + str(node.path_cost))"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [],
"source": [
"list_nodes = []\n",
"for n in node.path():\n",
" list_nodes.append(n.state)"
]
},
{
"cell_type": "code",
"execution_count": 60,
"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": 61,
"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 A* com a primeira heuristica')\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=(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",
"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": [
"### Calculo do tempo gasto pelo A* com inicio em (10,10) e fim em (50,50) usando a heuristica 1"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [],
"source": [
"init_pos = (10,10)\n",
"goal_pos = (50,50)\n",
"\n",
"robot_problem = RobotProblem(init_pos, goal_pos, mapa, grafo)\n",
"\n",
"times = []\n",
"for i in range(0,1000):\n",
" start = time.time()\n",
" node = astar_search(robot_problem, h=robot_problem.heuristic_1)\n",
" end = time.time()\n",
" times.append(end - start)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Media do tempo gasto para a busca A* com a primeira heuristica: 0.29269154953956605\n",
"Desvio padrao do tempo gasto para a busca A* com a primeira heuristica: 0.024914598492101866\n",
"Intervalo de confiança para a busca A* com a primeira heuristica: (0.2911473267263827,0.2942357723527494)\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAb0AAAEICAYAAADLKSqCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAHdlJREFUeJzt3Xm8XGWd5/HPF8Ima2IuDCSRixBaSLcGTUNaXJjGkcUl+GoXsBsDg0ZGGMWmR5HRlmYR7FHBHhVEUXBhGxRJI60sI9KoCEERCUsTQyAhIVxIgNAobcKv/3iegpOiqm7dpepU3fN9v171uuc8Z6nf85znnF+dpeoqIjAzM6uCTcoOwMzMrFuc9MzMrDKc9MzMrDKc9MzMrDKc9MzMrDKc9MzMrDLGJelJWizpgPFYl1kzko6SdHPZcfQrt19nSDpZ0tc7tO6nJb18nNZ1gKQV47GuNt/vPEmfGsVyL8v13rQTcQ2b9CQtk/SmurKNdp6ImBURNw6znkFJIWnSqKO1Met2x7eJRdKNktZK2qLBtEFJp5QQVqki4jMR8f4OrXubiFjaiXV3WkQcGxGnDTdffY6JiIdyvTd0Iq4Jc3lzoiRTJRNmu9jEIWkQeD0QwNsL5XMl/W9gUh5/g6STy4ix28o87nTqTGg89HJsRETLF7AMeFNd2VHAzY3mAfYFFgFPAauBL+Tyh0g7y9P59RekpPtJ4EHgUeBbwPaF9b4vT3sc+FTd+5wCXAF8J7/X+/N7/wJ4AlgFfAnYvLC+AD4E3A+sA04Dds/LPAVcXpsfmAxcDQwBa/Pw9GHa6RPA3Xn+bwJbtrMu4EbgDOBnwO+BPYCjgXtynEuBD7Z475btWJhv67z+5wrbYZe8/EnA73JbXw5MycsM5nY7Glie4z8W+HPgztzWX6rrGz8D/i/wJHAvcGBh+i7AQmANsAT4QIt6vTTP+xRwa95exX73CuC6vK77gHe3WNf2wAW5XzwMnA5smqedC1xRmPezwA2A8vhbgTtyXX8OvLIw7wzg+3nbPl5rC1L//E5hvlo7TsrjU3IfWZnb9Adt9pXxbL/XArfl7XQb8NphjgV/n7ftF4Cr66bNy9viXuBMYJsm62jWXk37MCPsgw3es+VxoW7e2nstyNtmFXBiYfopvPi48/y2Hk2swH8n7etrgR8Du9Yds/bIwxeS+uo1wL8DbwLeAvw6x7IcOKVFOxwArABOzG28Cji6MH0L4HOkY/Vq4Dxgq0bH/DZjuxA4PU+fSurLT5D67r/mbf5t0vHo96Tj0ccYp32laTsMO8PIk94vgCPz8DbA3EY7fWFjLwFenuf9PvDtPG3v3AivAzbPG+OPbJz0/ggclhtvK+A1wFzSJ85BUkc6oW4jLQS2A2YBz5IObi8nHRTvBuYXDhh/BbwE2Bb4f7XGbtFOd5F26imkg8Pp7ayLlPQeyjFNAjYjdebdAQFvBJ4BXt3kvZu2Y7OOX1d2AnALMJ3U8b8KXFK33c4DtgTeDPwB+AGwIzCNtAO9sdA31gMfzfV4D+mgWkuiPwW+ktc1m9RhD2wS66WkBLw18KekZHVznrY1aSc/OrfZq4HHgFlN1vWDXK+tc9y3kj9I5O3ybzn21+f1TM/TXp3rtx+wKTA/b+st8vhvgLPzercEXlfon62S3g+By0g77maF9huur4xX+00hHSiOzO13RB5/aYs+voT0ofE1pH1vp8K0t/NC0jsd2LrB8q3aq9WxoNZ2bfXBBu/b8rhQN2/tvS7JMf5ZbuNWx53nt/VIY83rWQLsleP7JPDzFonlSWD//N5bkvbnP8vjryQlq8Na7PvrgVNJfe5Q0nFlcp5+Dun4OIXU9/4ZOLPRMb/N2C7khWPgmblNNsuv1/PCh8plFHIM47SvNO3Hw86QAnqalKFrr2donvRuAv4BmNqkMxWT3g3Ahwrjf0LqUJNInyovKUx7CfAfbNz5bhom9hOAK+s20v6F8duBjxfGPw+c02Rds4G1w7TTsYXxQ4HftbMuUtI7dZi6/AD4SJNpTduxScevT3r3sPHZ2M6F7VDbbtMK0x8H3lMY/x75IELaOVbWOnQuu5V0cJ0BbAC2LUw7E7iwQZyb5hheUSj7DC8ctN8D/GvdMl8FPt1gXTuRPuBsVSg7AvhJYXxf0ifQB4EjCuXnAqfVre8+0geRvyAdEBu18yk0SXq5fZ8jH2yG2e7P95Vxbr8jgVvrlvkFcFSTOF6X1zc1j98LfDQPzyUdrPfI9X4DcHKDdbRqr1bHghH1wTbadKPjQt202nsV2+0fgQsK2/WmumWe39YjjRX4F+CYwrRNSMfXXfN4fWL51jB1Owc4u8m0A0hnVMVj8KN5+4l0hrZ73fZ6oLBfD5f0vlU3/UJeSHqnAlfV5q+bbxlNkh6j3Fdavdq9d3RYROxQe5E+7TVzDLAncK+k2yS9tcW8u5AOMjUP5orulKctr02IiGdInadoeXFE0p6Srpb0iKSnSDv51LplVheGf99gfJu8rpdI+qqkB/O6bgJ2GOZadTGeB3Md2l1XfV0OkXSLpDWSniAl0fq61LRqx3bsClwp6Yn8XveQDq7F5dtqt+zhyL2wEM8u+bUmItbVTZvWIKaBXIf6Ni3GvF8t5hz3XwP/pUn9NgNWFeb9KumTNwARcSvpMrJIZ0fFZU+se58ZuS4zgAcjYn2D92xlBqkd1tZPGKavjGf71feZVuuCdIZ7bUQ8lscvzmVExC0RcTrpLIKIuCkiPtNgHa3aq50+PJI++Lw2jwv1Gu7LDaY1026suwJfLPStNaQ+2Gw71B8n9pP0E0lDkp4kXUptVbfH69r/mRzLAOnE4vZCLD/K5e1q1S7/h3RGe62kpZJOanOdo91Xmhr3ByYi4v6IOIJ0QPkscIWkrUmZu95K0kaveRlpx1lNut48vTZB0lak09mN3q5u/FzSJ9CZEbEdcDKpA43GiaRPm/vldb2hFkqLZWYUhl9Gql+763q+LvnJuO+RLunulD9oXNPivVu1Y71G22E5cEjxg01EbBkRDzd5v+FMk1SMtdYWK4Epkratm9bofYZIdahv02LMP62LeZuI+B8N1rWcdKY3tTDvdhExqzaDpONIlyxXku4rFJc9o+59XhIRl+RpL2vyMMO/kw4iNcVkvDy3ww4NlmvVV8az/er7TNN15X3v3cAbc+J4hHT5+lWSXlWbLyKWRcQpDWKpadVeI+nDIzWa40KzfRka70OjtZx0mb3Yv7aKiJ83mb/+vS8mXZKcERHbky4hjuaY9xgpGc8qxLF9RNSS80b9WVKjD5dN2yUi1kXEiRHxcuBtwN9KOnC45Rj9vtLUuCc9SX8jaSAiniNdCoV01jBEOk0tfufkEuCjknaTtA3pE9hl+ZPIFcDbJL1W0uakS6bDbcxtSTd0n5b0CqDRAbBd25I6wROSpgCfbmOZ4yRNz/OfTLoOPZp1bU46AA8B6yUdQro30Eyrdqy3GnippO0LZecBZ0jaFUDSgKR5w8TYyo7AhyVtJuldpPsV10TEctKDIGdK2lLSK0lXBr5bv4JIjyt/Hzglf6Lbm3xmkV0N7CnpyPw+m0n6c0l7NVjXKuBa4POStpO0iaTdJb0x13dP0n2ovyFd9vuYpNl58a8Bx+ZP1JK0taS35MRzK+nD2Vm5fEtJ++fl7gDeoPSdo+1JDzkV4/kX4CuSJufYazts074yzu13TW6/90qaJOk9pPvoV9evi3TfaUOePju/9iI9jPC+BvM306q9RtKHR2o0x4VP5XabRbpvfNlwC4zSecAn8vsgafu8z7RrW9KZ0B8k7Qu8dzRB5OP114CzJe2YY5km6aA8y2+AWZJmS9qSdEm3bZLeKmmP/GH4KVJ/qn0lYTUb54ViXKPaV1rpxKPxBwOLJT0NfBE4PCL+kC9PngH8LJ8+zwW+QXp65ybgAdIN3/8JEBGL8/ClpB1lHen687Mt3vvvSBt9HWkDjqWjnkO6Sf0Y6SGPH7WxzMWkg+vS/Dp9NOvKl68+TLrMtpZUp4UtFmnajg3WfS/pALM0b4ddSNtpIenSw7oc437D1LWVXwIzSfU9A3hnRNQuTR9Buma/EriSdA/uuibrOZ506eUR0v2BbxbqsY70QeDwvK5HSFcWXvT9sex9pA8TtadrrwB2zmcd3wE+GxG/iYj7SR9Yvi1pi4hYBHyA9MTfWtIlmqNyDBtIn1r3ID2ItIJ0r5Fcp8tIT+zdzouTyZGke1b3kvr1Cbl8uL4yXu33OOmp1BNJtw0+Bry1cPmyaD7wzUjfn3qk9spt8tdNztxepFV7MYI+PAqjOS78lLStbwA+FxHXjlMsG4mIK0n99tJ8ie4u4JARrOJDwKl5v/17Nr40P1IfJ9X5lhzL9aQzKSLi30j35a4nPf0+0h85mJmXfZp07/gr8cJ3u88EPpmPR3/XYNnR7isN1Z6e6Xn5098TpEsUD5QdTz1Jy4D3R8T1ZcdSJklHkdrhdWXHYjZSSt9FfADYbJzOMq3H9PSXoCW9LV9i2Jp0f+u3pCd9zMzMRqynkx7pC6+1ByBmki6V9sepqZmZ9Zy+ubxpZmY2Vr1+pmdmZjZuJsSPNDczderUGBwcLDsMM7O+cvvttz8WESP5YnrfmNBJb3BwkEWLFpUdhplZX5FU/2s9E4Yvb5qZWWU46ZmZWWU46ZmZWWU46ZmZWWU46ZmZWWU46ZmZWWU46ZmZWWU46ZmZWWU46ZmZWWVM6F9k6ZTBk37YsHzZWW/pciRmZjYSPtMzM7PKcNIzM7PKcNIzM7PKcNIzM7PKcNIzM7PKcNIzM7PKcNIzM7PKcNIzM7PKcNIzM7PKcNIzM7PKcNIzM7PK8G9vttDsNzbNzKw/+UzPzMwqw0nPzMwqo7SkJ2lLSbdK+o2kxZL+IZfvJumXku6XdJmkzXP5Fnl8SZ4+WFbsZmbWn8o803sW+MuIeBUwGzhY0lzgs8DZETETWAsck+c/BlgbEXsAZ+f5zMzM2lZa0ovk6Ty6WX4F8JfAFbn8IuCwPDwvj5OnHyhJXQrXzMwmgFLv6UnaVNIdwKPAdcDvgCciYn2eZQUwLQ9PA5YD5OlPAi9tsM4FkhZJWjQ0NNTpKpiZWR8pNelFxIaImA1MB/YF9mo0W/7b6KwuXlQQcX5EzImIOQMDA+MXrJmZ9b2eeHozIp4AbgTmAjtIqn1/cDqwMg+vAGYA5OnbA2u6G6mZmfWzMp/eHJC0Qx7eCngTcA/wE+Cdebb5wFV5eGEeJ0///xHxojM9MzOzZsr8RZadgYskbUpKvpdHxNWS7gYulXQ68Gvggjz/BcC3JS0hneEdXkbQZmbWv0pLehFxJ7BPg/KlpPt79eV/AN7VhdDMzGyC6ol7emZmZt3gpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpVRWtKTNEPSTyTdI2mxpI/k8lMkPSzpjvw6tLDMJyQtkXSfpIPKit3MzPrTpBLfez1wYkT8StK2wO2SrsvTzo6IzxVnlrQ3cDgwC9gFuF7SnhGxoatRm5lZ3yrtTC8iVkXEr/LwOuAeYFqLReYBl0bEsxHxALAE2LfzkZqZ2UTRE/f0JA0C+wC/zEXHS7pT0jckTc5l04DlhcVW0CBJSlogaZGkRUNDQx2M2szM+k3pSU/SNsD3gBMi4ingXGB3YDawCvh8bdYGi8eLCiLOj4g5ETFnYGCgQ1GbmVk/KjXpSdqMlPC+GxHfB4iI1RGxISKeA77GC5cwVwAzCotPB1Z2M14zM+tvZT69KeAC4J6I+EKhfOfCbO8A7srDC4HDJW0haTdgJnBrt+I1M7P+V+bTm/sDRwK/lXRHLjsZOELSbNKly2XABwEiYrGky4G7SU9+HucnN83MbCRKS3oRcTON79Nd02KZM4AzOhaUmZlNaKU/yGJmZtYtTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZTnpmZlYZpSU9STMk/UTSPZIWS/pILp8i6TpJ9+e/k3O5JP2TpCWS7pT06rJiNzOz/lTmmd564MSI2AuYCxwnaW/gJOCGiJgJ3JDHAQ4BZubXAuDc7odsZmb9rLSkFxGrIuJXeXgdcA8wDZgHXJRnuwg4LA/PA74VyS3ADpJ27nLYZmbWx3rinp6kQWAf4JfAThGxClJiBHbMs00DlhcWW5HL6te1QNIiSYuGhoY6GbaZmfWZ0pOepG2A7wEnRMRTrWZtUBYvKog4PyLmRMScgYGB8QrTzMwmgFKTnqTNSAnvuxHx/Vy8unbZMv99NJevAGYUFp8OrOxWrGZm1v/KfHpTwAXAPRHxhcKkhcD8PDwfuKpQ/r78FOdc4MnaZVAzM7N2TCrxvfcHjgR+K+mOXHYycBZwuaRjgIeAd+Vp1wCHAkuAZ4CjuxuumZn1u9KSXkTcTOP7dAAHNpg/gOM6GpSZmU1opT/IYmZm1i1OemZmVhlOemZmVhlOemZmVhlOemZmVhlOemZmVhlOemZmVhlOemZmVhlOemZmVhlOemZmVhlOemZmVhlOemZmVhlOemZmVhlOemZmVhlOemZmVhlOemZmVhlOemZmVhlOemZmVhlOemZmVhlOemZmVhlOemZmVhlOemZmVhmlJT1J35D0qKS7CmWnSHpY0h35dWhh2ickLZF0n6SDyonazMz6WZlnehcCBzcoPzsiZufXNQCS9gYOB2blZb4iadOuRWpmZhNCaUkvIm4C1rQ5+zzg0oh4NiIeAJYA+3YsODMzm5B68Z7e8ZLuzJc/J+eyacDywjwrctmLSFogaZGkRUNDQ52O1czM+kivJb1zgd2B2cAq4PO5XA3mjUYriIjzI2JORMwZGBjoTJRmZtaXeirpRcTqiNgQEc8BX+OFS5grgBmFWacDK7sdn5mZ9beeSnqSdi6MvgOoPdm5EDhc0haSdgNmArd2Oz4zM+tvk8p6Y0mXAAcAUyWtAD4NHCBpNunS5TLggwARsVjS5cDdwHrguIjYUEbcZmbWv0pLehFxRIPiC1rMfwZwRuciMjOzia6nLm+amZl1kpOemZlVhpOemZlVhpOemZlVhpOemZlVhpOemZlVhpOemZlVhpOemZlVhpOemZlVhpOemZlVhpOemZlVhpOemZlVhpOemZlVhpOemZlVhpOemZlVhpOemZlVhpOemZlVhpOemZlVhpOemZlVhpOemZlVhpOemZlVhpOemZlVxqSyA5hIBk/6YcPyZWe9pcuRmJlZI6We6Un6hqRHJd1VKJsi6TpJ9+e/k3O5JP2TpCWS7pT06vIiNzOzflT25c0LgYPryk4CboiImcANeRzgEGBmfi0Azu1SjGZmNkGUmvQi4iZgTV3xPOCiPHwRcFih/FuR3ALsIGnn7kRqZmYTQdlneo3sFBGrAPLfHXP5NGB5Yb4VuWwjkhZIWiRp0dDQUMeDNTOz/tGLSa8ZNSiLFxVEnB8RcyJizsDAQBfCMjOzftGLSW917bJl/vtoLl8BzCjMNx1Y2eXYzMysj/Vi0lsIzM/D84GrCuXvy09xzgWerF0GNTMza0ep39OTdAlwADBV0grg08BZwOWSjgEeAt6VZ78GOBRYAjwDHN31gM3MrK+VmvQi4ogmkw5sMG8Ax3U2IjMzm8h68fKmmZlZRzjpmZlZZTjpmZlZZTjpmZlZZTjpmZlZZTjpmZlZZTjpmZlZZTjpmZlZZTjpmZlZZTjpmZlZZTjpmZlZZTjpmZlZZTjpmZlZZTjpmZlZZTjpmZlZZTjpmZlZZTjpmZlZZTjpmZlZZTjpmZlZZTjpmZlZZUwqO4AqGDzphw3Ll531li5HYmZWbT7TMzOzyujZMz1Jy4B1wAZgfUTMkTQFuAwYBJYB746ItWXFaGZm/aXXz/T+a0TMjog5efwk4IaImAnckMfNzMza0utJr9484KI8fBFwWImxmJlZn+nlpBfAtZJul7Qgl+0UEasA8t8d6xeStEDSIkmLhoaGuhiumZn1up69pwfsHxErJe0IXCfp3nYWiojzgfMB5syZE50M0MzM+kvPnulFxMr891HgSmBfYLWknQHy30fLi9DMzPpNT57pSdoa2CQi1uXhNwOnAguB+cBZ+e9V5UXZff6+n5nZ2PRk0gN2Aq6UBCnGiyPiR5JuAy6XdAzwEPCuEmM0M7M+05NJLyKWAq9qUP44cGD3IzIzs4mgJ5Ne1TW7jGlmZmPTsw+ymJmZjTcnPTMzqwwnPTMzqwwnPTMzqwwnPTMzqww/vVkiP6VpZtZdPtMzM7PKcNIzM7PKcNIzM7PKcNIzM7PK8IMsE4D/+4KZWXt8pmdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXhpGdmZpXh7+lNYP7+npnZxnymZ2ZmleEzPesIn2WaWS/ymZ6ZmVVG353pSToY+CKwKfD1iDir5JD6znj+89rxOnPzmaGZdUNfJT1JmwJfBv4bsAK4TdLCiLi73Miqa6QJ1P8t3szK1FdJD9gXWBIRSwEkXQrMA5z0JqjxSpLdOGPsdEJvVoeRniX34ll1L8bUL9x2I6OIKDuGtkl6J3BwRLw/jx8J7BcRxxfmWQAsyKN/AtzX9UDbNxV4rOwgxqDf44f+r0O/xw+uQy+oj3/XiBgoK5hO6rczPTUo2yhrR8T5wPndCWdsJC2KiDllxzFa/R4/9H8d+j1+cB16Qb/HPxL99vTmCmBGYXw6sLKkWMzMrM/0W9K7DZgpaTdJmwOHAwtLjsnMzPpEX13ejIj1ko4Hfkz6ysI3ImJxyWGNRV9chm2h3+OH/q9Dv8cPrkMv6Pf429ZXD7KYmZmNRb9d3jQzMxs1Jz0zM6sMJ70OkHSwpPskLZF0UoPpx0r6raQ7JN0sae/CtE/k5e6TdFB3I98oxlHVQdKgpN/n8jskndf96J+PsWUdCvO9U1JImlMoK307jDb+ftoGko6SNFSI9f2FafMl3Z9f87sb+fMxjCX+DYXy0h64a6cfSXq3pLslLZZ0caG89G0w7iLCr3F8kR6w+R3wcmBz4DfA3nXzbFcYfjvwozy8d55/C2C3vJ5N+6wOg8Bd/bAd8nzbAjcBtwBzemU7jDH+vtkGwFHAlxosOwVYmv9OzsOT+yX+PO3pPtkGM4Ff19oX2LFXtkEnXj7TG3/P/1RaRPwHUPuptOdFxFOF0a154Qv284BLI+LZiHgAWJLX121jqUOvGLYO2WnAPwJ/KJT1wnYYS/y9ot06NHIQcF1ErImItcB1wMEdirOZscTfK9qpwweAL+d2JiIezeW9sA3GnZPe+JsGLC+Mr8hlG5F0nKTfkQ5YHx7Jsl0wljoA7Cbp15J+Kun1nQ21qWHrIGkfYEZEXD3SZbtgLPFDn2yD7K8k3SnpCkm1H5/oi22QNYofYEtJiyTdIumwjkbaXDt12BPYU9LPcqwHj2DZvuOkN/6G/ak0gIj4ckTsDnwc+ORIlu2CsdRhFfCyiNgH+FvgYknbdSzS5lrWQdImwNnAiSNdtkvGEn9fbIPsn4HBiHglcD1w0QiW7bSxxA9pG8wB3gucI2n3zoTZUjt1mES6xHkAcATwdUk7tLls33HSG38j/am0S4Hap8Be+Zm1UdchXxJ8PA/fTrqfsGeH4mxluDpsC/wpcKOkZcBcYGF+GKQXtsOo4++jbUBEPB4Rz+bRrwGvaXfZLhhL/ETEyvx3KXAjsE8ng22inXZcAVwVEX/Ml/PvIyXBXtgG46/sm4oT7UX61LSU9ABE7cbxrLp5ZhaG3wYsysOz2PgBiqWU8yDLWOowUIuZdPP8YWBKL9ahbv4beeFBkNK3wxjj75ttAOxcGH4HcEsengI8QHqAYnIe7modxhj/ZGCLPDwVuJ8GDyL1SB0OBi4qxLoceGkvbINOvPrqZ8j6QTT5qTRJp5ISw0LgeElvAv4IrAXm52UXS7qc9P8B1wPHRcSGfqoD8AbgVEnrgQ3AsRGxpkfr0GzZ0rfDWOKnv7bBhyW9ndTOa0hPQxIRaySdRvq9XYBTu12HscQP7AV8VdJzpCtqZ0UJ/+y6zTr8GHizpLtJ/eV/Rb5SUPY26AT/DJmZmVWG7+mZmVllOOmZmVllOOmZmVllOOmZmVllOOmZmVllOOmZmVllOOmZmVll/CdgTHfQkvKhDQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"media_a_1 = mean(times)\n",
"desvio_a_1 = stdev(times)\n",
"intervalo_conf = '(' + str( media_a_1 - 1.96 * (desvio_a_1 / (len(times)) ** (1/2)) ) + ',' + str( media_a_1 + 1.96 * (desvio_a_1 / (len(times)) ** (1/2)) ) + ')'\n",
"print(\"Media do tempo gasto para a busca A* com a primeira heuristica: \" + str(media_a_1))\n",
"print(\"Desvio padrao do tempo gasto para a busca A* com a primeira heuristica: \" + str(desvio_a_1))\n",
"print(\"Intervalo de confiança para a busca A* com a primeira heuristica: \" + intervalo_conf)\n",
"fig = plt.figure()\n",
"plt.hist(times,bins=50)\n",
"plt.title('Histograma para o tempo de execucao do A* com a primeira heuristica')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Projecao da relacao entre distancia em linha reta e tempo para o A* com a primeira heuristica"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"goal_pos = (50,50)\n",
"x = []\n",
"y = []\n",
"for i in range(5,50):\n",
" for j in range(5,50):\n",
" if i != 20 and i != 40:\n",
" init_pos = (i,i)\n",
" distancia_linha_reta = sqrt( (goal_pos[0] - init_pos[0]) ** 2 + (goal_pos[1] - init_pos[1]) ** 2)\n",
" robot_problem = RobotProblem(init_pos, goal_pos, mapa, grafo)\n",
" start = time.time()\n",
" node = astar_search(robot_problem, h=robot_problem.heuristic_1)\n",
" end = time.time()\n",
" x.append(distancia_linha_reta)\n",
" y.append(end - start)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>x</th>\n",
" <th>y</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>63.639610</td>\n",
" <td>0.353318</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>63.639610</td>\n",
" <td>0.287190</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>63.639610</td>\n",
" <td>0.288752</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>63.639610</td>\n",
" <td>0.274318</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>63.639610</td>\n",
" <td>0.277233</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>63.639610</td>\n",
" <td>0.278795</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>63.639610</td>\n",
" <td>0.275531</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>63.639610</td>\n",
" <td>0.280169</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>63.639610</td>\n",
" <td>0.277734</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>63.639610</td>\n",
" <td>0.275686</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>63.639610</td>\n",
" <td>0.272878</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>63.639610</td>\n",
" <td>0.275366</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>63.639610</td>\n",
" <td>0.282222</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>63.639610</td>\n",
" <td>0.272992</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>63.639610</td>\n",
" <td>0.290849</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>63.639610</td>\n",
" <td>0.274611</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>63.639610</td>\n",
" <td>0.280523</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>63.639610</td>\n",
" <td>0.280439</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>63.639610</td>\n",
" <td>0.277161</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>63.639610</td>\n",
" <td>0.309568</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>63.639610</td>\n",
" <td>0.280261</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>63.639610</td>\n",
" <td>0.279710</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>63.639610</td>\n",
" <td>0.281897</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>63.639610</td>\n",
" <td>0.299378</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>63.639610</td>\n",
" <td>0.312137</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>63.639610</td>\n",
" <td>0.275331</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>63.639610</td>\n",
" <td>0.280523</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>63.639610</td>\n",
" <td>0.274930</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>63.639610</td>\n",
" <td>0.275058</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>63.639610</td>\n",
" <td>0.275454</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1905</th>\n",
" <td>1.414214</td>\n",
" <td>0.631728</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1906</th>\n",
" <td>1.414214</td>\n",
" <td>0.635814</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1907</th>\n",
" <td>1.414214</td>\n",
" <td>0.647269</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1908</th>\n",
" <td>1.414214</td>\n",
" <td>0.641280</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1909</th>\n",
" <td>1.414214</td>\n",
" <td>0.630732</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1910</th>\n",
" <td>1.414214</td>\n",
" <td>0.636557</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1911</th>\n",
" <td>1.414214</td>\n",
" <td>0.629992</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1912</th>\n",
" <td>1.414214</td>\n",
" <td>0.640563</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1913</th>\n",
" <td>1.414214</td>\n",
" <td>0.628974</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1914</th>\n",
" <td>1.414214</td>\n",
" <td>0.636382</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1915</th>\n",
" <td>1.414214</td>\n",
" <td>0.672965</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1916</th>\n",
" <td>1.414214</td>\n",
" <td>0.634571</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1917</th>\n",
" <td>1.414214</td>\n",
" <td>0.632568</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1918</th>\n",
" <td>1.414214</td>\n",
" <td>0.632077</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1919</th>\n",
" <td>1.414214</td>\n",
" <td>0.632172</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1920</th>\n",
" <td>1.414214</td>\n",
" <td>0.644302</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1921</th>\n",
" <td>1.414214</td>\n",
" <td>0.639943</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1922</th>\n",
" <td>1.414214</td>\n",
" <td>0.638308</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1923</th>\n",
" <td>1.414214</td>\n",
" <td>0.658581</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1924</th>\n",
" <td>1.414214</td>\n",
" <td>0.670559</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1925</th>\n",
" <td>1.414214</td>\n",
" <td>0.631976</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1926</th>\n",
" <td>1.414214</td>\n",
" <td>0.633003</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1927</th>\n",
" <td>1.414214</td>\n",
" <td>0.633057</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1928</th>\n",
" <td>1.414214</td>\n",
" <td>0.633467</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1929</th>\n",
" <td>1.414214</td>\n",
" <td>0.704471</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1930</th>\n",
" <td>1.414214</td>\n",
" <td>0.689626</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1931</th>\n",
" <td>1.414214</td>\n",
" <td>0.684126</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1932</th>\n",
" <td>1.414214</td>\n",
" <td>0.634595</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1933</th>\n",
" <td>1.414214</td>\n",
" <td>0.630115</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1934</th>\n",
" <td>1.414214</td>\n",
" <td>0.633557</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1935 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" x y\n",
"0 63.639610 0.353318\n",
"1 63.639610 0.287190\n",
"2 63.639610 0.288752\n",
"3 63.639610 0.274318\n",
"4 63.639610 0.277233\n",
"5 63.639610 0.278795\n",
"6 63.639610 0.275531\n",
"7 63.639610 0.280169\n",
"8 63.639610 0.277734\n",
"9 63.639610 0.275686\n",
"10 63.639610 0.272878\n",
"11 63.639610 0.275366\n",
"12 63.639610 0.282222\n",
"13 63.639610 0.272992\n",
"14 63.639610 0.290849\n",
"15 63.639610 0.274611\n",
"16 63.639610 0.280523\n",
"17 63.639610 0.280439\n",
"18 63.639610 0.277161\n",
"19 63.639610 0.309568\n",
"20 63.639610 0.280261\n",
"21 63.639610 0.279710\n",
"22 63.639610 0.281897\n",
"23 63.639610 0.299378\n",
"24 63.639610 0.312137\n",
"25 63.639610 0.275331\n",
"26 63.639610 0.280523\n",
"27 63.639610 0.274930\n",
"28 63.639610 0.275058\n",
"29 63.639610 0.275454\n",
"... ... ...\n",
"1905 1.414214 0.631728\n",
"1906 1.414214 0.635814\n",
"1907 1.414214 0.647269\n",
"1908 1.414214 0.641280\n",
"1909 1.414214 0.630732\n",
"1910 1.414214 0.636557\n",
"1911 1.414214 0.629992\n",
"1912 1.414214 0.640563\n",
"1913 1.414214 0.628974\n",
"1914 1.414214 0.636382\n",
"1915 1.414214 0.672965\n",
"1916 1.414214 0.634571\n",
"1917 1.414214 0.632568\n",
"1918 1.414214 0.632077\n",
"1919 1.414214 0.632172\n",
"1920 1.414214 0.644302\n",
"1921 1.414214 0.639943\n",
"1922 1.414214 0.638308\n",
"1923 1.414214 0.658581\n",
"1924 1.414214 0.670559\n",
"1925 1.414214 0.631976\n",
"1926 1.414214 0.633003\n",
"1927 1.414214 0.633057\n",
"1928 1.414214 0.633467\n",
"1929 1.414214 0.704471\n",
"1930 1.414214 0.689626\n",
"1931 1.414214 0.684126\n",
"1932 1.414214 0.634595\n",
"1933 1.414214 0.630115\n",
"1934 1.414214 0.633557\n",
"\n",
"[1935 rows x 2 columns]"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"data = {'x':[], 'y':[]}\n",
"df = pd.DataFrame(data)\n",
"df['x'] = x\n",
"df['y'] = y\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 31,
"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.scatter(x,y)\n",
"plt.ylim(0.2, 1)\n",
"plt.title(\"Distancia em linha reta x Tempo A*-heuristica1\")\n",
"plt.xlabel(\"Distancia em linha reta entre os pontos inicial e final\")\n",
"plt.ylabel(\"Tempo da busca A* com a primeira heuristica\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Busca supervisionada A*: Heuristica 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculo do consumo de memoria"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [],
"source": [
"def calc_memory_a_h2():\n",
" init_pos = (10,10)\n",
" goal_pos = (50,50)\n",
"\n",
" robot_problem = RobotProblem(init_pos, goal_pos, mapa, grafo)\n",
" node = astar_search(robot_problem, h=robot_problem.heuristic_2)"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [],
"source": [
"mem_usage = memory_usage(calc_memory_a_h2)"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Memória usada (em intervalos de .1 segundos): [98.23828125, 98.23828125, 98.23828125, 98.23828125, 98.36328125, 98.36328125]\n",
"Maximo de memoria usada: 98.36328125\n"
]
}
],
"source": [
"print('Memória usada (em intervalos de .1 segundos): %s' % mem_usage)\n",
"print('Maximo de memoria usada: %s' % max(mem_usage))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculo do custo da busca e o caminho percorrido"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Custo da busca A* com a segunda heuristica: 124\n"
]
}
],
"source": [
"init_pos = (10,10)\n",
"goal_pos = (50,50)\n",
"\n",
"robot_problem = RobotProblem(init_pos, goal_pos, mapa, grafo)\n",
"node = astar_search(robot_problem, h=robot_problem.heuristic_2)\n",
"print(\"Custo da busca A* com a segunda heuristica: \" + str(node.path_cost))"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [],
"source": [
"list_nodes = []\n",
"for n in node.path():\n",
" list_nodes.append(n.state)"
]
},
{
"cell_type": "code",
"execution_count": 53,
"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": 56,
"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 A* com a segunda heuristica')\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=(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",
"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": [
"### Calculo do tempo gasto pelo A* com inicio em (10,10) e fim em (50,50) usando a heuristica 2"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [],
"source": [
"init_pos = (10,10)\n",
"goal_pos = (50,50)\n",
"\n",
"robot_problem = RobotProblem(init_pos, goal_pos, mapa, grafo)\n",
"\n",
"times = []\n",
"for i in range(0,1000):\n",
" start = time.time()\n",
" node = astar_search(robot_problem, h=robot_problem.heuristic_2)\n",
" end = time.time()\n",
" times.append(end - start)"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Media do tempo gasto para a busca A* com a segunda heuristica: 0.3358131620883942\n",
"Desvio padrao do tempo gasto para a busca A* com a segunda heuristica: 0.055225639891942596\n",
"Intervalo de confiança para a busca A* com a segunda heuristica: (0.3323902414653378,0.33923608271145056)\n"
]
},
{
"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": [
"media_a_2 = mean(times)\n",
"desvio_a_2 = stdev(times)\n",
"intervalo_conf = '(' + str( media_a_2 - 1.96 * (desvio_a_2 / (len(times)) ** (1/2)) ) + ',' + str( media_a_2 + 1.96 * (desvio_a_2 / (len(times)) ** (1/2)) ) + ')'\n",
"print(\"Media do tempo gasto para a busca A* com a segunda heuristica: \" + str(media_a_2))\n",
"print(\"Desvio padrao do tempo gasto para a busca A* com a segunda heuristica: \" + str(desvio_a_2))\n",
"print(\"Intervalo de confiança para a busca A* com a segunda heuristica: \" + intervalo_conf)\n",
"fig = plt.figure()\n",
"plt.hist(times,bins=50)\n",
"plt.title('Histograma para o tempo de execucao do A* com a segunda heuristica')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Projecao da relacao entre distancia em linha reta e tempo para o A* com a segunda heuristica"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [],
"source": [
"goal_pos = (50,50)\n",
"x = []\n",
"y = []\n",
"for i in range(5,50):\n",
" for j in range(5,50):\n",
" if i != 20 and i != 40:\n",
" init_pos = (i,i)\n",
" distancia_linha_reta = sqrt( (goal_pos[0] - init_pos[0]) ** 2 + (goal_pos[1] - init_pos[1]) ** 2)\n",
" robot_problem = RobotProblem(init_pos, goal_pos, mapa, grafo)\n",
" start = time.time()\n",
" node = astar_search(robot_problem, h=robot_problem.heuristic_2)\n",
" end = time.time()\n",
" x.append(distancia_linha_reta)\n",
" y.append(end - start)"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>x</th>\n",
" <th>y</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>63.639610</td>\n",
" <td>0.339699</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>63.639610</td>\n",
" <td>0.316395</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>63.639610</td>\n",
" <td>0.330955</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>63.639610</td>\n",
" <td>0.312590</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>63.639610</td>\n",
" <td>0.320237</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>63.639610</td>\n",
" <td>0.445456</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>63.639610</td>\n",
" <td>0.315913</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>63.639610</td>\n",
" <td>0.388662</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>63.639610</td>\n",
" <td>0.312565</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>63.639610</td>\n",
" <td>0.393766</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>63.639610</td>\n",
" <td>0.426781</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>63.639610</td>\n",
" <td>0.418182</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>63.639610</td>\n",
" <td>0.378316</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>63.639610</td>\n",
" <td>0.394147</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>63.639610</td>\n",
" <td>0.383894</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>63.639610</td>\n",
" <td>0.371566</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>63.639610</td>\n",
" <td>0.431862</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>63.639610</td>\n",
" <td>0.533955</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>63.639610</td>\n",
" <td>0.387744</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>63.639610</td>\n",
" <td>0.395740</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>63.639610</td>\n",
" <td>0.421445</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>63.639610</td>\n",
" <td>0.367555</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>63.639610</td>\n",
" <td>0.501208</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>63.639610</td>\n",
" <td>0.330773</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>63.639610</td>\n",
" <td>0.374537</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>63.639610</td>\n",
" <td>0.477630</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>63.639610</td>\n",
" <td>0.451741</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>63.639610</td>\n",
" <td>0.314841</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>63.639610</td>\n",
" <td>0.337109</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>63.639610</td>\n",
" <td>0.440276</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1905</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1906</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1907</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1908</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1909</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1910</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1911</th>\n",
" <td>1.414214</td>\n",
" <td>0.000075</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1912</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1913</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1914</th>\n",
" <td>1.414214</td>\n",
" <td>0.000075</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1915</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1916</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1917</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1918</th>\n",
" <td>1.414214</td>\n",
" <td>0.000077</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1919</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1920</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1921</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1922</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1923</th>\n",
" <td>1.414214</td>\n",
" <td>0.000077</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1924</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1925</th>\n",
" <td>1.414214</td>\n",
" <td>0.000075</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1926</th>\n",
" <td>1.414214</td>\n",
" <td>0.000075</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1927</th>\n",
" <td>1.414214</td>\n",
" <td>0.000075</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1928</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1929</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1930</th>\n",
" <td>1.414214</td>\n",
" <td>0.000075</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1931</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1932</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1933</th>\n",
" <td>1.414214</td>\n",
" <td>0.000079</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1934</th>\n",
" <td>1.414214</td>\n",
" <td>0.000076</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1935 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" x y\n",
"0 63.639610 0.339699\n",
"1 63.639610 0.316395\n",
"2 63.639610 0.330955\n",
"3 63.639610 0.312590\n",
"4 63.639610 0.320237\n",
"5 63.639610 0.445456\n",
"6 63.639610 0.315913\n",
"7 63.639610 0.388662\n",
"8 63.639610 0.312565\n",
"9 63.639610 0.393766\n",
"10 63.639610 0.426781\n",
"11 63.639610 0.418182\n",
"12 63.639610 0.378316\n",
"13 63.639610 0.394147\n",
"14 63.639610 0.383894\n",
"15 63.639610 0.371566\n",
"16 63.639610 0.431862\n",
"17 63.639610 0.533955\n",
"18 63.639610 0.387744\n",
"19 63.639610 0.395740\n",
"20 63.639610 0.421445\n",
"21 63.639610 0.367555\n",
"22 63.639610 0.501208\n",
"23 63.639610 0.330773\n",
"24 63.639610 0.374537\n",
"25 63.639610 0.477630\n",
"26 63.639610 0.451741\n",
"27 63.639610 0.314841\n",
"28 63.639610 0.337109\n",
"29 63.639610 0.440276\n",
"... ... ...\n",
"1905 1.414214 0.000076\n",
"1906 1.414214 0.000076\n",
"1907 1.414214 0.000076\n",
"1908 1.414214 0.000076\n",
"1909 1.414214 0.000076\n",
"1910 1.414214 0.000076\n",
"1911 1.414214 0.000075\n",
"1912 1.414214 0.000076\n",
"1913 1.414214 0.000076\n",
"1914 1.414214 0.000075\n",
"1915 1.414214 0.000076\n",
"1916 1.414214 0.000076\n",
"1917 1.414214 0.000076\n",
"1918 1.414214 0.000077\n",
"1919 1.414214 0.000076\n",
"1920 1.414214 0.000076\n",
"1921 1.414214 0.000076\n",
"1922 1.414214 0.000076\n",
"1923 1.414214 0.000077\n",
"1924 1.414214 0.000076\n",
"1925 1.414214 0.000075\n",
"1926 1.414214 0.000075\n",
"1927 1.414214 0.000075\n",
"1928 1.414214 0.000076\n",
"1929 1.414214 0.000076\n",
"1930 1.414214 0.000075\n",
"1931 1.414214 0.000076\n",
"1932 1.414214 0.000076\n",
"1933 1.414214 0.000079\n",
"1934 1.414214 0.000076\n",
"\n",
"[1935 rows x 2 columns]"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"data = {'x':[], 'y':[]}\n",
"df = pd.DataFrame(data)\n",
"df['x'] = x\n",
"df['y'] = y\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 72,
"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.scatter(x,y)\n",
"plt.ylim(-0.05, 0.45)\n",
"plt.title(\"Distancia em linha reta x Tempo A*-heuristica2\")\n",
"plt.xlabel(\"Distancia em linha reta entre os pontos inicial e final\")\n",
"plt.ylabel(\"Tempo da busca A* com a segunda heuristica\")\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
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment