Quali sono gli algoritmi di ricerca del percorso? [chiuso]


Risposte:


34

Se stai cercando di ricercare e conoscere il pathfinding in generale, suggerirei sicuramente di imparare più di un solo algoritmo. Ti consigliamo di comprendere i concetti generali ma di essere in grado di applicarli a qualsiasi cosa tu stia lavorando. La maggior parte degli sviluppatori di giochi che hanno bisogno di fare un serio pathfinding finiscono per scrivere i propri algoritmi personalizzati, anche se altamente basati su soluzioni note, ogni gioco è diverso e avrà requisiti diversi.

Comincerei leggendo alcuni dei metodi più conosciuti come A *, le ricerche Algorithm, Depth e Breadth-First di Dijkstra. Ci sono molte buone informazioni su Internet su ognuna di queste. ( http://en.wikipedia.org/wiki/Pathfinding )

Mentre li leggi, prendi nota degli aspetti positivi e negativi di ciascun approccio, nonché del tipo di dati su cui l'algoritmo può operare. Può essere applicato a percorsi tridimensionali? Può essere modificato per tenere conto della nostra IA umana che vuole evitare le mine antiuomo nella mappa?

Quando si tratta di pathfinding, A * è praticamente il biglietto d'oro che tutti usano. Dovresti assolutamente sapere come funziona. ( http://en.wikipedia.org/wiki/A*_search_algorithm )

Ecco un buon esempio di A * in quanto si applica a un gioco RTS, che deve prendere in considerazione entità di dimensioni diverse: http://aigamedev.com/open/tutorials/clearance-based-pathfinding/

In bocca al lupo!


2
+1 per il bit sui programmatori che devono imparare ad adattare le soluzioni conosciute. Questo è qualcosa che molti aspiranti sviluppatori di giochi non comprendono.
Ingegnere

22

Gli algoritmi di pathfinding sono sostanzialmente algoritmi di risoluzione dei problemi di ricerca di grafici.

http://en.wikipedia.org/wiki/Pathfinding#Algorithms

Il più noto è l'algoritmo di Djikstra: http://en.wikipedia.org/wiki/Dijkstra's_algorithm

e la sua variante A * algoritmo di ricerca: http://en.wikipedia.org/wiki/A*


2
L'ultimo collegamento è interrotto perché il * non è visto come parte di esso: en.wikipedia.org/wiki/A%2A
Hendrik Brummermann

fixx0r3d entrambi i collegamenti
tenpn

Algoritmi di ricerca di grafici semplici sono solo le basi per l'individuazione dei percorsi.
martinkunev,

13

Questa è una grande risorsa iniziale che prende in esame tutti gli aspetti della ricerca del percorso in un approccio molto facile da digerire.

Appunti di Amit sul Path-Finding

... Pathfinding risolve il problema di trovare una buona strada dal punto di partenza all'obiettivo ― evitando ostacoli, evitando nemici e minimizzando i costi (carburante, tempo, distanza, equipaggiamento, denaro, ecc.). Il movimento affronta il problema di prendere una strada e spostarsi lungo di essa. È possibile spendere i tuoi sforzi solo su uno di questi. Ad un estremo, un sofisticato pathfinder accoppiato con un banale algoritmo di movimento ...


1
+1 per Amit. Ho imparato A * dal suo sito Web 10+ anni fa.
dieci

Ottime illustrazioni anche. Alta qualità.
scimmia

5

Il pathfinding è un problema piuttosto risolto ... come menzionato in quasi tutte le risposte qui, alcune variazioni su A * saranno quelle che usi.

La sfida più grande per me è come vuoi rappresentare il tuo percorso . Utilizzo di una griglia, pathnodes, navmeshes, griglie gerarchiche o altre strutture complesse, ecc.

Non ho in mente riferimenti specifici, ma esplorare AIGameDev ti darà tutti i tipi di idee su cosa c'è là fuori.

Basta ricordare che ogni rappresentazione ha i suoi pro e contro; non si tratta di trovare il "migliore", si tratta di trovare quello che si adatta meglio al tuo gameplay .



4

Esistono diversi algoritmi per la ricerca di percorsi.

Uno dei più popolari è probabilmente A * ( A-Star ). È un algoritmo molto utile se si dispone di una funzione euristica in grado di fornire costi stimati per raggiungere un obiettivo (ad esempio, la distanza della linea di mira dall'obiettivo). Un * è molto utile per trovare il percorso più breve da un punto iniziale a un punto finale.

Oltre a questo c'è anche l'algoritmo di Dijkstra che è molto utile per trovare l'elemento più vicino tra più oggetti. Per esempio. se vuoi scoprire quale potenziamento (o simile) è più vicino al tuo personaggio di gioco.

Ci sono molti altri algoritmi là fuori, ma immagino che A * sia di gran lunga il più popolare. Mat Buckland ha un eccellente capitolo su Path-Finding nel suo libro di programmazione AI per esempio . Ti incoraggio vivamente a procurartene una copia. Altrimenti troverai un sacco di informazioni online cercando "A Star search".


Oh mio. Mentre scrivevo questo, la stessa risposta è stata data circa un milione di volte. Mi dispiace :)
bummzack

Ho appena notato che il libro in questione è anche su Google Libri (anche se non completo). Leggi qui: books.google.com/books?id=gDLpyWtFacYC
bummzack



2

Questo non è molto di base, ma abbiamo discusso ampiamente degli algoritmi grafici nella nostra classe di algoritmi lo scorso autunno 2009. Abbiamo usato questo libro,

Introduzione agli algoritmi, terza edizione di Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest e Clifford Stein

http://mitpress.mit.edu/algorithms/

e ha anche lezioni di accompagnamento su YouTube da una classe del MIT.

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures/

I capitoli 17, 18 e 19 hanno trattato dei percorsi più brevi.


2

Vedi [Algoritmi di ricerca di grafici e alberi] su Wikipedia 1 . Sono praticamente solo una variante di State Space Search, devi solo passare attraverso tutti questi e trovare dove differiscono.

C'è anche la diffusione collaborativa , che è uno degli algoritmi precedentemente menzionati fatto in modo interessante.


+1 Quel documento su Collaborative Diffusion è piuttosto interessante.
Ingegnere

1
Penso che il collegamento sia interrotto. Forse questo è quello corretto: scalablegamedesign.cs.colorado.edu/gamewiki/index.php/…
pek,

-2

Questo sembra interessante:

http://www.codeproject.com/Articles/455 Mi chiedo sia meglio di A *?


Benvenuti nel sito. Quello che hai dato è noto come risposta solo link, che è scoraggiato. Sarebbe meglio riassumere le qualità del metodo nella tua risposta. Potresti quindi discutere se è meglio della semplice A *, piuttosto che meditarlo pigramente nel testo.
Seth Battin,

Vedo che la tua risposta è più o meno alla pari per questa domanda (che è sfortunata). Non intendo individuarti, ho semplicemente passato la tua voce nella coda di revisione dei primi post . Indipendentemente da ciò, migliorare la tua risposta è sempre il benvenuto.
Seth Battin,

Sto solo per ripetere ciò che Seth ha detto. Riassumere.
Grigio
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.