Ist die Sprungpunktsuche (A * mit JPS) auf nicht diagonale Gitter anwendbar?


8

Ich versuche meine Wegfindung zu beschleunigen und habe A * mit JPS entdeckt . Grundsätzlich werden Kacheln beschnitten, bevor sie dem OPEN-Set hinzugefügt werden.

Kann ich diese Technik mit meinem Gitter verwenden, das nur gerade Richtungen zulässt?

Antworten:


10

Wenn Sie den Artikel lesen , werden Sie feststellen, dass dies im Abschnitt "Schlussfolgerungen" als offenes Problem aufgeführt ist:

"Eine interessante Richtung für weitere Arbeiten besteht darin, Sprungpunkte auf andere Arten von Gittern wie Sechsecke oder Texes auszudehnen (Yap 2002). Wir schlagen vor, dies durch die Entwicklung einer Reihe von Schnittregeln zu erreichen, die denen für quadratische Gitter entsprechen."

Um die Sprungpunktsuche auf Ihr orthogonales Gitter anzuwenden, müssen Sie entscheiden, welche Punkte als Sprungpunkte in diesem Gitter gelten sollen. Nachdem ich einen Moment darüber nachgedacht habe, denke ich - habe es aber nicht bewiesen! - dass die folgenden Regeln (basierend auf den Definitionen 1 und 2 im Papier, die aus Gründen der Lesbarkeit etwas umformuliert wurden) funktionieren können:

Ein Knoten y ist der Sprungpunkt vom Knoten x in Richtung d, wenn y von x aus erreichbar ist, indem er sich gerade in Richtung d bewegt, und ist der Knoten, der x am nächsten kommt, um mindestens eine der folgenden Bedingungen zu erfüllen:

  1. Knoten y ist der Zielknoten,
  2. d ist eine horizontale Bewegung, und eine der Zellen, die vertikal neben der Zelle y - d liegen (dh die Zelle einen Schritt vor y, wenn sie sich in Richtung d bewegt), ist blockiert, oder
  3. d ist eine vertikale Bewegung, und es existiert ein Knoten z, der ein Sprungpunkt von y (gemäß Bedingung 1 oder 2) in einer horizontalen Richtung d 'ist.

Natürlich können die Wörter "vertikal" und "horizontal" in der obigen Definition ausgetauscht werden. Der Punkt ist, dass wir einen Weg wählen müssen, um die Symmetrie zu brechen, damit nur einer der möglichen Pfade zum Durchqueren eines offenen rechteckigen Bereichs berücksichtigt wird. Harabor und Grastien bevorzugen dazu "Diagonal-First" -Pfade. Da wir dies jedoch nicht können, müssen wir stattdessen "Vertical-First" -Pfade (oder "Horizontal-First" -Pfade) bevorzugen.

Es könnte auch möglich sein, alternative Schnittregeln zu entwickeln, die "natürlichere" Pfade erzeugen, z. B. den aktuellen Kurs dem Abbiegen vorziehen oder vielleicht sogar das ständige Drehen von Treppenpfaden bevorzugen. Die Regel, die ich oben angegeben habe, ist einfach die einfachste Übersetzung der Harabor & Grastien-Regel in ein orthogonales Gitter, das ich mir vorstellen kann.


+1 Genau das wollte ich beantworten. Es ist möglich zu beweisen, dass dies immer noch optimal ist.
BlueRaja - Danny Pflughoeft

2

Wenn Sie sich die Definition der 45-Grad-Route ansehen, ist es tatsächlich immer möglich, einen Pfad mit einer 45-Grad-Route in einen Pfad ohne 45-Grad-Drehung umzuwandeln. Und es ist auch optimal (man kann es leicht durch Widerspruch beweisen).

Der einfachste Weg ist also, die Sprungpunktsuche auszuführen und sie dann in eine orthogonale Route umzuwandeln.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.