2012-04-07 7 views
2

So wählen Sie heuristic cost für das cities connected with roads Problem. Der Graph hat nicht negativ gewichtete unidirektionale Kanten und keine Kante verbindet irgendeinen Knoten mit sich selbst. In diesem Diagramm gibt es nur eine Kante zwischen zwei Scheitelpunkten. Mein Ziel ist es, den kürzesten Abstand zwischen single source und single destination zu bekommen.So bestimmen Sie die H-Kosten in A * Suchalgorithmus für Städte, die mit Straßen verbunden sind

+0

Ich fürchte, du musst etwas expliziter sein. Können Sie Ihr Problem bitte etwas deutlicher beschreiben? –

+0

So berechnen Sie die "h" -Kosten für einen gewichteten unidirektionalen Graph, der ein nicht negatives Kantengewicht hat.zum Beispiel: "Städte mit Straßenproblemen verbunden" –

Antwort

1

Wenn Ihre Kanten in einer euklidischen Ebene liegen, Ihre Eckpunkte Straßen entsprechen und die Eckpunktkosten der Länge der Straße entsprechen, dann ist die Euclidian distance oder L2-Norm eine gute Wahl für die heuristischen Kosten.


Hier ist warum. Aber zuerst einige schnelle Terminologie:

Let f(x) sein die Weg kosten, die berechnete kürzeste Entfernung vom Startknoten x zum Knoten.

Let h(x) werden die heuristisch Kosten, eine Abschätzung der Entfernung zum Ziel von Knoten x.

Da A* ist ein geleitet besten Suchalgorithmus. Bei jedem Schritt bewegt es sich zu dem Knoten, der h(x) + f(x) minimiert (und die Berechnung h(x) erfordert, dass wir einen Zielknoten im Sinn haben).


für diesen Ansatz den richtigen kürzesten Patch Abstand zwischen dem Start- und End-Knoten zu finden seinen garantiert, muss h(x) ein admissible heuristic sein. Dies bedeutet im Wesentlichen, dass die Entfernung zum Zielknoten nicht überschätzen darf.

Deshalb, wenn die Knoten auf einer euklidischen Ebene organisiert sind, und Ihre Kosten für die L2-Norm Abstand zwischen den Knoten entsprechen, dann ist die Euclidian distance oder L2-Norm zwischen dem aktuellen Knoten x und Zielknoten ist garantiert ein admissible heuristic sein (Dies ist der kürzeste Pfad zwischen den beiden Knoten. Daher muss jeder tatsächliche Pfad entlang einer Reihe von Vertices in Ihrem Diagramm länger sein).


Als Bonus ist es informativ zu beachten, dass Dijkstra's Algorithm ist einfach ein Spezialfall von A* mit h(x) = 0. Für jeden Knoten nehmen wir an, dass der Pfad zum Ziel 0 ist, was bedeutet, dass wir einfach den kleinsten möglichen Schritt machen. Dies ist sicherlich ein admissible heuristic, weil der Abstand zwischen zwei Knoten nicht weniger als 0 (wenn wir nicht negative Randkosten annehmen) ist.

+1

Um den euklidischen Abstand zu berechnen, sollte man Koordinaten von Knoten kennen. Aber in meiner Grafik sind Städte mit Straßen verbunden, ich kenne nur die Länge von Straßen. und in meinem Graph verbindet keine Kante irgendeinen Knoten mit sich selbst. Außerdem gibt es nur eine Straße zwischen zwei Städten. Wie kann ich also Euklidische Distanz berechnen? –

+2

Hmmm ... In diesem Fall ist das Beste, was Sie tun können, h (x) = 0 zu setzen und das Problem auf Dijkstras Algorithmus zu reduzieren. Es wird langsamer, aber Sie werden garantiert den richtigen kürzesten Weg finden. – ulmangt

0

Wenn Sie versuchen, die zurückgelegte Distanz zu optimieren, ist die euklidische Distanz eine gute Grundlinienheuristik.

+0

Ich versuche die kürzeste Entfernung von "single source" zu "single destination" zu bekommen. Wird "euklidische Distanz" funktionieren? –

0

Wenn Sie eine gewichtete Grafik erhalten, verwenden Sie das Kantengewicht, als ob es die Länge des Segments ist. Der kürzeste Pfad in einem gewichteten Diagramm ist der Pfad mit dem niedrigsten kombinierten Kantengewicht.

Verwandte Themen