Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from scipy.spatial import distance
- from PIL import Image ,ImageDraw
- import tkinter as tk
- class Nodo(object):
- def __init__(self, nombre, pos, adyNodes, ID, f, g, h, father):
- self.nombre = nombre
- self.adyNodes = adyNodes
- self.pos = pos
- self.ID = ID
- self.f = f
- self.g = g
- self.h = h
- self.father = father
- def name(self):
- print(self.nombre)
- def equ(self, nodo):
- if (self.nombre == nodo.nombre):
- return True
- return False
- infinity = float('inf')
- shinagawa = Nodo("Shinagawa", (340, 480), [], "JY25", infinity, infinity, 0, Nodo)
- osaki = Nodo("osaki", (290, 480), [], "JY24", infinity, infinity, 0, Nodo)
- gotanda = Nodo("gotanda", (250, 480), [], "JY23", infinity, infinity, 0, Nodo)
- meguro = Nodo("meguro", (220, 480), [], "JY22", infinity, infinity, 0, Nodo)
- ebisu = Nodo("ebisu", (180, 450), [], "JY21", infinity, infinity, 0, Nodo)
- shibuya = Nodo("shibuya", (180, 410), [], "JY20", infinity, infinity, 0, Nodo)
- harajuku = Nodo("harajuku", (180, 370), [], "JY19", infinity, infinity, 0, Nodo)
- yoyogi = Nodo("yoyogi", (180, 300), [], "JY18-JB11", infinity, infinity, 0, Nodo)
- shinjuku = Nodo("shinjuku", (180, 270), [], "JY17-JC05-JB10", infinity, infinity, 0, Nodo)
- shinokubo = Nodo("shin-okubo", (180, 200), [], "JY16", infinity, infinity, 0, Nodo)
- takadanobaba = Nodo("takadanobaba", (180, 160), [], "JY15", infinity, infinity, 0, Nodo)
- mejiro = Nodo("mejiro", (215, 130), [], "JY14", infinity, infinity, 0, Nodo)
- ikebukuro = Nodo("ikebukuro", (270, 90), [], "JY13", infinity, infinity, 0, Nodo)
- otsuka = Nodo("otsuka", (320, 90), [], "JY12", infinity, infinity, 0, Nodo)
- sugamo = Nodo("sugamo", (360, 90), [], "JY11", infinity, infinity, 0, Nodo)
- komagome = Nodo("komagome", (390, 90), [], "JY10", infinity, infinity, 0, Nodo)
- tabata = Nodo("tabata", (430, 110), [], "JY09", infinity, infinity, 0, Nodo)
- nishinippori = Nodo("nishinippori", (450, 130), [], "JY08", infinity, infinity, 0, Nodo)
- nippori = Nodo("nippori", (450, 160), [], "JY07", infinity, infinity, 0, Nodo)
- Uguisudani = Nodo("Uguisudani", (450, 180), [], "JY06", infinity, infinity, 0, Nodo)
- ueno = Nodo("ueno", (450, 205), [], "JY05", infinity, infinity, 0, Nodo)
- okachimachi = Nodo("okachimachi", (450, 230), [], "JY04", infinity, infinity, 0, Nodo)
- akihabara = Nodo("akihabara", (450, 260), [], "JY03-JB19", infinity, infinity, 0, Nodo)
- kanda = Nodo("kanda", (450, 300), [], "JY02", infinity, infinity, 0, Nodo)
- tokio = Nodo("tokio", (450, 330), [], "JY01-JC01", infinity, infinity, 0, Nodo)
- yurakucho = Nodo("yurakucho", (450, 360), [], "JY30", infinity, infinity, 0, Nodo)
- shimbashi = Nodo("shimbashi", (430, 390), [], "JY29", infinity, infinity, 0, Nodo)
- hamamatsucho = Nodo("hamamatsucho", (400, 410), [], "JY28", infinity, infinity, 0, Nodo)
- tamachi = Nodo("tamachi", (370, 440), [], "JY27", infinity, infinity, 0, Nodo)
- ochanomizu = Nodo("ochanomizu", (350, 235), [], "JC03-JB18", infinity, infinity, 0, Nodo)
- suidobashi = Nodo("suidobashi", (305, 275), [], "JB17", infinity, infinity, 0, Nodo)
- lidabashi = Nodo("lidabashi", (290, 290), [], "JB16", infinity, infinity, 0, Nodo)
- lichigaya = Nodo("lichigaya", (275, 305), [], "JB15", infinity, infinity, 0, Nodo)
- yotsuya = Nodo("yotsuya", (260, 325), [], "JB14", infinity, infinity, 0, Nodo)
- shinanomachi = Nodo("shinanomachi", (235, 340), [], "JB13", infinity, infinity, 0, Nodo)
- sendagaya = Nodo("sendagaya", (195, 340), [], "JB11", infinity, infinity, 0, Nodo)
- shinagawa.adyNodes = [(tamachi, 2.2), (osaki, 2)]
- osaki.adyNodes = [(shinagawa, 2), (gotanda, 0.9)]
- gotanda.adyNodes = [(osaki, 0.9), (meguro, 1.2)]
- meguro.adyNodes = [(gotanda, 1.2), (ebisu, 1.5)]
- ebisu.adyNodes = [(meguro, 1.5), (shibuya, 1.6)]
- shibuya.adyNodes = [(ebisu, 1.6), (harajuku, 1.2)]
- harajuku.adyNodes = [(shibuya, 1.2), (yoyogi, 1.5)]
- yoyogi.adyNodes = [(harajuku, 1.5), (shinjuku, 0.7), (sendagaya, 1.0), (shinjuku, 0.7)]
- shinjuku.adyNodes = [(yoyogi, 0.7), (shinokubo, 1.3), (ochanomizu, 1.5), (yoyogi, 0.7)]
- shinokubo.adyNodes = [(shinjuku, 1.3), (takadanobaba, 1.4)]
- takadanobaba.adyNodes = [(shinokubo, 1.4), (mejiro, 0.9)]
- mejiro.adyNodes = [(takadanobaba, 0.9), (ikebukuro, 1.2)]
- ikebukuro.adyNodes = [(mejiro, 0.9), (otsuka, 1.8)]
- otsuka.adyNodes = [(ikebukuro, 1.8), (sugamo, 1.1)]
- sugamo.adyNodes = [(otsuka, 1.1), (komagome, 0.7)]
- komagome.adyNodes = [(sugamo, 0.7), (tabata, 1.6)]
- tabata.adyNodes = [(komagome, 162), (nishinippori, 0.8)]
- nishinippori.adyNodes = [(tabata, 0.8), (nippori, 0.5)]
- nippori.adyNodes = [(nishinippori, 0.5), (Uguisudani, 1.1)]
- Uguisudani.adyNodes = [(nippori, 1.1), (ueno, 1.1)]
- ueno.adyNodes = [(Uguisudani, 1.1), (okachimachi, 0.6)]
- okachimachi.adyNodes = [(ueno, 0.6), (akihabara, 1)]
- akihabara.adyNodes = [(okachimachi, 1), (kanda, 0.7), (ochanomizu, 0.9)]
- kanda.adyNodes = [(akihabara, 0.7), (tokio, 1.3)]
- tokio.adyNodes = [(kanda, 1.3), (yurakucho, 0.8), (ochanomizu, 2.6)]
- yurakucho.adyNodes = [(tokio, 0.8), (shimbashi, 1.1)]
- shimbashi.adyNodes = [(yurakucho, 1.1), (hamamatsucho, 1.2)]
- hamamatsucho.adyNodes = [(shimbashi, 1.2), (tamachi, 1.5)]
- tamachi.adyNodes = [(hamamatsucho, 1.5), (shinagawa, 2.2)]
- ochanomizu.adyNodes = [(tokio, 2.6), (shinjuku, 1.5), (akihabara, 0.9), (suidobashi, 0.8)]
- suidobashi.adyNodes = [(ochanomizu, 0.8), (lidabashi, 0.9)]
- lidabashi.adyNodes = [(suidobashi, 0.9), (lichigaya, 1.5)]
- lichigaya.adyNodes = [(lidabashi, 1.5), (yotsuya, 0.8)]
- yotsuya.adyNodes = [(lichigaya, 0.8), (shinanomachi, 1, 3)]
- shinanomachi.adyNodes = [(yotsuya, 1.3), (sendagaya, 0.7)]
- sendagaya.adyNodes = [(shinanomachi, 0.7), (yoyogi, 1)]
- class Enviroment:
- def __init__(self, nodos):
- self.nodos = nodos
- def display(self):
- for nodo in self.nodos:
- nodo.display()
- env = Enviroment(
- [shinagawa, osaki, gotanda, meguro, ebisu, shibuya, harajuku, yoyogi, shinjuku, shinokubo, takadanobaba, mejiro,
- ikebukuro, otsuka, sugamo, komagome, tabata, nishinippori, nippori, Uguisudani, ueno, okachimachi, akihabara,
- kanda, tokio, yurakucho,
- shimbashi, hamamatsucho, tamachi, ochanomizu, suidobashi, lidabashi, lichigaya, yotsuya, shinanomachi, sendagaya])
- def reconstructPath(closedSet, current, totalPath):
- if (current.father in closedSet):
- if (current.father not in totalPath):
- totalPath.append(current.father)
- current = current.father
- else:
- return totalPath
- return reconstructPath(closedSet, current, totalPath)
- def aStar(entrada, salida):
- global env
- for nodo in env.nodos:
- nodo.h = distance.euclidean(nodo.pos, salida.pos)/ 100
- openSet = [entrada]
- closedSet = [entrada]
- pathValue = 0
- entrada.g = 0
- entrada.f = entrada.g + entrada.h
- while len(openSet) != 0:
- current = openSet[0]
- for nodo in openSet:
- if nodo.f < current.f:
- current = nodo
- if current.equ(salida):
- inverso = closedSet[::-1]
- totalPath = [current]
- return reconstructPath(inverso, current, totalPath)
- openSet.remove(current)
- for pair in current.adyNodes:
- sum = pathValue + pair[1]
- if (sum < pair[0].g and pair[0] not in closedSet): # infinito al principio
- pair[0].father = current
- closedSet.append(pair[0])
- pair[0].g = sum
- pair[0].f = sum + pair[0].h
- if (pair[0] not in openSet):
- openSet.append(pair[0])
- path = []
- def setup():
- path = aStar(tamachi, yoyogi)
- anterior = path[0]
- img = Image.open('yamanoteLine.jpg')
- draw = ImageDraw.Draw(img)
- for nodo in path:
- draw.line((anterior.pos, nodo.pos), fill=(255, 255, 0), width=5)
- print (nodo.nombre)
- anterior = nodo
- img.show()
- setup()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement