Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Pathfinding- World Representation

Ähnliche Präsentationen


Präsentation zum Thema: "Pathfinding- World Representation"—  Präsentation transkript:

1 Pathfinding- World Representation
aus: artificial intelligence for games WS 2011/12 Softwaretechnologie II: Simulation und 3D Programmierung Dozent: Prof. Dr. phil. M. Thaller Referent: Marcel Schotten

2 Inhalt World Representation Tile Graph Dirichlet Domain
Points of Vibility Polygonal Meshes Cost Functions Path Smoothing Improving on A*

3 World representation

4 Quantization/Localization
Geometrie <-> Graphen Quantization: Die Möglichkeit, sowohl die Position des Spielers, als auch die der Objekten, in Knoten eines Graphen zu wandeln. Localization: Bei der Bewegung eines Spielers auf den generierten Weg des Pathfinders, müssen die Knoten des Plans in die verschiedenen Positionen im Spiel umgewandelt werden können.

5 Darstellung der Welt Grund: Ansatz:
Eine Spielewelt besteht aus geometrischen Formen, doch der Pathfinder basiert auf einem Graphen aus Knoten und Verbindungen. => Umsetzung von der Geometrie und den Bewegungsmöglichkeiten, zu Knoten und Verbindungen wird benötigt. Ansatz: Die Spiele-Welt wird aufgeteilt über Aufteilungs-Modelle Wichtige Eigenschaften: Quantization/Localization; Generation; Vailidity

6 Generation Möglichkeit durchgehenden Freiraum in Regionen und Verbindungen aufzuteilen. Eine gewisse Anzahl der Methoden sind standardisiert. Aufteilung in manuell oder algorithmisch: Manuell -> bessere Ergebnisse, kann zuweilen auf das jeweilige Level abgestimmt werden. most used: Dirichlet Domain. Algorithmisch -> einfacher da automatisch. Most used: tile graph, points of visibility, polygonal mesh.

7 Vailidity I Befasst sich mit der Gültigkeit des vom Pathfinder generierten Plan. Dem Charakter muss es ermöglicht werden, sofern es im Plan inbegriffen ist, von einem beliebigen Punkt im Knoten A, zu einem beliebigen Punkt im Knoten B zu reisen. Ist dies nicht möglich ist der Plan nutzlos und somit ungültig. Resultat: Ein Aufteilungs-Modell ist nur dann gültig, wenn alle Punkte in zwei mit einander verbundenen Regionen erreicht werden können.

8 Vailidity II

9 Tile graphs

10 Definition Ehemalige Spiele in 2D basierten auf diesem Modell. Heute werden die Platten dazu benutzt Gitter zu erstellen, auf denen 3D-Modelle platziert werden können. Diese Gitter werden dann in Graphen umgewandelt. Meist genutzten Formen sind Quadrate. Aufteilungs-Modell: Knoten repräsentieren die Platten der Spielwelt.// Jede Platte hat eine offensichtliche Menge an Nachbarn.// Verbindungen bestehen zwischen unmittelbaren Nachbarn.

11 Quantization//Localization
Schneller Prozess Im Fall eines Square-Grids, werden die x- und z-Koordinaten des Charakters benutzt um festzustellen, in welchem Quadrat er sich gerade befindet: tileX = floor(x / tileSize) tileZ = floor(z / tileSize) Floor() gibt eine Funktion an, die den höchsten Integer-Wert zurückgibt, die kleiner-gleich seines Arguments ist. tileX und tileZ indentifizieren die Platte innerhalb des Graphen. Der Repräsentationspunkt der Platte (meistens Mittelpunkt) um einen Knoten ist die Position im Spiel.

12 Generation//Validity
Automatische Generierung in Echtzeit Viele Spiele erlauben das Blocken von einzelnen Platten Der Graph gibt somit keine Verbindung zu diesen gesperrten Platten zurück und es wird vom Pathfinder nicht versucht, durch sie hindurch zu gehen. Validity: Platten werden entweder komplett geblockt oder werden leer gelassen. Werden einzig die leeren Platten mit einander verbunden so ist der Graph gültig. Sind die Graph-Knoten teilweise geblockt, ist der Graph vielleicht ungültig, das liegt aber an der Form der Blockade.

13 Generation//Validity.2

14 Usefullness Die Darstellungsform die am einfachsten zu regenerieren ist => automatisch eine hohe Anzahl an Platten die dem Pathfinder eine Menge Arbeit machen. Wird nun ein vom Pathfinder zurückgegebener Plan auf einen Graphen gezeichnet, so wirkt dieser blockiert und ungleichmäßig, was die Bewegung des Charakters „strange“ wirken lässt.

15 Dirichlet domains

16 Definition//division scheme
Auch ‚voronoir polygon‘ genannt. Bezeichnet die Region um einen von vielen Quellpunkten, wessen inneres aus allem besteht, welches näher zum Punkt liegt als anderes. Division Schemes: Characteristic Point: assoziierter Punkt für die Knoten. Die Quant. benutzt Platz um alle Lokalisierungen der Dirichlet Domain eines Punkte in einen Knoten zu speichern. Für die Bestimmung der Position im Spiel, muss der Characteristic Point gefunden werden, der am nahe liegensten ist.

17 Vorstellung

18 Dirichlet domains II Man stelle sich die ‚dirichlet domains‘ als eine kegelförmige Region vor, die nach unten von den Quell-Punkten hinweg geht. Auch hierbei entstehen einzelne Problematiken: Grund-Idee wurde erweitert um ‚falloff functions‘ wodurch manche Knoten einen größeren Zug mit sich bringen als Andere in der Übertragungsphase. => weighted dirichlet domain Jeder Punkt hat einen assoziierten Breite-Wert der die Größe des Kegels kontrolliert. Wird dieser Wert verändert, verändert sich auch die Erweiterung des Kegels.

19 Dirichlet domains ii.2 Dient zur Visualisierung der Problematik der manuellen Änderung der Breite-Werte der Quellpunkte

20 Dirichlet domains ii.3 Verbindungen werden zwischen angrenzenden Domänen gezogen. Die Vorlage für diese Verbindungen findet man in den mathematischen Strukturen des Voronoi Diagramms: Delaunay triangulation Ecken sind die Verbindungen im Graphen. Scheitelpunkte sind die Characteristic Points der Domäne.

21 Dirichlet domains iii Quantization//Localization:
Quant. -> naheliegender Characteristic Point. Lok. -> ebenfalls naheliegenden C.-Pukte. Suche ist zeit konsumierend (O(n), wobei n die Anzahl der Domänen ist). => partitionierende Algorithmus erlauben alleinigen Bezug auf naheliegende Punkte.

22 Dirichlet domains iv Validity: Usefulness:
Dadurch das verschiedene Formen erstellt werden, besteht die Möglichkeit das das Reisen zwischen zweier Domänen über eine dritte Domäne führt, die eventuell vom Pathfinder nicht aufgeführt wird und dadurch unpassierbar wird. => Probleme folgen: Der Graph ist ungültig. Usefulness: Oft genutzt, Vorteil des einfachen Programmierens (automatische Generierung), einfache Änderungen, es ist möglich die komplette Struktur zu ändern.

23 Points of visibility

24 Points of visibility I Definition: PoV besteht aus einem Weg, bestimmt und bestehend aus Beugungspunkten an verschiedenen gewölbten Scheitelpunkten der Umgebung. Der Unterschied zwischen 2D und 3D liegt bei der Erscheinung der Beugungspunkte: 2D nur auf den gewölbten Scheitelpunkten 3D auf den Scheitelpunkten oder auf gewölbten Polygonen Festlegung durch ‚characteristic points‘, die für die Geometrie ausgerechnet werden können, indem selbige minimal erweitert und anschließend ausgerechnet wird, => Ecken der neuen Geometrie.

25 Points of visibility ii
Knoten = Beugungspunkte im kürzesten Pfad. Anzahl der Punkte im normalen Game Level sind zu groß: Einfachere Version: Die Beugungspunkte verwenden, wo sich die Geometrie am meisten verändert. => können von der Kollisions-Geometrie verwendet werden Anschließend werden die Punkte als Knoten für den Graphen genutzt. Verbindungen entstehen durch Strahlen, die zwischen den Knoten hin und her geworfen. Treffen sie auf keine Hindernisse oder Geometire, besteht eine Verbindung. Durch diese Verbindung erhält diese Teilungsmöglichkeit ihren Namen, da man von einem Punkt aus, einen oder mehrere Punkte sehen kann.

26 Beispiel

27 Points of visibility iii
Quantization//Localization//Vailidity: ‚PoV‘ ist Teil der Darstellung der ‚dirichlet domains‘. Wenn die ‚dirichlet domains‘ noch dazu benutzt werden, die Punkte in Knoten zu wandeln, kann es geschehen, das sich Punkte, die mit einander verbunden sind, nicht erreichen können. Dadurch wird auch der Graph dieser Methode unbrauchbar, genauso wie bei den dirichlet domains.

28 Points of visbility iv Usefulness:
Beliebte Methode zur automatischen Generierung von Graphen. Aber das Ergebnis ist die Mühe nicht wert: Viele Korrekturen müssen per Hand eingegeben werden, was dazu führt das die eigentliche Generierung soweit aufgebrochen wird, das es nicht mehr die ursprüngliche Form aufweist. Der Autor schwört für die automatische Variante auf die ‚polygonal meshes‘ und für die manuelle Variante auf die ‚dirichlet domains‘.

29 Polygonal Meshes

30 Definiton Die grafische Struktur die sich hinter dieser Methode befindet, dient als Basis für die Repräsentation durch den Pathfinder. Jedes Level besteht aus Polygonen, die wieder mit anderen verbunden sind, ob nun eine KI vorhanden ist oder nicht. Trotz fehlender KI müssen die Verbindungen der einzelnen Regionen vom Designer spezifiziert werden.

31 Quantization//Localization
Benutzung von Boden-Polygone als Regionen => Knoten im Graphen. Graph basiert auf der Maschen-Geometrie des Levels => nav‘ mesh Knoten sind dann verbunden, wenn 2 Polygone sich eine Kante oder Ecke teilen, dadurch entstehen bei anderen Formen wie dem Dreieck oder dem Quadrat, eine Vielzahl von Verbindungen. Nav‘ mesh: Involvierung spezieller Bezeichnungen von Polygonen als Boden, für die Möglichkeit des Einbringen von Sound-Effekten oder Haftungs-Unterschiede, beim Auslösen des Boden-Polygons.

32 Quantization//Localization.2
Der Wert einer Position wird in einen Boden-Polygon umgewandelt der den selbigen Wert enthält. Welches Polygon ist das Richtige? Vorrausetzung: Wir wissen wo sich der Charakter vorher befunden hat (sprich: auf welchem Frame). Wenn wir das wissen, können wir davon ausgehen, das er sich im gleichen oder einem benachbartem Frame aufhält. => Diese Knoten werden als erstes getestet. Die ‚localization‘ kann jeden Punkt des Polygons benutzen, aber normal wird der geometrische Mittelpunkt genutzt.

33 Validity Validity//Usefulness
Regionen die mit den ‚polygonal meshes‘ erstellt worden, könnten problematisch sein. Grund: Bei verbunden Dreiecken zum Beispiel, kann das direkte Reisen gegebenenfalls zu Kollisionen führen. Die bessere Variante ist die Verbindungsherstellung über sogenannte Knoten die als ‚portals‘ definiert sind. (später)

34 usefulness Gehen wir von dieser Problematik aus, benötigen wir weitere Prozesse. Nicht alle ‚locations‘ in einem Boden-Polygon sind besetzt (manche sind zu nah ein einer Mauer), deshalb wird ein wenig Zubehör benötigt: Hat eine Beeinflussung der generierten Verbindungen durch geteilte Ecken und Kanten. => Meisten Probleme geben komplexe, gewölbte Bereiche ab: z.B. Türen! Hier profitieren Spiele von erweiterten Bewegungsmöglichkeiten für die verschiedenen geometrischen Formen.

35 Edges as nodes Unterschied: Verbindungen laufen nicht mehr über Standorte in den Boden-Polygonen ab, sondern deren Kanten dienen als Knoten. Somit generiert der Pathfinder einen Weg durch die Polygone über die Kanten. => Meist genutzt wird dies in der ‚portal-based rendering‘; dort sind Knoten Portale und eine Verbindung besteht zwischen allen Portalen die in Sichtweite sind. Bei den ‚polygonal meshes‘ fungieren die Ecken wie die Portale und haben ihren eigenen Knoten. Vorteil: eine dynamische Platzierung der Portale auf den Kanten und einen optimierten Weg durch den Pathfinder. Dies ist eine Art erweiterte Wegfindung!

36 Edges as nodes

37 Cost functions

38 Cost functions Die Kosten der kürzesten Verbindung, repräsentiert die Distanz. Je höher die Kosten um so weiter ist die Distanz. Die Kosten für die schnellste Verbindung, die Zeit. Distanz != Zeit, es ist schneller 10m zu laufen, als 10m zu klettern. Es können alle Arten von Sorgen zu den Kosten des Graphen hinzufügen. Bsp.: RTS-Games -> verschiedene Verbindungen werden teurer wenn jemand dem feindlichen Feuer ausgesetzt ist oder er sich in einem gefährlichen Terrain bewegt. Der richtige Weg wäre dann der mit den geringsten Kosten.

39 Cost functions ii Meistens sind die Kosten eine Mischung aus unterschiedlichen Bedürfnissen und es können verschiedene Kosten für verschiedene Charakter entstehen. Mögliche Anwendung: Eine Aufklärungs-Truppe besteht aus Charakteren die eine erhöhte Interesse an der Sichtbarkeit und der Geschwindigkeit haben. Eine schwere Artillerie hingegen hat eine Interesse in der Schwierigkeit der Umgebung. Dies nennt man ‚tactical pathfinding‘

40 Path smoothing

41 Definition Ein Weg der von einem Knoten zum anderen führt, kann ungleichmäßig erscheinen. Einige Darstellungsformen für die Spielewelt sind anfälliger für dieses Phänomen als andere. ‚Points of Visibility‘ Verbindungen wirken schon sehr geglättet wohingegen ‚tile-based graphs‘ extrem zur Ungleichmäßigkeit tendiert. Wenn das Path Smoothing also nicht durch das steuernde Verhalten des Charakters stattfindet, ist der Gebrauch eines Path Smoothing Algorithm unerlässlich.

42 The algorithm Ausgehend von der Gültigkeit:
-> Neuer Pfad=output path; bekommt Start-Knoten. -> Start und Ende sind im Input sowie im Output Path gleich. -> 3. Knoten aus geht ein Strahl reihenweise alle Knoten bis zum Endknoten ab. -> Wenn ein Strahl nicht durchkommt wird der vorherige Knoten vom Input Path zum Output Path hinzugefügt. -> Der Strahl wird vom nächsten Knoten im Input Path fortgesetzt. Wenn der Endknoten erreicht ist, wird dieser dem Output Path hinzugefügt. Der so entstandene Output Path ist der zu folgende Weg.

43 The algorithm ii Def smoothPath(inputPath): #If the path is only two nodes long, then we can‘t smooth #it, so return if len(inputPath) == 2: return inputPath #Compile an output path outputPath = [inputPath[0]] #Keep track of where we are in the input path we start at #2, because we assume two adjacent #nodes will pass the raycast inputIndex = 2 #Loop until we find the last item in the input while inputIndex < len(inputPath)-1: #Do the ray cast if not rayClear(outputPath[len(outputPath)-1], inputPath[inputIndex]): #The ray text failed, add the last node that passed to the output list outputPath += inputPath[inputIndex-1] #Consider the next node inputIndex++ #We‘ve reached the End of the input path, add the end node to the output and return it outputPath += inputPath[len(inputPath)-1] Return outputPath

44 Beispiel

45 Anhand des ‚hierarchical pathfinding‘
Improving on A* Anhand des ‚hierarchical pathfinding‘

46 Improvement Da A*-Algorithmus eine effiziente Methode zur Berechnung des Wegs ist, gibt es verschiedene Methoden um einzelne Wünsche abzudecken. Gerade in Spielen mit teils mehreren Millionen Plätzen ist es schonender für den Speicherplatz, den A*-Algorithmus zu erweitern: Hierarchical pathfinding: viele verschiedene Pläne müssen in kurzer Abfolge erstellt werden Dynamic pathfinding: erhöht die Geschwindigkeit der umplanung. Andere Variationen verringern dramatisch den Speichergebrauch zur Wegfindung, auf Kosten der Performanz.

47 Hierarchical pathfinding
Aufgebaut in mehrere Abschnitte: Angefangen mir einem Abstrakten Plan: Wir wollen nach London zum Büro von einem Freund Dieser Plan wird in viele kleinen Schritte aufgeteilt: Vom eigenem Haus zum Auto, vom Auto zum Flughafen, usw. Diese einzelnen Schritte werden auch wieder aufgeteilt: Von der Couch zum Auto-Schlüssel, damit dann zur Haustür,… Auch diese Schritte werden aufgeteilt: Von der Couch an dem Wohnzimmer-Tisch vorbei und dann über den Teppich zur Anrichte, zum Behälter mit den Schlüsseln So kann jeder Schritt im einzelnen bearbeitet und überschaut werden. Und das Wegfindungsproblem für verschiedene Fälle wird aufgeteilt.

48 The hierarchical pathfinding graph
Um das ‚hierarchical pathfinding‘ für A* zu unterstützen, muss die Informations-Struktur für den Graphen abgewandelt werden. Der Umgang mit Knoten und Verbindungen ist unterschiedlich zu denen aus den regulären Graphen.

49 Nodes Plätze/Orte zusammengefasst -> Cluster
Bsp.: Alle Plätze in einem Raum gehören zu einer Gruppe an Für den abstrakten Plan, zählt dieser als ein Punkt! Dieser Vorgang kann nun beliebig oft wiederholt werden. Die Knoten für alle Räume können zu einer Gruppe zusammen gefasst werden usw. => Wegfindung: Ein Knoten auf einer niedrigeren Stufe des Plans muss zu einem Knoten einer höheren Stufe des Plans konvertierbar sein. Eine typische Implementation zeichnet diese Schritte auf.

50 Nodes ii

51 Connections Verbindungen sind zwingend notwendig.
Verbindungen bauen sich zwischen den einzelnen Gruppierungen auf und agieren übergreifend auf den einzelnen Ebenen des Plans. Wenn wir uns nun von der Couch aufmachen Richtung Flughafen Köln/Bonn, passieren wir die Gruppierungen „Heimat“, „Auto“, „Autobahn“, „Flughafen“. Jede dieser Gruppierungen ist durch diese Route mit einander Verbunden!

52 Connection ii

53 Connection Costs Die Kosten zwischen zwei Gruppen, soll die Schwierigkeit der Reise reflektieren. Kann manuell eingegeben werden oder aus den Kosten der unteren Ebenen berechnet werden. Es gibt 3 Methoden die rein oder gemischt genutzt werden können, um die Kosten zu kalkulieren: Minimum Distance: Die Kosten der Bewegung zwischen 2 Gruppen = die Kosten der günstigsten Verbindung von zwei verbundenen Knoten in ihnen. Maximin Distance: Für jede eingehende Verbindung wird der geringste Abstand zu einer ausgehenden verwendbaren Verbindung kalkuliert. Der größte dieser Wert wird dann zur Ausgehenden Verbindung addiert und stellt die Kosten zwischen den Gruppen dar. Average Minimum Distance: Berechnung ähnlich wie bei der maximin distance, doch die Werte sind eher durchschnittlich, lieber als einfach den Größten Wert zu nehmen.

54 Connections Cost II Zusammenfassung der 3 Methoden:
Minimum distance: optimistisch -> setzt voraus das es keine Kosten bei der Bewegung zwischen zwei Knoten innerhalb der Gruppe gibt. Maximin distance: pessimistisch -> Findet die größten möglichen Kosten und benutzt nur diese. Average minimum distance: pragmatisch -> gibt dir nur die Kosten an, die du zahlst, über 100 von verschiedenen Pathfindern Anfragen.

55 Beispiel cost

56 Pathfinding on the hierarchical graph
Bei der Wegfindung arbeiten wir mit dem normalen A*-Algorithmus. Dieser durchläuft die komplette Struktur und beginnt dabei bei der obersten Ebene und arbeitet sich bis unten hin durch. Das Ergebnis der höheren Ebenen werden dazu benutzt, die Arbeit auf den niedrigeren Ebenen einzugrenzen.

57 Algorithm Zuerst finden wir die Ebene auf der wir beginnen!
So hoch wie möglich, da die Arbeit sich dadurch verringert. Die Anfangs-Ebene sollte eine sein, wo die Start und Ziel Position nicht im gleichen Knoten liegt. Wenn ein Plan gefunden wurde, müssen die Anfänge verfeinert werden, da diese am wichtigsten sind für die Bewegung des Charakters. Nun gehen wir auf eine tiefere Ebene und verfeinern die dortigen Bewegungen des Charakters. Wenn er an sein Ziel angekommen ist, werden die Positionen resettet und das gleiche Spiel beginnt von vorne.

58 Pseudo-code If start == end: return None startNode = start endNode = end level0fNodes = 0 currentLevel = graph.getLevels()-1 While currentLevel >= 0: startNode = graph.getNodeAtLevel(0, start, currentLevel) endNode = graph.getNodeAtLevel(level0fNodes, endNode, currentLevel) level0fNodes = currentLevel if startNode == endNode: continue graph.setLevel(currentLevel) path = pathfindAStar(graph, startNode, endNode, heuristic) endNode = path[0].getToNode() Return path

59 Performance Die Performanz von A* bleibt gleich, der unverändert benutzt wird. Die Funktion des ‚hierarchical pathfinder‘, O(plm) in Zeit, erscheint langsamer als andere Grund-Algorithmen der Wegfindung. Es gibt p Ebenen vom O(lm) A*-Algorithmus, aber in jedem Fall ist die Nummer der Wiederholungen geringer als ein grober A* Abruf. Die praktische Performanz ist dadurch signifikant höher!

60 Instanced Geometry Die meisten Level-Details in Spielen sind meist einzigartig. Genauso ist das auch bei den Graphen für die Wegfindung. Auf manchem Landschaften stehen Gebäude oder Eingänge zu gesonderten Zugang zu Instanzen. Diese in sich separierten Level beinhalten meist Content der nur für einen kleinen Kreis von Spielern vorbehalten ist. Aber auch dort müssen Wegfindungen stattfinden.

61 Algorithm Jede Art der Gebäude (indem Fall sind es die separierten Gegenden um die Instanz herum) gibt es eine ‚pathfinder graph‘. Dieser Graph besitzt Verbindungen ‚exit‘, so wie ‚exit‘-Knoten, die aber nicht mit dem Graphen der Gebäude verbunden sind. Für jede Instanz innerhalb eines solchen Gebäudes, wird erfasst von welcher Art sie ist und welche Knoten des ‚main pathfinding graphs‘ mit dem ‚exit‘-Knoten verbunden ist. Das liefert eine Übersicht Graphen von Gebäuden wie mit dem Graphen der Welt verwirbelt ist.

62 Instance Graph Wenn der Instance Graph nach einer Sammlung von Verbindungen mit einem seiner Knoten gefragt wird, bezieht er sich auf den Gebäude-Typ und schickt die dazugehörigen Werte zurück. Um nun eine Verwechslung vorzubeugen, ändert die Instanz die Knoten so , das die einzigartig sind. Er ist schlicht ein Übersetzer = Er übersetzt die Werte der Knoten eines Instanz-Graphen in einen Gebäude-Graphen und zurück. Wenn der Knoten ‚exit‘ besagt, fügt er eine Exit-Verbindung hinzu und => Die Kosten der Verbindungen beläuft sich auf Null, da die Ermittlung zu schwer ist.

63 Open Goal Pathfinding Knoten als Ziel deklarieren
Überprüfen ob der Knoten EIN Ziel ist und nicht DAS Ziel. Die Methode braucht eine genaue Anzeige der Distanz zum nächsten Ziel. Doch was ist das gewählte Ziel? Dies sollte nicht über den Pathfinder stattfinden, eher sollte die KI die Auswahl treffen und er findet den passenden Weg dazu.

64 Dynamic pathfinding Bei dieser Methode geht es darum, das sich die Gestaltung des Weges anhand von neu gewonnen Informationen ändern kann und das immer zu jeder Zeit. Allerdings kann dies, bei einem ständig wechselnden Informationsfluss, zu einer Überflutung des pathfinder führen. Dieser beginnt dann von vorne und beendet den vorherigen Plan erst gar nicht => kein Prozess wird fertiggestellt. Erlaubt eine Kalkulation eines neues Weg nur für die Teile des Plan, die sich geändert haben => A* wird zu D*

65 IDA* - iterative deepening a*
Hat weder offene noch geschlossene Listen. Startet mit einem „cutt-off“ Wert, sucht alle möglichen Wege ab, bis einer kürzer ist, als der Wert. Der Start-Wert ist sehr gering, sollte kein Weg gefunden werden, wird der Wert ein wenig erhöht und der Vorgang wiederholt sich. Geringes Implementations-Aufkommen; kein Speicher wird benötigt. Allerdings nur dann effizient benutzbar, wenn der Speicher Bedarf , das Schlüssel Element in der Betrachtung ist => Ansonsten sind A* und Dijkstra effektiver.

66 SMA* - simplified Memory-Bounded A*
Ein festgelegter Wert der Liste reguliert das Hinzufügen von Knoten: Ist ein Knoten über diesen Wert, wird er abgelegt. Ist er unter diesem Wert, wird er hinzugefügt und der Knoten in der Liste, mit dem höchsten Wert wird entfernt. Diese Variante garantiert nicht den optimalen Weg, aber es verhindert Probleme mit den cashe misses und dem aliasing, was A* ab und an mit sich führt.

67 Vielen Dank für die Aufmerksamkeit!!!


Herunterladen ppt "Pathfinding- World Representation"

Ähnliche Präsentationen


Google-Anzeigen