Pathfinding-Algorithmus mit angegebener Entfernung / Anzahl der Knoten

8
___ qstnhdr ___ Pathfinding-Algorithmus mit angegebener Entfernung / Anzahl der Knoten ___ answer12510193 ___

Da es NP-vollständig ist, wie von Haile gezeigt, ist hier eine Heuristik, falls Ihr Problem klein genug ist:

  • Finden Sie Halbinseln (d. h. Teile des Graphen, die mit nur einem Knoten mit dem Rest verbunden sind), die nicht %code% oder %code% enthalten, und entfernen Sie sie.
  • Finde den kürzesten Pfad %code% von %code% bis %code% . Wenn %code% kleiner als %code% ist, gibt es keine Lösung.
  • Führen Sie nun eine Tiefensuche von %code% bis %code% durch. Verwenden Sie die folgende Heuristik, um auszuwählen, welcher Knoten zuerst gegraben werden soll. Lassen Sie %code% die aktuelle Kachel in der Tiefensuche sein. Projizieren Sie in der euklidischen Geometrie die Position von %code% in der Zeile %code% und nennen Sie diesen Punkt %code% . Versuchen Sie, das Verhältnis %code% nahe zu %code% zu halten. Oder besser, irgendwie "project" %code% auf dem Pfad %code% , um %code% zu erhalten und behalten Sie das Verhältnis %code% nahe zu %code% .

Wir wissen nicht viel über die genauen Fälle, die Sie behandeln werden. Es gibt sicherlich mehr Heuristiken, die hinzugefügt werden müssen, um Teile der Tiefensuche zu löschen.

    
___ answer12510270 ___

Da Sie ein Problem haben, bei dem jeder Schritt 1 kostet, gibt es eine einfache Variante der Tiefensuche, die Suche mit Tiefenbegrenzung sollte in der Lage sein, den gewünschten Pfad zu finden. Naive Version in Python:

%Vor%

Wie andere bemerkt haben, ist das Problem NP-vollständig, also erwarten Sie keine Wunder für längere Weglängen.

Russell & amp; Norvig ist das definitive Lehrbuch für diese Art von Algorithmen.

    
___ 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. ___ tag123algorithm ___ Ein Algorithmus ist eine Folge wohldefinierter Schritte, die eine abstrakte Lösung für ein Problem definieren. Verwenden Sie dieses Tag, wenn sich Ihr Problem auf den Algorithmusentwurf bezieht. ___ answer12515261 ___

Nun, da die Frage mit den üblichen Werten der Entfernung aktualisiert wurde ...

Sie haben also bei jedem Zeitschritt höchstens 4 Wahlmöglichkeiten, und es gibt höchstens 5 + 4 = 9 Schritte. Das macht weniger als 4 9 = 262 144 mögliche Pfade. Versuchen Sie zuerst, Brute-Force, und sehen Sie, wie weit es gehen kann.

Beachten Sie auch, dass das wiederholte Werfen eines Würfels, bis Sie etwas anderes als 6 erhalten, dem Zeichnen einer Zufallszahl zwischen 1 und 5 entspricht. Trivial bei einem Computerspiel, und es gibt physische Würfel (google für "5 seitige Würfel") Bilder). Die Verwendung eines zehnseitigen Würfels ist ebenfalls üblich.

    
___ answer12509949 ___

Wenn es einen schnellen Algorithmus dafür gäbe, könnten Sie %code% einsetzen und der Algorithmus würde Ihnen schnell sagen, ob es einen Hamiltonian gibt Pfad Da dieses Problem NP-vollständig ist, ist auch Ihr Problem.

    
___
Bikonja 20.09.2012, 09:23
quelle

4 Antworten

3

Da es NP-vollständig ist, wie von Haile gezeigt, ist hier eine Heuristik, falls Ihr Problem klein genug ist:

  • Finden Sie Halbinseln (d. h. Teile des Graphen, die mit nur einem Knoten mit dem Rest verbunden sind), die nicht S oder E enthalten, und entfernen Sie sie.
  • Finde den kürzesten Pfad P von S bis E . Wenn n kleiner als len(P) ist, gibt es keine Lösung.
  • Führen Sie nun eine Tiefensuche von S bis E durch. Verwenden Sie die folgende Heuristik, um auszuwählen, welcher Knoten zuerst gegraben werden soll. Lassen Sie A die aktuelle Kachel in der Tiefensuche sein. Projizieren Sie in der euklidischen Geometrie die Position von A in der Zeile (SE) und nennen Sie diesen Punkt A' . Versuchen Sie, das Verhältnis len(current path) / n nahe zu len([SA']) / len([SE]) zu halten. Oder besser, irgendwie "project" A auf dem Pfad P , um A'' zu erhalten und behalten Sie das Verhältnis len(current path) / n nahe zu len([SA''] along P) / len(P) .

Wir wissen nicht viel über die genauen Fälle, die Sie behandeln werden. Es gibt sicherlich mehr Heuristiken, die hinzugefügt werden müssen, um Teile der Tiefensuche zu löschen.

    
jrouquie 20.09.2012 09:56
quelle
3

Da Sie ein Problem haben, bei dem jeder Schritt 1 kostet, gibt es eine einfache Variante der Tiefensuche, die Suche mit Tiefenbegrenzung sollte in der Lage sein, den gewünschten Pfad zu finden. Naive Version in Python:

%Vor%

Wie andere bemerkt haben, ist das Problem NP-vollständig, also erwarten Sie keine Wunder für längere Weglängen.

Russell & amp; Norvig ist das definitive Lehrbuch für diese Art von Algorithmen.

    
Fred Foo 20.09.2012 10:01
quelle
2

Wenn es einen schnellen Algorithmus dafür gäbe, könnten Sie number of nodes = n einsetzen und der Algorithmus würde Ihnen schnell sagen, ob es einen Hamiltonian gibt Pfad Da dieses Problem NP-vollständig ist, ist auch Ihr Problem.

    
quelle
0

Nun, da die Frage mit den üblichen Werten der Entfernung aktualisiert wurde ...

Sie haben also bei jedem Zeitschritt höchstens 4 Wahlmöglichkeiten, und es gibt höchstens 5 + 4 = 9 Schritte. Das macht weniger als 4 9 = 262 144 mögliche Pfade. Versuchen Sie zuerst, Brute-Force, und sehen Sie, wie weit es gehen kann.

Beachten Sie auch, dass das wiederholte Werfen eines Würfels, bis Sie etwas anderes als 6 erhalten, dem Zeichnen einer Zufallszahl zwischen 1 und 5 entspricht. Trivial bei einem Computerspiel, und es gibt physische Würfel (google für "5 seitige Würfel") Bilder). Die Verwendung eines zehnseitigen Würfels ist ebenfalls üblich.

    
jrouquie 20.09.2012 14:51
quelle

Tags und Links