He codificado mi primer algoritmo ligeramente complejo, una implementación del algoritmo A Star Pathfinding. Seguí algunos Python.org advice al implementar gráficos para que un diccionario contenga todos los nodos a los que está vinculado cada nodo. Ahora, dado que esto es todo por un juego, cada nodo es realmente solo un mosaico en una grilla de nodos, por lo tanto, cómo estoy resolviendo la heurística y mi referencia ocasional a ellos.Python: acelere un algoritmo Star Path Pathfinder
Gracias a timeit sé que puedo ejecutar esta función con éxito un poco más de cien veces por segundo. Es comprensible que esto me sienta un poco incómodo, sin otros elementos de juego, como los gráficos o el cálculo de la lógica del juego. Así que me encantaría ver si alguno de ustedes puede acelerar mi algoritmo, no estoy completamente familiarizado con Cython o su parentesco, no puedo codificar una línea de C.
Sin más divagaciones, aquí está mi A Función estrella
def aStar(self, graph, current, end):
openList = []
closedList = []
path = []
def retracePath(c):
path.insert(0,c)
if c.parent == None:
return
retracePath(c.parent)
openList.append(current)
while len(openList) is not 0:
current = min(openList, key=lambda inst:inst.H)
if current == end:
return retracePath(current)
openList.remove(current)
closedList.append(current)
for tile in graph[current]:
if tile not in closedList:
tile.H = (abs(end.x-tile.x)+abs(end.y-tile.y))*10
if tile not in openList:
openList.append(tile)
tile.parent = current
return path
'mientras len (openList) no es 0:' me hace temblar ... 'mientras openlist:' hace lo mismo. –
La línea 'return retracePath (current)' es incorrecta (creo), deberás llamar 'retracePath (current)', then 'return path' actualmente si se encuentra el nodo final, devuelve' None' –