Ich entwickle einen Bot für einen BattleTech-Brettspielsimulator http://en.wikipedia.org/wiki/BattleTech , der rundenbasiert ist.
Das Brett ist in Sechsecke unterteilt, von denen jedes einen anderen Geländetyp und eine andere Höhe hat. Sie fahren einen Roboter, der über sie fährt, um andere Roboter zu zerstören.
Ich kenne nur die Dijkstra- und A * -Pfadfindungsalgorithmen, aber das Problem ist, dass es drei Arten von Bewegungen gibt: Gehen, Laufen und Springen mehrerer Sechsecke (jede von ihnen hat ihre eigenen Regeln). Laufen und Gehen sind fast dasselbe.
Der beste Weg könnte eine Kombination oder jede Bewegungsart sein. Hier ist ein Beispiel für eine Karte: http://megamek.info/sites/default/files/isometric_view.png
Kennen Sie einen guten Algorithmus für diese komplexe Wegfindung oder eine Möglichkeit, A * -Ergebnisse für jede Bewegungsart zu kombinieren?
quelle
Antworten:
Sowohl Dijkstra als auch A * können den Kanten (= Verbindungen) von einer Kachel zur anderen unterschiedliche Kosten hinzufügen. Sie ermöglichen es auch, zwei Knoten (= Kacheln) mit mehr als einer Kante zu verbinden, die jeweils unterschiedliche Kosten verursachen.
Der alternative Sprungmodus würde bedeuten, dass es eine alternative direkte Kante von jedem Plättchen zu jedem Plättchen in Sprungdistanz gibt. Da ein Mech in einer Runde entweder laufen oder springen kann, sind die Kosten für die Verwendung dieser Kante die Bewegungspunkte einer ganzen Runde zuzüglich der verbleibenden Punkte der aktuellen Runde, als es in dieser Runde bereits eine Bewegung gab.
Nach Ihrer Beschreibung macht die Entscheidung für Gehen oder Laufen keinen großen Unterschied in Bezug auf die Wahl des Pfades, sondern es scheint eher eine strategische Entscheidung zu sein. Der Schauspieler kann definitiv gehen, wenn das Ziel in der aktuellen Runde erreicht werden kann, ohne auf Laufen zurückzugreifen. Ansonsten gibt es viele Faktoren zu berücksichtigen, wie zum Beispiel:
Es gibt keine strengen Regeln, um diese Entscheidung zu treffen. Das Beste, was Sie tun können, ist ein heuristischer Ansatz. Weisen Sie allen Umständen positive oder negative Punktwerte zu, addieren Sie sie und prüfen Sie, ob das Ergebnis positiv oder negativ ist.
Es gibt noch einen weiteren Faktor bei der Pfadfindung, den Sie berücksichtigen sollten: Unter bestimmten Umständen kann es für einen Mech sinnvoll sein, zu vermeiden, dass er an bestimmten Orten seinen Zug beendet. Wenn Sie sich in einem Gefahrenbereich befinden, ist es möglicherweise besser, drei Runden von A nach B zu drehen, aber jede Runde in Deckung zu beenden, als nur zwei Runden zu verwenden, die jedoch am Ende jeweils freigelegt sind. Oder vielleicht nicht. Das hängt von den Umständen und der genauen Spielmechanik ab. Dies ist wiederum eine strategische Entscheidung, die Sie auf der Grundlage von Heuristiken treffen müssen. Sie können dies darstellen, indem Sie den Kanten, die den Zug auf einem gefährlichen Plättchen beenden, zusätzliche Kosten hinzufügen, um die KI von diesem Zug abzuhalten.
quelle