Ho codificato il mio primo algoritmo leggermente complesso, un'implementazione dell'algoritmo A Star Pathfinding. Ho seguito alcuni Python.org advice sull'implementazione dei grafici, quindi un dizionario contiene tutti i nodi a cui è collegato anche ciascun nodo. Ora, dato che questo è tutto per un gioco, ogni nodo è in realtà solo una tessera in una griglia di nodi, quindi come sto elaborando l'euristica e il mio riferimento occasionale a loro.Python - Accelera un Algoritmo Pathfinding A Star
Grazie a timeit, so che posso eseguire questa funzione con successo un po 'più di cento volte al secondo. Comprensibilmente questo mi rende un po 'a disagio, questo è senza alcun' roba di gioco 'in corso, come grafica o calcolo della logica di gioco. Quindi mi piacerebbe vedere se qualcuno di voi può accelerare il mio algoritmo, sono completamente estraneo a Cython o è parente, non riesco a codificare una riga di C.
Senza altro vagante, ecco il mio A Funzione stella.
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
'mentre len (openList) non è 0:' mi fa rabbrividire ... 'mentre openlist:' fa lo stesso. –
La riga 'return retracePath (current)' non è corretta (credo), si shoudl chiama 'retracePath (current)', quindi 'return path' al momento se il nodo finale viene trovato, restituisce' None' –