Hintergrund
Ich habe kürzlich das PC-Spiel "Darkest Dungeon" gespielt. Im Spiel müssen Sie Dungeons erkunden, die aus verbundenen Räumen bestehen (siehe Abbildung unten).
Hier sind die Regeln:
- Sie beginnen in einem festen Raum (Eingang). Sie können nicht auswählen, wo Sie beginnen möchten.
- Ziel ist es , jeden Raum mindestens einmal zu besuchen
- Der Abstand zwischen benachbarten Räumen ist für alle Räume gleich.
- Sie können Zimmer und Gehwege so oft besuchen, wie Sie möchten
Frage
Was ist der kürzeste Weg vom Eingang, der jeden Raum mindestens einmal besucht?
Unterfragen:
- Welche Algorithmen könnten verwendet werden, um dieses Problem zu lösen?
- Gibt es Implementierungen, die für jemanden wie mich kostenlos (und ziemlich einfach) zu verwenden sind?
Was ich versucht habe
Ich habe andere Fragen wie diese oder jene gefunden, ohne eine Antwort zu finden. Ich bin mit dem (grundlegenden) TSP vertraut und kann einfache TSPs codieren und lösen. Hamilton-Pfade haben mein Problem nicht gelöst, da mehrere Besuche nicht möglich sind. Das chinesische Postbotenproblem gilt auch hier nicht in seiner Grundform, da ich nicht jeden Rand besuchen muss.
Aktualisieren
Wie ich in den Kommentaren festgestellt habe, bin ich kein Informatiker und nicht daran interessiert, mathematische Aussagen zu beweisen (vielleicht werde ich diese Frage zu einem späteren Zeitpunkt über Stackoverflow stellen). Außerdem bin ich kein Programmierer und die Chancen, dass ich selbst eine Lösung codieren kann, sind ziemlich gering. Aber ich vermute, ich bin nicht der erste, der sich mit einem Problem dieser Art befasst.
Laut @Shreesh und @Dib könnte das folgende Verfahren angewendet werden:
- Erstellen Sie eine paarweise Abstandsmatrix mit allen Räumen und fügen Sie so Kanten zwischen allen Räumen hinzu.
- Lösen Sie TSP mit einem Standardlöser (z. B. concorde).
- Besuchen Sie ab dem Eingang alle Räume entsprechend der Lösung. Ersetzen Sie nicht benachbarte Räume durch den kürzesten Abstand zwischen diesen Räumen.
Wird dieses Verfahren die Antwort auf das Problem liefern?
quelle
Antworten:
Travelling Salesman Problem, auch wenn Sie das Wiederholen von Knoten zulassen, ist NP-schwer. Siehe Computerkomplexität von TSP .
Umans und Lenhart zeigen Härteergebnisse für Hamilton-Graphen in Solid-Grid-Graphen, 1997 .
TSP für Euklidealfall (oder Graphen mit Dreiecksungleichung) implizieren auch die NP-Härte von TSP mit Knotenwiederholung. TSP auch für Manhattan DistanzL1 (oder L∞ ) Metrik ist NP-vollständig. Siehe das Originalpapier von Papadimitriou zu diesem Thema .
Möglicherweise können Sie die NP-Härte von TSP für Ihren Fall nachweisen, indem Sie Bögen zu Knoten hinzufügen, die den entsprechenden Abstand als Länge des kürzesten Pfades zwischen Knoten haben, wodurch Wiederholungen der Knoten simuliert werden. TSP für Ihren speziellen Fall sieht aus wie ein NP-vollständiges Problem.
Schreiben Sie also entweder einen ausreichend guten (heuristisch gesehenen) exponentiellen Verzweigungs- und gebundenen Algorithmus, um eine kürzeste Tour zu berechnen (was bei kleinem Diagramm möglicherweise nicht so ineffizient ist), oder vergessen Sie die Optimierung und berechnen Sie eine ausreichend gute Näherung.
quelle
Sie können dies wie ein modifiziertes Problem bei der Planung der Pfadabdeckung behandeln, das Sie in wenigen einfachen Schritten lösen können:
1) Erstellen Sie aus den Gitterräumen einen ungewichteten ungerichteten Graphen. Pfadübergänge sind Knoten und kanten die Pfade zwischen diesen Knoten.
2) Finden Sie den minimalen Spannbaum von Ihrem Startpunkt aus mithilfe der Tiefensuche.
3) "Unterteilen" Sie das zugrunde liegende Raster so, dass Ihr minimaler Spannbaum zwei "Spuren" erstellt.
4) Gehen Sie von Ihrem Startpunkt aus im Uhrzeigersinn auf der rechten Spur von Knoten zu Knoten, bis Sie zum Startpunkt auf der komplementären Spur zurückkehren.
Auf diese Weise erhalten Sie einen minimalen Rundgang durch die Räume, der proportional zur Anzahl der Kacheln im Dungeon ist. Dies ist im Wesentlichen der Pfadplanungsalgorithmus für die Spiral Spanning Tree-Abdeckung, der auf eine reduzierte Einstellung angewendet wird. (Vgl. "Spiral-stc: Ein Online-Abdeckungsalgorithmus für Netzumgebungen durch einen mobilen Roboter")
quelle
Zusätzlich zu der obigen Antwort möchte ich auf einige bereits verfügbare TSP-Löser hinweisen.
quelle