Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.70 KB | None | 0 0
  1. import pandas as pd
  2. import numpy as np
  3. import math
  4.  
  5. class Node:
  6.     def __init__(self, estacao, direta, real, total):
  7.         self.estacao = estacao
  8.         self.direta = direta
  9.         self.real = real
  10.         self.total = total
  11.         self.next = None
  12.  
  13. #Carregando valores. Primeiro, os nos de inicio e fim desejados
  14. inicioUser = input("estacao de inicio, apenas o numero ") - 1
  15. estacaoFinal = input("estacao de fim ") - 1
  16.  
  17. #Puxa os valores de distancias reais e diretas do excel
  18. distancias = pd.ExcelFile('/Users/andre/Documents/distancias.xlsx')
  19. diretas = distancias.parse('diretas')
  20. reais = distancias.parse('reais')
  21.  
  22. #Transforma numa matriz
  23. reais = reais.values
  24. diretas = diretas.values
  25.  
  26. #Deleta a primeira coluna, porque vem com info desnecessaria
  27. reais = np.delete(reais, 0, 1)
  28. diretas = np.delete(diretas, 0, 1)
  29.  
  30. node = Node(inicioUser, 0, diretas[inicioUser][estacaoFinal], estacaoFinal)
  31. listNode = [node]
  32. listNodeFinal = []
  33.  
  34. def aStar(nodeIn):
  35.     global listNode
  36.     global listNodeFinal
  37.     listNodeFinal.append(nodeIn)
  38.  
  39.     if nodeIn.estacao == estacaoFinal:
  40.         return nodeIn
  41.     else:
  42.         i = 0
  43.         while i < len(reais):
  44.             if not math.isnan(reais[nodeIn.estacao][i]):
  45.                 nodeTemp = Node(i, diretas[i][estacaoFinal], reais[nodeIn.estacao][i] + nodeIn.real, diretas[i][estacaoFinal]+ reais[nodeIn.estacao][i] + nodeIn.real)
  46.                 listNode.append(nodeTemp)
  47.                 nodeTemp.next = nodeIn
  48.             i += 1
  49.  
  50.     nodeTemp = listNode.pop(0)
  51.     listNode.sort(key = lambda x: x.total)
  52.     return aStar(listNode[0])
  53.  
  54. final = aStar(listNode[0])
  55.  
  56. while final is not None:
  57.     print(final.estacao + 1)
  58.     final = final.next
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement