Ich habe eine quadratische Karte. Es sind nur horizontale und vertikale Bewegungen zulässig (keine Diagonalen). Die Bewegungskosten betragen immer 1.
Ich implementiere einen A * -Algorithmus auf dieser Karte und verwende die Manhattan-Entfernung als Entfernungsheuristik. Ist diese Heuristik konsistent? Kann ich vermeiden, g(node)
nach Knoten zu suchen, die sich im CLOSED-Satz befinden?
Edit: Mit konsequent meine ich monoton.
tiles
path-finding
geometry
Emiliano
quelle
quelle
Antworten:
Um Ihre Frage tatsächlich zu beantworten: Die Manhattenentfernung ist konsistent, wenn Sie sich nur vertikal / horizontal entlang eines ungewichteten Rasters bewegen müssen (dies kann durch die Definition auf Wikipedia leicht angezeigt werden) . Also ja, in Ihrem Fall können Sie die erneute Überprüfung von Knoten in der geschlossenen Menge vermeiden.
Wenn Sie jedoch eine diagonale Bewegung oder Bewegung in einem beliebigen Winkel zulassen, wird der Abstand zum Schüttgut unzulässig, da die Kosten für die Diagonale überschätzt werden. Dies bedeutet zwangsläufig, dass die Bewegung nicht konsistent ist.
quelle
h(x) = min(manhattan(p1), manhattan(p2))
(dh entweder p1 oder p2 sind gute Endpunkte und ich möchte den nächsten erreichen). Ist dash(x)
noch monoton?h(x, p1)
undh(x, p2)
sind konsistent, dannmin(h(x,p1), h(x,p2))
wird auch konsistent sein. Dies ist aus der Definition in Wikipedia leicht ersichtlich (wir müssten diesmin(h(x, p1), h(x, p2)) <= distance(x,y) + min(h(y, p1), h(y, p2))
für alle Knotenx
undy
mit einer Kante zwischen ihnen anzeigen. Nehmen wir nun an, dass diesh(x, p1)
das Minimum ist. Können Sie<=
anhand der Tatsache, dass dies definitiv die rechte Seite ist, nachweisen, dass dies der Fall ist?) Beide Heuristiken sind konsistent?)Ja, der Manhattan-Abstand zwischen zwei Punkten ist immer der gleiche wie der normale Abstand zwischen ihnen. Sie können sich den Manhattan-Abstand als die X- und Y-Komponente einer Linie vorstellen, die zwischen den beiden Punkten verläuft.
Dieses Bild ( aus Wikipedia ) illustriert dies gut:
Die grüne Linie gibt die tatsächliche Entfernung an.
Die blauen , roten und gelben Linien repräsentieren alle die gleiche Manhattan-Entfernung (12 Einheiten). Unabhängig davon, welche Kombination von Bewegungen nach oben und rechts Sie vom linken unteren Punkt zum rechten unteren Punkt zeichnen, erhalten Sie dieselbe Gesamtentfernung von Manhattan.
quelle
h(x) = 1000
, was offensichtlich nicht konsistent ist) . Er kann das erneute Überprüfen von Knoten vermeiden, aber nur, weil die Entfernung von Manhattan konsistent ist, was in dieser Antwort nicht angezeigt wird.2*manhatten
befriedigt das, ist aber nicht konsequent.In Erweiterung der Antwort von Byte56 möchte ich darauf hinweisen, dass in Ihrem spezifischen Datensatz die Verwendung der Manhattan-Distanz als heuristische Funktion tatsächlich immer eine perfekte Heuristik ist, in dem Sinne, dass sie immer die tatsächlichen Pfadkosten zurückgibt (sofern vorhanden) nichts "blockiert" die Wege).
Sie sollten auch beachten, dass alle Knoten in der richtigen Richtung (entweder horizontal oder vertikal) den gleichen erwarteten Abstand ergeben (da es viele gleich kurze Wege zum Ziel gibt). Sie sollten sich bewusst sein, dass Ihre Prioritätswarteschlange (offener Satz) bei verknüpften Prioritäten den zuletzt hinzugefügten Knoten zuerst aus der Warteschlange entfernen sollte (LIFO - Last In First Out). Auf diese Weise untersuchen Sie nur die Knoten, die sich auf dem optimalen Pfad befinden . Wenn Sie gleich geeignete Knoten auf eine FIFO-Weise (First In First Out) untersuchen, werden Sie effektiv alle Knoten untersuchen , die Teil eines besten Pfades sind. Dieses Problem tritt auf, weil es mehrere gleich gute Pfade zum Zielknoten gibt.
quelle
Ich bin mir nicht sicher, was Sie mit "immer" konsequent meinen. Ist die Manhattan-Entfernung in einem festen Raster unabhängig vom eingeschlagenen Weg? Ja, wie die Antwort von Byte56 sagte.
Beispielsweise ist die Manhattan-Entfernung bei Rotationen jedoch nicht invariant. ZB der Manhattan - Abstand ( L1-Norm ) zwischen dem Ursprung und einem Punkt
(10,10)
ist|10-0| + |10-0| = 20
. Wenn Sie Ihre Koordinaten jedoch um 45 Grad drehen (Ihr fester Punkt liegt also in einer der Richtungen des Rasters), finden Sie jetzt den gleichen Punkt(10sqrt(2),0)
, also einen Manhattan-Abstand zum Ursprung von10sqrt(2)~14.14
.quelle