Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

04.11.2010, 23:21

[Algorithmik][Wegfindung]A* - Open/Closed List

Moin,

Ich beschäftige mich momentan mit dem A*-Algorithmus und habe eine Art Verständnisproblem: Die Definition aller Knoten in der sog. Closed List ist, dass der kürzeste, mögliche Weg zu ihnen bekannt ist.
Wie kann ich prüfen, ob dem für einen gegebenen Knoten der Open List, den ich nun in die Closed List verschieben will, so ist? (also wie beweist man das für einen beliebigen Knoten?)

Was ich nicht wissen will:
- dass der Algorithmus optimal ist
- dass das auf derselben Seite bewiesen ist
- dass es sich irgendwie logisch anhört

Mit freundlichen Grüßen,

dispy

2

05.11.2010, 00:29

Also es funktioniert folgendermaßen:
Der Algorithmus breitet seine beiden Listen langsam über
das Spielfeld aus.
Zuerst einmal sucht er sich den Knoten, zu dem der Weg am
besten ist.
Den findet er indem er die g-Werte vergleicht, die aus der
Summe der kompletten Wegkosten Knoten liegen berechnet werden.
Daraufhin untersucht er alle Nachfolgeknoten, d.h. er geht alle Wege
ab die zu Knoten führen die nicht in der Closed list liegen und speichert
sie mit ihrem g-Wert. Sollte einer davon in der Open list liegen, so speichert
er ihn nur, falls dieser Weg besser ist (der g-Wert kleiner ist).

Da der Algorithmus stets den Knoten untersucht, zu dem der Weg am
kleinsten ist, ist der Weg der dorthin gefunden wurde perfekt (alle anderen
Wege sind schließlich länger und führen noch nichtmal mehr undbedingt zu
diesem Knoten).
Wenn du also mit der untersuchung dieses Knotens fertig bist, kannst du
dir sicher sein, dass du den Idealenweg gefunden hast.

Ich hatte ein Problem, weil ich lange Zeit nicht kapiert habe, das der g-Wert
aus der Summe aller Wegkosten besteht. Dem ist aber NICHT so.
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

3

05.11.2010, 22:40

Der Beweis dafuer ist induktiv. Induktionsanfang, ist das du vom Startpunkt mit einem Weg der Laenge 0 zum Startpunkt gelangst. Von da aus breitet sich dann die "Sicherheit", dass man den kuerzesten Weg schon hat, ueber alle Knoten aus. Die Argumentation ist da im Prinzip: "wenn ich hier den Weg mit Laenge x habe, und alle anderen Wege gehen durch closed Nodes (koennen also nicht mehr kuerzer werden), und haben schon mindestens Laenge x, so kann ich unmoeglich einen Weg kuerzer x finden, also ist dieser optimal". Das ist auch der Grund, warum keine Kante negativ bewertet sein darf, dann liesse sich naemlich evtl. ein solcher Weg finden.

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

4

05.11.2010, 23:00

Ich hatte ein Problem, weil ich lange Zeit nicht kapiert habe, das der g-Wert
aus der Summe aller Wegkosten besteht. Dem ist aber NICHT so.
hmmm, du sagst also: du hattest ein Problem, weil du nicht verstanden hast, wie es NICHT ist? ^^

5

05.11.2010, 23:17

UPS ;) naja, ich war grad aus der schule zurück und um 15:30 hat man dann echt die schnauze voll,
zumal man den ganzen Tag von Lehrern in einer anderen Sprache belabert wird.
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

6

06.11.2010, 13:09

Das ist auch der Grund, warum keine Kante negativ bewertet sein darf, dann liesse sich naemlich evtl. ein solcher Weg finden.

Bellman-Ford ftw!

Zum Thema:
Ich weiss nicht, ob es hilft, aber hier hat es 2 recht gute Seiten, die verschiedene Wegsuch Algorithmen vorstellen/vergleichen:

http://www.stefan-baur.de/priv.studies.hauptseminar.html
http://theory.stanford.edu/~amitp/GameProgramming/

7

08.11.2010, 23:14

Moin,

@drakon: danke für die Links, zumindest der zweite ist sehr ausführlich gehalten - aber leider enthält der keinen Ansatz eines Beweises ^^

@TGGC: Könntest du den induktiven Beweis "einfach" kurz führen? :D
im Beispiel ist es mir klar, dass der kürzeste Weg von Saarbrücken nach Kaiserslautern bekannt ist - nur beim Schritt nach Ludwigshafen fliege ich dann raus :(


MfG
dispy

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

8

08.11.2010, 23:47


@TGGC: Könntest du den induktiven Beweis "einfach" kurz führen? :D
im Beispiel ist es mir klar, dass der kürzeste Weg von Saarbrücken nach Kaiserslautern bekannt ist - nur beim Schritt nach Ludwigshafen fliege ich dann raus :(


MfG
dispy


Die h's stellen einen noch zu erwartenden Weg dar. Das "Gewicht" eines Knoten setzt sich dann aus den Kanten dort hin + der noch wahrscheinlich dazukommende zusammen. Um das ganze ein wenig besser zu verstehen kannst du dir zuerst ja einfach mal Dijkstra ansehen, welcher das gleiche macht, einfach ohne die Heuristik mit dem noch erwartendem Weg.

Aber zurück zum Beispiel. Du bist ja jetzt in Kaiserslauten. Jetzt weisst du, dass der Weg nach Frankfurt 70+103 kostet. Der Weg nach Ludwigshafen 70+53. Dijkstra würde hier jetzt einfach das kürzere nehmen also in dem Falle Ludwigshafen. A* macht hier aber noch eine zusätzliche Betrachtung, indem er schaut was man no so für einen weiteren Weg minimal erwartet (Luftlinie). Also kommen jeweils noch die h's dazu. In dem Falle wählt auch A* hier Ludwigshafen. Wenn man jetzt aus irgendwelchen Gründen beim Ludwigshafen aber einen viel weiteren Weg erwartet, als über Frankfurt, dann würde A* hier Frankfurt wählen, während Dijkstra stupide Ludwigshafen nimmt. In betracht gezogen für den nächsten Ort werden dann alle in der offenen Liste (grau bei dem Beispiel). Und das machst du jetzt solange bis du das Ziel erreicht hast.

9

09.11.2010, 15:05

Danke für die Erklärung, aber ich habe schon längst verstanden, wie das funktioniert ;) Ich suche nur einen Beweis für einen gegebenen Knoten x, dass man den kürzesten möglichen Weg zu ihm kennt ;)



Mf
dispy

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

09.11.2010, 15:47

Es ist eigentlich intuitiv begreifbar dass das so sein muss. Gäbe es einen kürzeren Weg zu x so hätte A* diesen zuerst probiert und wäre damit über den kürzeren Weg bei x angekommen.

Der optimale Weg muss aus optimalen Teilwegen zusammengesetzt sein. Denn angenommen der kürzeste Weg von A nach C führt über B, dann muss natürlich der Teilweg von A nach B auch der global kürzeste Weg von A nach B sein denn gäbe es einen noch kürzeren Weg von A nach B so könnte man sofort auch einen kürzeren Weg von A über B nach C angeben und unser optimaler Weg wäre nicht optimal => Widerspruch.

Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von »dot« (09.11.2010, 16:09)


Werbeanzeige