Wegfindung mit A*

Aus Spieleprogrammierer-Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
[gesichtete Version][gesichtete Version]
K (Farbe der Closedlist-Spalte der aus dem Bild angepasst)
(Rechtschreibung und Grammatik)
Zeile 91: Zeile 91:
  
 
=== Beschreibung ===
 
=== Beschreibung ===
Zu begin sind nur zwei Knoten dem Algorithmus bekannt, der Startknoten und der Zielknoten. Der Startknoten wird der Openlist zugefügt. Den Zielknoten behalten wir erstmal nur im Hinterkopf.
+
Zu Beginn sind dem Algorithmus nur zwei Knoten bekannt, der Startknoten und der Zielknoten. Der Startknoten wird der Openlist hinzugefügt. Den Zielknoten behalten wir erst einmal nur im Hinterkopf.
  
In der Openlist wird nun nach dem geeignetesten Knoten gesucht. Da hier nur der Startknoten drin steht fällt die Wahl nicht schwer. Jetzt wird der Startknoten untersucht, das bedeutet das nach allen benachbarten Knoten gesucht wird. Für jeden gefundenen Knoten werden die Werte für H, G und F ermittelt. Die ermittelten Werte werden natürlich in den jeweiligen Knoten gespeichert. Weiterhin muss auch gespeichert werden, von welchem Knoten man auf den neuen Knoten gekommen ist. Die neu gefunden Knoten werden alle in die Openlist eingefügt. Der Startknoten wird von einem bekannten Knoten zu einem untersuchten Knoten und wird damit in die ClosedList eingefügt.
+
In der Openlist wird nun nach dem geeignetsten Knoten gesucht. Da hier nur der Startknoten enthalten ist, fällt die Wahl nicht schwer. Jetzt wird der Startknoten untersucht, das bedeutet, dass nach allen benachbarten begehbaren Knoten gesucht wird. Für jeden gefundenen Knoten werden die Werte für <math>H</math>, <math>G</math> und <math>F</math> ermittelt. Die ermittelten Werte werden in den jeweiligen Knoten gespeichert. Weiterhin muss auch gespeichert werden, von welchem Knoten man auf den neuen Knoten gekommen ist. Die neu gefunden Knoten werden alle in die Openlist eingefügt. Der Startknoten wird von einem bekannten Knoten zu einem untersuchten Knoten und wird damit in die Closedlist eingefügt.
  
Jetzt wird in der Openlist nach dem Knoten gesucht der den geringsten F Wert hat. Von diesem Knoten werden nun wieder alle benachbarten Knoten gesucht und analysiert. Dabei kann es vorkommen das im laufe der Zeit Knoten die schon in der Openlist stehen nochmal analysiert werden. Wenn der F wert sich verbessert sollten alle Daten des Knoten Überschrieben werden. Sind die Daten gleich oder schlechter können die alten Daten beibehalten werden.
+
Jetzt wird in der Openlist nach dem Knoten gesucht der den geringsten <math>F</math>-Wert hat. Von diesem Knoten werden nun wieder alle benachbarten Knoten gesucht und analysiert. Dabei kann es vorkommen, dass im Laufe der Zeit Knoten die schon in der Openlist stehen, erneut analysiert werden. Wenn der <math>F</math>-Wert sich verbessert, sollten alle Daten des Knotens überschrieben werden. Sind die Daten gleich oder schlechter, können die alten Daten beibehalten werden.
  
So arbeitet der Algorithmus die Openlist ab, fügt unbekannte Knoten der Openlist zu und fügt untersuchte Knoten der Closedlist zu. Wenn jetzt der Zielknoten der Closedlist zugefügt wird ist es vollbracht. Der günstigste weg ist gefunden.
+
So arbeitet der Algorithmus die Openlist ab, fügt unbekannte Knoten der Openlist zu und fügt untersuchte Knoten der Closedlist zu. Wenn jetzt der Zielknoten der Closedlist zugefügt wird, endet der Algorithmus. Der günstigste Weg ist gefunden.
  
Nun kann ausgehend vom Zielknoten geschaut werden von welchem Knoten man auf den Zielknoten kamm. Von dem wird dann geschaut von welchem Knoten man auf diesen kamm und immer so weiter bis man wieder am Startknoten angekommen ist. So wird dann der beste Weg abgebildet.
+
Nun kann ausgehend vom Zielknoten nachvollzogen werden, von welchem Knoten man auf den Zielknoten kam. Von diesem ausgehend wird dann wieder geschaut, von welchem Knoten man auf diesen kam, und immer so weiter, bis man wieder am Startknoten angekommen ist. Auf diese Weise wird der komplette Weg rekonstruiert.
  
Wenn die Openlist leer ist bevor man den Zielknoten erreicht hat kann der Algorithmus abgebrochen werden, da dann kein Weg zwischen Start- und Zielnoten existiert.
+
Wenn die Openlist leer ist, bevor man den Zielknoten erreicht hat, kann der Algorithmus abgebrochen werden, da dann kein Weg zwischen Start- und Zielknoten existiert.
  
 
=== Schritt für Schritt mit Bildern ===
 
=== Schritt für Schritt mit Bildern ===

Version vom 21. November 2011, 08:18 Uhr

Klicke hier, um diese Version anzusehen.

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Werkzeuge