path-finding

___ answer14591158 ___

Ich denke, Ihr Algorithmus hat kein Problem, und wenn keine diagonalen Bewegungen verfügbar sind, ist es nicht notwendig, dies zu berücksichtigen. Die Manhattan-Distanz ist eine einfache Heuristik, und wenn Sie näher am Zielknoten sind, gibt die H-Funktion kleinere Zahlen, obwohl die G-Funktion (Entfernung vom ersten Knoten bis hier) größer wird. Als Ergebnis haben viele Knoten den gleichen f-Wert.

    
___ qstnhdr ___ Ein Sternalgorithmus ohne diagonale Bewegung ___ answer14171559 ___

Ich denke, es ist egal, wie viele Quadrate die gleiche f-Punktzahl haben. Wie im Hauptalgorithmus von A * gesagt, "Für die Zwecke der Geschwindigkeit kann es schneller sein, die letzte zu wählen, die Sie der offenen Liste hinzugefügt haben". Ich hoffe, es wäre kein Problem, wenn Sie keine diagonalen Kosten in Betracht ziehen. Es scheint interessant, wie es Ergebnisse liefert.

Ich hoffe, Sie haben diesen Artikel bereits gelesen. Wenn nicht, schau es dir klar an.

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ answer14591345 ___

A * ist vollständig generisch - der Graph, den Sie ihm geben, kann eine beliebige Form haben. Es interessiert nur, ob Sie von X nach Y gehen können, nicht warum. Wenn diagonale Bewegung nicht erlaubt ist, ist es egal. Und es ist ziemlich gut und legitim für viele Knoten, die gleiche %code% Punktzahl zu haben - es wird tatsächlich erwartet.

    
___ qstntxt ___

Situation: Ich versuche, den A * -Algorithmus in C ++ - Code zu übersetzen, wo keine diagonale Bewegung erlaubt ist, aber ich habe seltsames Verhalten.

Meine Frage : Ist es notwendig, auch die diagonalen Kosten zu berücksichtigen, auch wenn keine diagonale Bewegung möglich ist. Wenn ich die Berechnungen ohne Diagonalkosten mache (mit einem "heuristischen" Faktor 10), habe ich immer den gleichen fscore von 80 (das kann man im zweiten Bild sehen, wo ich fscore, gscore und hscore berechnet) und das scheint wirklich seltsam zu sein mich. Aus diesem Grund (fast alle Knoten haben einen fscore von 80) scheint das Algorimth nicht zu funktionieren, weil zu viele Knoten den gleichen kleinsten fscore von 80 haben.

Oder ist das normales Verhalten und wird eine A * Stern-Implementierung ohne Diagonale viel mehr Arbeit leisten müssen (weil mehr Knoten den gleichen minimalen fscore haben)?.

Ich glaube nicht, dass diese Frage etwas mit meinem Code zu tun hat, sondern mit meiner Argumentation, aber ich poste sie trotzdem:

pathFind.cpp

%Vor%

node.cpp

%Vor%     
___ tag123astar ___ A * ist ein Graph Shortest-Path-Algorithmus, der eine heuristische Funktion verwendet, um die Suche zu beschleunigen ___ Tag123Pfadfinding ___ Pathfinding bezieht sich im Allgemeinen auf das Problem, die kürzeste Route zwischen zwei Punkten zu finden, unter Vorbehalt irgendwelcher Hindernisse. Pathfinding findet Anwendung in einer Vielzahl von Bereichen einschließlich Robotik und Spieleentwicklung. Algorithmen zur Wegfindung neigen dazu, eng mit Graph- und Baumsuchalgorithmen verwandt zu sein. ___
3
Antworten

Ein Sternalgorithmus ohne diagonale Bewegung

Situation: Ich versuche, den A * -Algorithmus in C ++ - Code zu übersetzen, wo keine diagonale Bewegung erlaubt ist, aber ich habe seltsames Verhalten. Meine Frage : Ist es notwendig, auch die diagonalen Kosten zu berücksichtigen, auch wen...
04.01.2013, 18:40