Da es NP-vollständig ist, wie von Haile gezeigt, ist hier eine Heuristik, falls Ihr Problem klein genug ist:
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.
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.
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.
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.
Da es NP-vollständig ist, wie von Haile gezeigt, ist hier eine Heuristik, falls Ihr Problem klein genug ist:
S
oder E
enthalten, und entfernen Sie sie. P
von S
bis E
. Wenn n
kleiner als len(P)
ist, gibt es keine Lösung. 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.
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.
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.
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.
Tags und Links algorithm path-finding