A * è efficace anche quando gli ostacoli si muovono?


30

Sto appena iniziando a conoscere il percorso e ho esaminato l'algoritmo A * e la mia preoccupazione principale è che tutti gli esempi che ho visto mostrano ostacoli statici che calcola.

Se ho ostacoli commoventi, ad esempio altri personaggi, muovendosi così come il personaggio deve orientarsi, suppongo che dovrò eseguire l'algoritmo ogni fotogramma, ma sono preoccupato che diventerà piuttosto costoso affinché l'hardware elabori ogni fotogramma per ciascun attore in movimento.

Quindi A * è ancora abbastanza efficiente da usare ogni volta che anche gli ostacoli si muovono, o esiste un altro metodo di ricerca del percorso che gestisce gli ostacoli in movimento in modo più eloquente?

Risposte:


27

Esistono più algoritmi che sono molto più veloci di A * quando è necessario ricalcolare un percorso con ostacoli in movimento. Vedi qui sotto "Ricalcoli semplici".

Tuttavia, probabilmente non troverai una soluzione standard per nessuno di essi, quindi nel 99% dei casi sono eccessivi per un gioco. Il tuo tempo verrebbe speso meglio utilizzando una soluzione A * esistente e completamente ottimizzata e usando i trucchi esistenti comuni per accelerare l'individuazione dei percorsi nei giochi:

  • Ricalcola il percorso migliore solo a intervalli rari
  • Condivisione dei percorsi migliori tra più unità ( esempio )
  • Creazione di un grafico gerarchico in modo da ricalcolare solo parte del percorso

ecc. Puoi trovare maggiori informazioni su questi trucchi e altro su questo sito o sulle pagine A * di Amit


10

Sì. A * è ancora la strada da percorrere in quasi tutti i casi. È il calcolo del costo del nodo che diventa dinamico e quindi più complesso da calcolare e tracciare.

Se sai già dove saranno gli ostacoli mobili in futuro, il tuo A * può tenere conto della temporalità degli ostacoli nella funzione di costo.

Ad esempio: questo nodo verrà raggiunto in 4 tick, occupato dal tick # 3 fino al tick # 6, quindi il costo del viaggio su questo nodo è 6 - 4 = +2 tick. Questo potrebbe essere ancora il percorso migliore.

Anche la direzione di marcia dell'ostacolo deve essere presa in considerazione.

Se non lo sai in anticipo, non puoi assumere ostacoli e ricalcolare il percorso quando gli ostacoli vengono raggiunti, ma dovrai fare qualcosa per deadlock e livelock. (Lo stesso vale se puoi prevedere dove si troveranno gli ostacoli ma quello in sé è un tipo di evitamento di deadlock / livelock e che può essere abbastanza buono per il tuo scopo.)

Un deadlock è quando entrambi aspettano che l'altro si sposti e nessuno si muova.

Un livelock è quando entrambi ( o più <- questo è importante da considerare) si muovono per evitare l'altro nella stessa direzione e finiscono per andare avanti e indietro senza progressi.

Risolvere i livelock può diventare molto complesso e questo dipende interamente dalle regole e dai meccanismi di collisione del tuo gioco (ad esempio: dovrebbero combattere e distruggere l'ostacolo?).

Spesso ritorna ad avere gli oggetti in movimento che pianificano le prenotazioni di nodi / percorsi (non dimenticare le cancellazioni quando cambiano percorso o muoiono) in modo che altri oggetti in movimento possano pianificare in anticipo.

Una volta che hai queste informazioni puoi anche pianificare le intercettazioni.


19
Oh mio Dio, "livelock" - hai descritto quella terribile schivata sinistra-destra che finisco per fare sempre nei corridoi.
Ethan The Brave,

2
Una semplice soluzione live / deadlock è quella di scegliere casualmente tra le opzioni disponibili (ad es. 50% di probabilità di non muoversi e 50% di possibilità di spostarsi a sinistra). Finché ogni attore sceglie in modo casuale, c'è una possibilità diversa da zero che il blocco venga risolto.
Draco18s

@ Draco18s E aumenta esponenzialmente le dimensioni del tuo flailing avanti e indietro fino a quando uno non cede (potrei aver appena descritto come vengono risolte le collisioni Ethernet!)
Cort Ammon - Reinstalla Monica il

Suppongo che potrebbero invece giocare a Rock Paper Scissors o una partita amichevole del dilemma del prigioniero di Petri Dish . ; P
Draco18s
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.