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
Antwort
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.
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? –
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
Wenn Sie versuchen, die zurückgelegte Distanz zu optimieren, ist die euklidische Distanz eine gute Grundlinienheuristik.
Ich versuche die kürzeste Entfernung von "single source" zu "single destination" zu bekommen. Wird "euklidische Distanz" funktionieren? –
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.
- 1. A * Suchalgorithmus Endlosschleife
- 2. So finden Sie die indirekten Knoten, die mit einem bestimmten Knoten in Spark Graphx verbunden sind
- 3. Postgresql wählen Sie die zwei Top-Städte
- 4. Wie zeichne Routen, die nicht auf Straßen sind, MKMapView
- 5. So bestimmen Sie die Höhe von UICollectionView mit FlowLayout
- 6. So wählen Sie Zeilen nach Kriterien, die mit zwei Tabellen verbunden sind
- 7. So senden Sie UDP-Pakete an bestimmte IPs, die nur mit LAN verbunden sind
- 8. Erstellen von Menüverknüpfungen, die miteinander verbunden sind
- 9. Wählen Sie Städte, die in der Nähe Dinge haben
- 10. Bestimmen Sie die ContentObserver
- 11. So identifizieren Sie Benutzer, die über einen Remote-Desktop mit einem Windows-Server verbunden sind
- 12. Erstellen Sie eine verknüpfte Liste für alle Knoten, die durch Knoten mit Chiffre verbunden sind
- 13. So finden Sie alle Clients, die von bestimmten Hostnamen in ChannelGroup verbunden sind
- 14. Aufrufe von allen Anwendungen, die mit einer Datenbank verbunden sind
- 15. Die Polylinie an Straßen im Flugblatt einrasten
- 16. A == B vs B == A, Was sind die Unterschiede
- 17. Zwei node.js-Anwendungen, die mit derselben mongodb-Datenbank verbunden sind
- 18. Suchalgorithmus aber für Funktionen
- 19. Xquery für alle Knoten bestimmen, sind einzigartig
- 20. So geben Sie nur Zeilen zurück, die mehr als einmal inner-verbunden sind
- 21. So erstellen Sie Dropdown-Liste, die Städte mit seinen ersten Buchstaben bietet
- 22. So finden Sie Funktionen, die fast überschreiben sind in C++
- 23. Onix-Dateien, die mit Shopify oder Wordpress verbunden sind [Hilfe]
- 24. So erhalten Sie Daten aus einer Tabelle, die verbunden wurde
- 25. Ist jhipster die einzige Lösung, um Seiten und Felder zu erzeugen, die mit DB verbunden sind?
- 26. Bestimmen Sie die Jahreszeit von Datum mit Lubridate in R
- 27. ST_Contains. Finden Sie alle Straßen, die innerhalb des Bereichs liegen
- 28. Get Liste der Straßen für die ausgewählte Stadt
- 29. Warum sind die Namenskonventionen von Jest so, wie sie sind?
- 30. Die beste Methode zum Speichern und Auswählen mehrerer Bundesstaaten/Städte für ein Unternehmen?
Ich fürchte, du musst etwas expliziter sein. Können Sie Ihr Problem bitte etwas deutlicher beschreiben? –
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" –