Das ist etwas, was ich selbst erfunden habe, aber es scheint ein lustiges Problem zu sein, und es hat mich ratlos gemacht.Schnellster Pfad mit Beschleunigung bei Punkten
Sie haben eine Reihe von Punkten im zweidimensionalen Raum, wobei ein Punkt als "Start" und ein "Ende" bezeichnet wird. Jeder Punkt hat Koordinaten (in Metern vom Ursprung), aber auch eine "Beschleunigungszahl" (in Metern/Sekunde von Delta-V). Beim Erreichen eines Punktes (einschließlich des Starts) können Sie bis zu dieser Beschleunigungszahl in beliebiger Richtung beschleunigen. Die Kosten für die Kanten hängen von Ihrer aktuellen Geschwindigkeit ab, aber Sie müssen sich auch in die richtige Richtung bewegen.
Gibt es einen effizienten Algorithmus, um den schnellsten Weg bis zum Endpunkt zu finden? Ich habe nichts Besseres gefunden als "Versuche jeden Pfad und überprüfe die Ergebnisse". Djikstras und andere einfache Algorithmen funktionieren nicht, weil man nicht leicht sagen kann, dass ein Pfad zu einem Zwischenpunkt besser oder schlechter als der andere ist, wenn sie mit unterschiedlichen Anfangsgeschwindigkeiten ankommen.
Wenn das zu einfach ist, was ist, wenn Sie die Anforderung hinzufügen, dass Sie am Endpunkt anhalten müssen? (d. h., Sie müssen weniger als seinen Beschleunigungswert haben, wenn Sie das Ende erreichen.)
EDIT: Um klar zu sein, Richtung zählt. Sie behalten einen Geschwindigkeitsvektor bei, während Sie den Graphen durchlaufen, und Beschleunigung bedeutet, dass Sie ihm einen Vektor hinzufügen, dessen Größe auf die Beschleunigungszahl dieses Punktes beschränkt ist. Dies bedeutet, dass es Situationen gibt, in denen der Aufbau einer großen Geschwindigkeit nachteilig ist, da Sie zu schnell gehen werden, um zu anderen wertvollen Punkten/Ihrem Ziel zu "steuern".
Sie müssen weitere Details angeben. Wie würde Ihr Konzept der "Beschleunigung" funktionieren? Reduziert es alle Kantenkosten entlang eines Pfades um die "Beschleunigungszahl"? Was passiert, wenn Sie die "Beschleunigungszahl" weit über die Kosten hinaus akkumulieren? Die Einführung eines Konzepts wie "Beschleunigung" legt nahe, dass es gut wäre, eine entsprechende Idee von Reibung/Widerstand einzuführen, sonst könnte es zu einer "ungeprüften Geschwindigkeit" kommen. Bisher glaube ich nicht, dass Ihre Frage klar genug ist, um eine richtige Lösung zu formulieren, aber ich denke, das ist sehr interessant. – lightalchemist
Ich bezweifle, dass es eine analytische Lösung für dieses Problem gibt. Ich würde damit beginnen, zuerst ein viel einfacheres Problem zu lösen: die schnellste Route, die die Punkte in einer bestimmten Reihenfolge aufnimmt. (Dieser Suchraum hat eine Anzahl von Dimensionen, die der Anzahl der Zwischenpunkte entspricht, und ich kann keinen besseren Ansatz als das Annealing sehen.) Sobald Sie diese Methode haben, können Sie ein modifiziertes Dijkstra erstellen. – Beta
@lightalchemist Mit "Beschleunigung" meine ich "Geschwindigkeitsänderung". (Also, Randkosten = euklidische Distanz/Geschwindigkeit, aber nur erlaubt, wenn du in die richtige Richtung reist ... also) Unkontrollierte Geschwindigkeit ist in Ordnung (es soll ein Mathe-Puzzle sein, keine Simulation ... obwohl ich es getan habe Stellen Sie sich zunächst vor, dass ein Raumschiff Treibstoffcaches aufnimmt, so dass Reibung immer noch keine Sache wäre.) –