Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Pathfinding Softwaretechnologie II, 8.5.2008. 1Der Star unter den Pathfinding- Algorithmen: A* - A* findet den kürzesten Weg zwischen zwei Punkten - A*

Ähnliche Präsentationen


Präsentation zum Thema: "Pathfinding Softwaretechnologie II, 8.5.2008. 1Der Star unter den Pathfinding- Algorithmen: A* - A* findet den kürzesten Weg zwischen zwei Punkten - A*"—  Präsentation transkript:

1 Pathfinding Softwaretechnologie II, 8.5.2008

2 1Der Star unter den Pathfinding- Algorithmen: A* - A* findet den kürzesten Weg zwischen zwei Punkten - A* sucht nicht blind in jede Richtung, sondern schätzt die beste Richtung ab -daher schnell & effizient -viele Weiterentwicklungen und Variationen des Basisalgorithmus -kann nicht nur Pfade finden, für viele Problemstellungen geeignet

3 Voraussetzungen: -map / graph: das gesamte Gelände - nodes: repräsentieren jeweils einen Punkt oder ein Teilgebiet der Karte -distance / heuristic: Einschätzung des Wertes einer node (z. B. Distanz vom Knoten bis zum Ziel) -cost: Kosten einer node oder der Verbindung zwischen zwei nodes (z. B. höhere Kosten wenn es bergauf geht oder durch Feindesland)

4 daraus Berechnung von drei Variablen für jede node: -g (goal): Kosten vom Startpunkt bis zu diesem Knoten -h (heuristic):geschätzte Kosten von diesem Knoten bis zum Zielpunkt -f (fitness):Summe aus g und h -> Kostenschätzung des gesamten Pfades durch diesen Knoten

5 außerdem zwei Listen: -open list:nicht erkundete Knoten, zu Beginn des Algorithmus nur der Startpunkt -closed list:vollständig erkundete Knoten -ein Knoten ist vollständig erkundet, wenn g, h und f für ihn sowie alle seine Nachbarn berechnet sind und diese Nachbarn komplett auf die open list aufgenommen wurden

6 Der Algorithmus 1. Let P = the starting point. 2. Assign f, g and h values to P. 3. Add P to the Open List. At this point, P is the only node on the Open list. 4. Let B = the best node from the Open list (best node has the lowest f-value) a. If B is the goal node, then quit - a path has been found. b. If the Open list is empty, then quit - a path cannot be found. 5.Let C = a valid node connected to B. a. Assign f, g, and h values to C. b. Check whether C is on the Open or Closed list. i. If so, check whether the new path is more efficient (lower f-value) 1. If so, update the path. ii. Else, add C to the Open list. c. Repeat step 5 for all valid children of B. 6.Repeat from step 4.

7 - g ist eindeutig zu berechnen: Kosten bis zum aktuellen Knoten - Berechnung von h? - abhängig vom Anwendungszweck - hier: einfache Abschätzung der Distanz bis zum Zielknoten z. B.h = | dx - sx | + | dy - sy | (dx, dy) Zielknoten / (sx, sy) Startknoten - nur Schätzung, tatsächliche Distanz kann abweichen! - Schätzmethode wichtig für Erfolg & Schnelligkeit des Algorithmus

8 - Beispielentwurf einer Klasse für A* class _asNode { public: _asNode(int, int); int f, g, h; int x, y; int numchildren; int number; _asNode *parent; _asNode *next; _asNode *children[8]; void *dataptr; };

9 - benötigt werden weiterhin zwei verknüpfte Listen, um die open List und closed List zu realisieren - eine Methode zum Verknüpfen zweier Knoten parent child, die die Schritte 5a und 5b des Algorithmus implementiert - außerdem eine Methode, die die g-Werte aktualisiert Beispiel: Ein Knoten hat bisher g = 5 für den kürzesten Pfad, der vom Startpunkt bis zu ihm führt. Nun wird über einen benachbarten Knoten ein kürzerer Pfad zu ihm gefunden und g muss korrigiert werden. -praktisch sind individuelle Kosten- und Validisierungsfunktionen, die die A*-Klasse flexibel einsetzbar machen

10 Fazit - der Algorithmus A* an sich ist simpel -die Kunst liegt darin, seine Ergebnisse und seinen Zeitverbrauch zu optimieren -Ansatzpunkte hierfür: Kostenfunktion, Ablegen und Suchen der Knoten in den beiden Listen -wie Kosten und Distanz/Heuristik zu berechnen sind, muss von Anwendung zu Anwendung gestaltet werden; das Grundgerüst von A* bleibt bestehen

11 2. Generic A* Machine - mit einer generischen A*-Maschine lassen sich weit mehr Probleme lösen als das Finden von Pfaden -Verwendung in Empire Earth für: Pathfinding, Terrainanalyse, Choke- point detection, Planen für Routen der AI, Wettererstellung und - bewegung, Mauerbau der AI, Wanderungen von Tieren auf der Karte -A* kann Pfad finden, aber auch das Negativ eines Pfades oder sogenanntes flood fill -flood fill -> alle erreichbaren Knoten füllen -einen unerreichbaren Zielpunkt angeben -Beispiel: um Wald zu formen, sollen alle nebeneinander stehenden Bäume gefunden werden

12 Konzept einer Generic A*-Machine? -storage class: Speicher für die erkundeten Pfadmöglichkeiten und open list / closed list -goal class: die Einheit selber, Start- und Ziel, Kostenfunktion, Validisierungsfunktion (TileIsOpen) -map: ein Raum, der durchsucht werden kann -> jegliche Formen von 2D-Arrays -engine: zentrale Einheit zur Durchführung

13 das Waldproblem Start

14 Ziel

15 Start Ziel

16 3. Optimierungen von A*: zeitkritische Berechnung Das Freeze-Problem: -Pathfinding benötigt zu viel Rechenzeit -> das Spiel hält so lange an, bis die Berechnungen komplett sind -unschöne Ruckler im Spielablauf -zusätzlich: im Mehrspielerbetrieb sind Rechner der Spieler unterschiedlich schnell -> Spiel kann dadurch out-of-sync geraten -Lösung: time-sliced pathfinding -pro Zeiteinheit stehen allen Pathfinding-Vorgängen auf der Karte nur eine bestimmte Anzahl Umdrehungen zur Verfügung -z. B. eine Umdrehung = ein Durchlauf des A*-Algorithmus

17 -Zuteilen von Zeitressourcen sorgt für konstante Framerate -will Spieler eine Einheit oder Gruppe von Einheiten zu einem bestimmten Punkt losschicken, könnten die Einheiten mit Zeitverzögerung reagieren -> unerwünscht -Lösung: Berechnung vorläufiger quick path

18 Quick path

19 Full path

20 Splice path

21 Final path

22 Schwächen -immer ein Trade-off looks vs. performance -Schwierigkeit: Einheiten erreichen das Ende des quick path, bevor der vollständige Pfad berechnet ist -Lösung könnte Zuteilung von Prioritäten zu den einzelnen pathfinding threads sein: die Pfadsuche, die am dringendsten fertig werden muss, erhält mehr Umdrehungen pro Runde Zeit als Pfadsuchen mit niedriger Priorität -eigene Pathmanager-Klasse hilfreich

23 4. Fortgeschrittene Geschwindigkeitsoptimierungen -wichtig: Maßzahl für Performance -neben sogenannten in-code timers (siehe Beispiel Umdrehungen) externe Benchmarks wie VTune (Intel) -mit Feedback bessere Bewertung einer Veränderung des Algorithmus möglich -Pathfinding so simpel wie möglich gestalten: z. B. einfach die Anzahl der vorhandenen Pfade reduzieren -Visualisierung der Pathfinding-Vorgänge ebenfalls hilfreich, kann vom Grafik-Team leicht implementiert werden

24 -fortgeschritten: Verwendung eigener Routinen statt Standard- Bibliothek, Speichersystem des Algorithmus oft der bremsende Flaschenhals -eigene verknüpfte Listen schreiben -die open list und closed list zu Hash-Tabellen umwandeln -memset nur auf die Teile des Speichers anwenden, die tatsächlich dreckig sind und nicht den gesamten Pool an Knoten neu initialisieren

25 5. Weitere Ideen -iterative deepening:ein Pathfinding-Algorithmus wird zunächst mit einem sehr kleinen Zeitvorrat gestartet, sollte er nicht zum Ende gekommen sein, beim nächsten Aufruf mit einem größeren Zeitbudget u.s.w. einfache Probleme -> schnell gelöst komplexe Probleme -> verwenden im ersten Schritt nicht zu viel Zeit Beispiel: mehrere Charaktere wollen durch eine Tür, sobald der erste Charakter in der Tür steht, würden die Anderen Zeit für Pfadsuche verschwenden

26 -blockierte Knoten direkt auf die closed list setzen -Caching von bereits gescheiterten Suchen -> unnötige Redundanz kann vermieden werden -> auch mit Teilpfaden möglich -Wegpunkte-Funktion für Spieler: Spieler setzt Wegpunkte -> (in der Regel) weniger Arbeit für den Pathfinding-Algorithmus -A* nicht im Übermaß benutzen, z. B. bei einfachen Problemen zunächst eine gerade Linie versuchen

27 6. Alternative Pathfinding-Technik -weighted nodes Bot Sensor (anziehend) Sensor (abstoßend)

28 -Knoten ziehen den Bot an oder stoßen ihn ab -jeder Knoten hat eine Gewichtung -abstoßende Knoten könnten z. B. undurchdringliche Gebiete sein wie Wasser, Wald -aber auch gegnerische Einheiten -anziehende Knoten könnten nahe dem gesetzten Ziel liegen -denkbar auch freundliche, verbündete Einheiten oder Reperatur- / Heilmöglichkeiten

29 -ziemlich realistische Pfade möglich -die gewichteten Knoten können einen begrenzten Radius erhalten (sensitivity zone):

30 7. Preprocessed solutions -A* ist eine runtime solution -ist Rechenzeit während des Spielvorgangs knapp und steht ausreichend Speicher zur Verfügung, können Pathfinding-Vorgänge bereits vor Start des Spielablaufes geschehen -besonders Effektiv: das Terrain zu Beginn in durchsuchbare Einheiten zu unterteilen, z. B. grid, quadtree u.s.w. -Generierung einer Tabelle, die alle besten Pfade zwischen zwei Knoten festhält ->Zusammensetzung eines Pfades zur Laufzeit dann erheblich schneller

31 -vor dem Start eine Terrainanalyse: bestmögliche Repräsentation der Spielelandschaft durch ein System von Knoten -höhere Anzahl von Knoten und Kanten wirkt sich exponentiell auf die Rechenzeit von A* aus -eine eingängige Terrainanalyse zu Beginn kann z. B. ein großes Gebirge direkt ausschließen oder einen festgelegten Pfad definieren, wenn um ein spezielles Objekt navigiert werden soll - Nachteil: alles muss im Speicher festgehalten werden, Abwägungssache


Herunterladen ppt "Pathfinding Softwaretechnologie II, 8.5.2008. 1Der Star unter den Pathfinding- Algorithmen: A* - A* findet den kürzesten Weg zwischen zwei Punkten - A*"

Ähnliche Präsentationen


Google-Anzeigen