Last active
November 13, 2019 18:44
-
-
Save luizcartolano2/dc3095b8f5930d8a2572a8be6b8f4920 to your computer and use it in GitHub Desktop.
Código dos testes feitos no Projeto de MC906
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Buscas supervisionadas" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Imports" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 94, | |
"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 heapq\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": 81, | |
"metadata": { | |
"scrolled": true | |
}, | |
"outputs": [], | |
"source": [ | |
"# make the dict where the key is associated with his neighbors\n", | |
"# 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": 71, | |
"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", | |
"# elif (act[1] == 40 and ((0<= act[0] < 18) or (19<= act[0] <= 18))):\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 - Teste 1" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Calculo do custo da busca e o caminho percorrido" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"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 = astar_search(robot_problem, h=robot_problem.heuristic_1)\n", | |
"print(node)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"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": 9, | |
"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": 10, | |
"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=(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", | |
"\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 supervisionada A*: Heuristica 2 - Teste 1" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Calculo do custo da busca e o caminho percorrido" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"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 = astar_search(robot_problem, h=robot_problem.heuristic_2)\n", | |
"print(node)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"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": 13, | |
"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": 14, | |
"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 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=(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", | |
"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 supervisionada A*: Heuristica 1 - Teste 2" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Calculo do custo da busca e o caminho percorrido" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 18, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"132\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(node.path_cost)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"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": 20, | |
"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": 21, | |
"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=(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", | |
"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 supervisionada A*: Heuristica 2 - Teste 2" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Calculo do custo da busca e o caminho percorrido" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 22, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"80\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(node.path_cost)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 23, | |
"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": 24, | |
"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": 25, | |
"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=(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", | |
"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 supervisionada A*: Heuristica 1 - Teste 3" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Calculo do custo da busca e o caminho percorrido" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 28, | |
"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 = astar_search(robot_problem, h=robot_problem.heuristic_1)\n", | |
"print(node.path_cost)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 29, | |
"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": 30, | |
"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": 31, | |
"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 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=(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 supervisionada A*: Heuristica 2 - Teste 3" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Calculo do custo da busca e o caminho percorrido" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 32, | |
"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 = astar_search(robot_problem, h=robot_problem.heuristic_2)\n", | |
"print(node.path_cost)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 33, | |
"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": 34, | |
"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": 35, | |
"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 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=(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": 93, | |
"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": 83, | |
"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": 84, | |
"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\n", | |
"\n", | |
"def g(n): return n.path_cost" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Busca supervisionada: A* Heurística 1 - Printa todos os nos visitados" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Calculo do custo da busca e o caminho percorrido" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 95, | |
"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 = best_first_search(robot_problem,f=lambda n: g(n) + robot_problem.heuristic_1(n))\n", | |
"node = astar_search(robot_problem, h=robot_problem.heuristic_1)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 92, | |
"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": 96, | |
"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": 97, | |
"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": 98, | |
"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()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Busca supervisionada: A* Heurística 2 - Printa todos os nos visitados" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Calculo do custo da busca e o caminho percorrido" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 99, | |
"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 = node = best_first_search(robot_problem,f=lambda n: g(n) + robot_problem.heuristic_2(n))\n", | |
"node = astar_search(robot_problem, h=robot_problem.heuristic_2)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 90, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"x_reach2 = []\n", | |
"y_reach2 = []\n", | |
"for nod in list(reached):\n", | |
" x_reach2.append(nod[0])\n", | |
" y_reach2.append(nod[1])" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 100, | |
"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": 101, | |
"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": 102, | |
"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_reach2,y_reach2,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": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"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