A*-Algorithmus

Network

Top Contributor
Hi,

ich möchte den A-Stern Algorithmus umsetzen (Wegfindung in disem Fall), jetzt habe ich schon so einige Texte darüber gelesen, verstehe die Umsetzung jedoch nicht.
Wie ich das bis jetzt mit dem Quelltext verstanden habe - und das ist widersprüchlich mit den zugehörigen Texten - werden einfach alle Punkte die möglich wären und gefunden werden, in eine Liste gepackt und hintereinander abgearbeitet.
Ich finde in den Quelltexten jedoch einfach nirgendwo die Heuristik. Wenn man jeden Punkt hintereinander abarbeitet, breitet sich das Suchmuster Ringförmig um den Anfangspunkt aus und nicht wie nach diesem Prinzip: http://de.Wikipedia.org/

Besonderst, wie setzt man diese überhaupt um? Gibt es eine Liste, die jeweils 2 Einträge wie eine HashMap besitzt und die Einträge nach ihrem Entfernung (Einer der Einträge) hin sortiert?

Vielen Dank und
Gruß
Network
 
J

JohannisderKaeufer

Gast
Die Heuristik ist das wichtigste an der ganzen Geschichte.

Wenn du tatsächlich eine Route auf einer Landkarte berechnen möchtest, dann wäre eine valide Heuristik die Luftlinie zu deinem Ziel. (Pythagoras: also sqrt(x² + y²) )

Der Wert einer Heuristik muß zwingend kleinergleich dem tatsächlichen Wert zum Ziel sein. Luftlinie ist z.B. immer kürze als der Weg über die Straße, wegen Kurven, Kreuzungen, etc.

Dadurch suchst du nun nicht Ringförmig, (außer deine Heuristik ist schlecht und gibt für jeden Punkt 0 an, was auch valide wäre)

Du sortierst nun deine Punkte nach

Tatsächliche Entfernung von Start zu Zwischenziel, plus Luftlinie Zwischenziel mit Ziel.

Bei jedem Zwischenziel suchst du neue Zwischenziele und fügst sie sortiert in deine Liste ein.
Nach diesem Schema:

Start -> ZZ1 -> ZZ2 -(Luftlinie)> Ziel

-> tatsächliche Strecke
-(Luftlinie)> heuristik

Bis die heuristik, die "überoptimistisch ist" Weggefallen ist

Start -> ZZ1 -> ZZ2 -> ZZ3 -> ZZ4 -> Ziel

Und schon hast du deinen Weg gefunden.
 

Network

Top Contributor
Danke schonmal, genau so habe ich das auch kapiert.
Dann stellt sich nur die Frage nach der Umsetzung. Und genau hier waren meine Ansätze mit Beispielcode zu suchen fehlgeschlagen.

Was mir fehlt ist nähmlich, dass ich ja den nächstbesten Punkt untersuchen sollte. Dafür muss ich aber erstmal Wissen welcher der Nächstbeste ist.
Heißt das, ich soll die Liste jetzt jedesmal durchgehen und nach dem besten durchsuchen? Dadurch geht ja eig. sehr viel Arbeitsspeicherzeit und Berechnungszeit drauf.

Deshalb die Frage wie man genau das löst... In den Quelltexten in denen ich "gewühlt" habe, (und um ehrlich zu sein nicht sehr gründlich, weil ich bei der Suche jedesmal verzweifle) werden die Punkte einfach in die OpenList geworfen und eins nach dem anderen abgearbeitet werden ohne sie nach Nähe zu sortieren.
 

Marco13

Top Contributor
Soweit ich mich erinnere verwendet man da üblicherweise eine PriorityQueue (Java Platform SE 6) die die Punkte (für den Benutzer "unsichtbar") nach ihrer Entfernung sortiert.

(Ich glaube, man muss da an einer Stelle aufpassen: Wenn sich die geschätzte Entfernung (bzw. allgemein der Wert, nach dem die Punkte in der Queue verglichen werden) ändert, wird natürlich NICHT automatisch die Queue aktualisiert. In diesem Fall muss man den Punkt rausnehmen, den Wert ändern, und den Punkt neu einfügen. Das ginge mit einem (Fibonacci)-Heap effizienter, weil der direkt Methoden bietet, um sich zu aktualisieren, aber so einen implementieren ist frickelig...)
 
J

JohannisderKaeufer

Gast
Die Effizienz bei diesem Algorithmus kommt von der Heuristik.
Für jeden Punkt muß nur einmal ein Heuristik-Wert berechnet werden, der sich prinzipiell nicht mehr verändern sollte.

Da die Liste sortiert/geordnet ist, kann da auch einfach einsortiert werden.

Durch das, daß sich der Algorithmus anhand der Luftline/Heuristik seinen Weg sucht, fallen viele unsinnige Berechnungen Weg. Dieser Effekt wiegt in der Regel am stärksten.

Siehe auch Complexität im Wiki Artikel.
 

Network

Top Contributor
@Marco13
Vielen Dank, exakt was ich gesucht hatte. :)
Zum Glück wird hier Comparator unterstützt, denn mit Comparable konnte ich mir keine schöne mögliche A*-Quelltext-Lösung vorstellen.

&@Johannis
Dem schließe ich mir an. Es sollte sich nicht mehr verändern, und wenn es sich mittendrin verändert ist der gesammte Algorithmus nicht mehr zu gebrauchen.

Vielen Dank
Gruß
Net
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Algorithmus für Arbeit mit fehlenden Listenelementen? Allgemeine Java-Themen 1
schegga_B AES-Algorithmus in javax.crypto Allgemeine Java-Themen 3
M Laufzeit des Prim Algorithmus Allgemeine Java-Themen 3
O Newton Algorithmus Java Allgemeine Java-Themen 1
CptK Backpropagation Algorithmus Allgemeine Java-Themen 6
N Google Authenticator Algorithmus (SHA1) Allgemeine Java-Themen 1
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
Zrebna Quicksort-Algorithmus - zufälliges Pivot wählen Allgemeine Java-Themen 6
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
B Algorithmus Warteschlange Ringpuffer wirklich fehlerfrei Allgemeine Java-Themen 8
M Probleme mit Negamax-Algorithmus Allgemeine Java-Themen 29
F Q - Learning Algorithmus Bug Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
M Minmax Algorithmus Verständnisproblem Allgemeine Java-Themen 2
H Rundreise frage (Algorithmus) Allgemeine Java-Themen 18
F KMP-Algorithmus Allgemeine Java-Themen 9
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
P MinMax Algorithmus Allgemeine Java-Themen 0
J Abhängigkeit zwischen Rechenzeit und Speicherbedarf in einen Algorithmus Allgemeine Java-Themen 7
K Djikstra-Algorithmus Allgemeine Java-Themen 1
T Minimax/Alphabeta Algorithmus hängt sich auf (?) Allgemeine Java-Themen 2
M Algorithmus zum Zahlen einteilen Allgemeine Java-Themen 8
O Best Practice Hilfe bei Algorithmus gesucht Allgemeine Java-Themen 10
S Algorithmus um Objekte auf einer Flaeche mit gleichem Abstand anzuordnen..? Allgemeine Java-Themen 20
S Rucksackproblem und genetischer Algorithmus Allgemeine Java-Themen 9
L Abbruch des Algorithmus Allgemeine Java-Themen 8
D Input/Output Ausgleichen chemischer Reaktionsgleichungen mit dem Gauß-Algorithmus Allgemeine Java-Themen 2
Messoras A*-Algorithmus integrieren Allgemeine Java-Themen 3
S Buchscan 3D Dewarp Algorithmus - Ansätze Allgemeine Java-Themen 1
B Verteilungs-/Vergabe-Algorithmus mit abhängigen Score-Werten Allgemeine Java-Themen 3
Androbin "Shunting Yard"-Algorithmus Allgemeine Java-Themen 6
B Algorithmus - Project Euler Problem 18 Allgemeine Java-Themen 2
N Algorithmus zum bewerten von mathematischen Funktionen Allgemeine Java-Themen 11
O Algorithmus Optimierung Allgemeine Java-Themen 3
Joew0815 Algorithmus - Zahlenfolge in 4 ähnliche Teile aufteilen Allgemeine Java-Themen 0
O Tag Cloud Algorithmus Idee gesucht Allgemeine Java-Themen 2
A Implementierung eines Algorithmus (Farthest Insertion zur Lösung des TSP) in O(n²) Allgemeine Java-Themen 2
C Eclipse Probleme bei selbst erstelltem Algorithmus Allgemeine Java-Themen 2
H Graph-Algorithmus gesucht Allgemeine Java-Themen 21
N Algorithmus durch Workflow Allgemeine Java-Themen 7
M tree-based diff Algorithmus (Code-Vergleiche) Allgemeine Java-Themen 3
S Uhrzeit Algorithmus sale Allgemeine Java-Themen 11
A Suche Algorithmus zum Erstellen eines planaren Graphen Allgemeine Java-Themen 5
F Methoden Algorithmus zur Gegnerfindung (Turnier) Allgemeine Java-Themen 9
T Algorithmus Graph Allgemeine Java-Themen 10
J Algorithmus gesucht (Stringtransformation) Allgemeine Java-Themen 4
B Algorithmus Krankenhausbelegung Allgemeine Java-Themen 17
S Algorithmus von Dijkstra Allgemeine Java-Themen 2
alex_fairytail OOP Banknoten Algorithmus Teil 2 Allgemeine Java-Themen 13
2 ArrayList aktualisieren Algorithmus Allgemeine Java-Themen 11
alex_fairytail Methoden Banknoten Algorithmus Allgemeine Java-Themen 10
R Codehinweise: Algorithmus Größenvergleich von n Zahlen Allgemeine Java-Themen 5
SuperSeppel13 WTF?! Algorithmus-Geschwindigkeitstest Allgemeine Java-Themen 2
L Algorithmus für kürzesten Weg mit Wegpunkten Allgemeine Java-Themen 21
C Algorithmus Problem in Minesweeper Allgemeine Java-Themen 5
S Algorithmus um Labyrinth zu erzeugen Allgemeine Java-Themen 6
V Problem mit A* Pathfinder-Algorithmus Allgemeine Java-Themen 2
S Algorithmus um nächst folgende Primzahl zu berechnen Allgemeine Java-Themen 7
S Algorithmus Problem. Rechtecke effizient auf Spielfeld anordnen. Allgemeine Java-Themen 7
C Algorithmus-Hilfe Allgemeine Java-Themen 20
J Algorithmus Längenkombinationen? Allgemeine Java-Themen 7
M Kombinationen über rekursiven Algorithmus berechnen? Allgemeine Java-Themen 10
L Algorithmus für Poker-Hände Allgemeine Java-Themen 7
chik 2 return werte für Greedy-Algorithmus (gelöst) Allgemeine Java-Themen 3
D Abstruse Probleme mit eigenem replace Algorithmus Allgemeine Java-Themen 11
P RC4 Algorithmus Allgemeine Java-Themen 3
D RSA Verfahren - Erweiterter Euklidischer Algorithmus Allgemeine Java-Themen 4
C IBAN und Bic Validieren (Algorithmus) Allgemeine Java-Themen 10
P Problem mit A*-Algorithmus Allgemeine Java-Themen 12
M Wörter Algorithmus Allgemeine Java-Themen 7
M Algorithmus für automatische Zeilenumbrüche Allgemeine Java-Themen 12
K Postleitzahlen Algorithmus Allgemeine Java-Themen 12
G Problem mit Algorithmus Allgemeine Java-Themen 3
T Hilfe bei einem Algorithmus Allgemeine Java-Themen 2
S Stemming-Algorithmus gesucht (z.B. Porter) Allgemeine Java-Themen 2
RoliMG präfix zu infix algorithmus Allgemeine Java-Themen 6
Z A*-Algorithmus - Probleme mit offener/geschlossener Liste Allgemeine Java-Themen 7
S Javaimplementierung des MD5 Algorithmus Allgemeine Java-Themen 2
E Container-Pack-Algorithmus Allgemeine Java-Themen 4
G k nearest neighbor algorithmus Allgemeine Java-Themen 7
C HASH Algorithmus 2 Strings ergeben das Selbe. Allgemeine Java-Themen 2
P Page Rank Algorithmus implementieren Allgemeine Java-Themen 7
T Problem RSA-Algorithmus in Java? Allgemeine Java-Themen 2
minzel Hash-Algorithmus Allgemeine Java-Themen 9
Y komprimierung mittels Huffman-Algorithmus, bit-shifting. Allgemeine Java-Themen 2
K Algorithmus Allgemeine Java-Themen 10
C Algorithmus für Array Allgemeine Java-Themen 9
I Verschlüsselung mit Pwd. - User soll Algorithmus wählen Allgemeine Java-Themen 4
J fällt euch ein Algorithmus ein? Allgemeine Java-Themen 4
S Algorithmus für Sudoku Allgemeine Java-Themen 17
N Euklidischer Algorithmus in Java und keine Terminierung. Allgemeine Java-Themen 7
F Algorithmus für Sortierung gesucht Allgemeine Java-Themen 15
T Algorithmus verbessern Allgemeine Java-Themen 10
U Suche Algorithmus zur bestimmung des längsten Wegs Allgemeine Java-Themen 3
U Ford-Fulkerson Algorithmus gesucht Allgemeine Java-Themen 1
U Dijkstra Algorithmus gesucht Allgemeine Java-Themen 4
D Algorithmus für die Erkennung fehlerhafter Eingaben Allgemeine Java-Themen 4
I hash-algorithmus Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben