Der Widerspruch
In der Tat sind die beiden Systeme ziemlich exklusiv zueinander. Wie du erwähnt hast:
A *: Dies wird nur verwendet, um einen Pfad zu finden, und während der Bewegung ist die Beflockung die einzige Möglichkeit, die Kollisionserkennung und -vermeidung für Einheiten zu verwalten
Hier sind die wichtigsten Unterschiede, Vor- und Nachteile, die Sie berücksichtigen sollten:
+---------------------+-------------------------------------+
| A* Algorithm | Flocking |
+---------------------+-------------------------------------+
| Abstract overlay | Real-world representation |
+---------------------+-------------------------------------+
| Graph-Based (Nodes) | Free-Form (float coordinates) |
+---------------------+-------------------------------------+
| Optimal trajectory | Physical Trajectory (speed, inertia)|
+---------------------+-------------------------------------+
| Individual | Group dynamics |
+---------------------+-------------------------------------+
| Global knowledge | Local knowledge |
+---------------------+-------------------------------------+
Wenn Sie die beiden mischen möchten, muss ich davon ausgehen, dass Sie eine Möglichkeit haben, beide zum Laufen zu bringen (aber Sie möchten Ratschläge, wie sie zusammenarbeiten können ). Das heißt, Sie haben bereits:
- Eine physische Welt , in der sich Ihre Boids bewegen, miteinander interagieren und an Weltgrenzen stoßen können.
Dies kann ein 2D-Satz von Segmenten, Polygonen, Kreisen sein, die Wände und Hindernisse bilden, sowie freundliche und feindliche Einheiten und Gebäude, Hänge, Geländetyp, Materialien, politisches Eigentum usw. Das heißt, alles, was Ihre Charaktere physisch oder moralisch beeinflussen kann.
Jetzt können sich Ihre Boids innerhalb dieser Darstellung bewegen, Trägheit haben, auf Kräfte reagieren (reale Kräfte wie Kollisionen oder Verhaltenskräfte wie Suchen, Fliehen). Dies ist wahrscheinlich nicht nur diskrete Zellen, da Boids normalerweise nicht auf Zellen beschränkt sind, sondern es könnte sein.
Letztendlich ist dies unsere Welt der Spielsimulation / Mechanik. Machen Sie es also so, wie Sie es möchten.
- Eine grafische Darstellung Ihrer Welt , mit der A-Star arbeiten kann.
Dies ist eine übergeordnete abstrakte Darstellung (Grafik mit Knoten und gewichteten Kanten). Dies erfordert keine Informationen über den Geländetyp oder irgendetwas davon: nur Knoten und gewichtete Kanten. Eine KI kann mit dieser abstrakten Darstellung ganz einfach umgehen, um sie auf ein Ziel zu lenken, und nicht auf die physische Welt in ihrer ganzen Komplexität.
- Damit die beiden Darstellungen interagieren können, benötigen Sie außerdem:
- Eine Möglichkeit, eine beliebige Weltposition einem Knoten im Diagramm zuzuordnen
- Umgekehrt eine Möglichkeit, von jedem Knoten im Diagramm aus einen passenden Ort in der physischen Welt zu bestimmen .
(Beachten Sie, dass dies keine Eins-zu-Eins-Zuordnung ist. Sie können also die physische Position dieses Punkts in der Zelle nach dem Zufallsprinzip sortieren, um organische Pfade zu erhalten.)
(Im Rest dieser Antwort werde ich Flocking algo kursiv schreiben und A-Star algo ermutigen, wie ich es oben getan habe).
Wie können wir diese beiden Systeme zusammenarbeiten lassen, um das Beste aus beiden herauszuholen?
Auf dem Weg zur Zusammenarbeit
Teilen Sie die Verantwortlichkeiten zwischen Ihren Algen auf.
- Lassen Sie A-Star einen vernünftigen globalen Weg (Think Guidance System) im abstrakten Bereich finden. Es ist im Grafikraum optimal und im realen Raum gut genug.
- Lassen Sie Flocking Ihre Boids lokal entlang des Pfades fahren.
Der A-Star wird einen Weg zu seinem Ziel finden , indem er dem Flocking-Algo clevere temporäre Suchziele zuführt .
Detaillierte Implementierung:
- Bereiten Sie vorher einige Boids vor, von denen jedes zu jeder Zeit Folgendes hat:
- Ein Makroziel und ein globaler Weg zu diesem Ziel
- Ein lokales Tracking-Ziel für das Lenkverhalten , das wir auf dem gewünschten globalen Weg bewegen
- Führen Sie bei jedem Zeitschritt für jedes Boid Folgendes aus:
- Bewegen Sie das Boid entsprechend seinem Verhalten (Punktsuche plus Kollision plus Beflockung usw.) in der physischen Welt
- Ordnen Sie den aktuellen Standort des Boids seinem repräsentativen Diagrammknoten zu
- Wenn das Boid seinen vorherigen Knoten verlassen hat, muss es seinen Pfad neu berechnen! Wir geben ihm jetzt ein neues Ziel:
- Führen Sie eine A-Star-Suche vom Boid-Knoten zum diskretisierten Makro-Zielknoten durch. Dies gibt einen globalen Pfad zurück .
- Isolieren Sie einen Knoten weiter im globalen Pfad (Der nächste Knoten oder der nachfolgende, um ein fließenderes Suchverhalten zu erzielen?)
- Entdiskretisieren Sie es (machen Sie es zurück an einen physischen Ort ).
- Weisen Sie dem Boid ein Suchverhalten gegenüber diesem lokalen Ziel zu
Anmerkung 1: Trennung von Bedenken
Sie haben A-Star geändert, indem jede Einheit die Zellenbelegung durch andere Einheiten überprüft. Dies hat viele Vorteile von A-Star beeinträchtigt:
- Der Pfad ist nicht mehr optimal
- Es ist nicht mehr garantiert, dass der Pfad aufgrund von Interaktionen das Ziel erreicht
- Einheiten gehen immer dann hin und her, wenn ein Pfad blockiert / freigegeben wird
Dies liegt daran, dass Sie gemischte Bedenken haben, indem Sie die Algo sowohl einen optimalen Pfad finden als auch die Interaktion der Einheiten verwalten lassen. Das Schöne am Mischen zweier Algorithmen ist, dass Sie dies lösen können, indem Sie A-Star einfach einen Pfad finden lassen (unabhängig von anderen Einheiten, es ist das einzige, wofür es gut ist) und Flocking Konflikte lösen lassen (eine Aufgabe, bei der es ist gut für).
Hinweis 2: Stau der Einheit
Wenn Sie sich Sorgen machen, dass Gruppen von Einheiten sich gegenseitig (wie diese (AAAA)--> <--(BB)
) im Beflockungsmodus blockieren , gibt es Möglichkeiten, dies zu mildern.
- Versuchen Sie, Einheitengruppen anhand ihrer Absicht zu erkennen (Zielknoten) und verteilen Sie eine Abstoßungskraft auf jede Einheit der kleineren Gruppen, um "Platz zu machen" (größere Gruppe = größere Priorität).
- Wenn Sie großen Gruppen Massenordnung geben, berücksichtigen Sie dies bei Ihrem Disretisierungsprozess: Machen Sie den diskreten Graphen gröber, wenn Sie mit großen Gruppen arbeiten. Grober A-Stern findet nur einen Weg durch ausreichend große "Löcher".
Hinweis 3 - Unbegehbares Gelände
Informationen zum Gerät, das in nicht begehbares Gelände geht: Keiner der Algorithmen erlaubt dies.
Auf hoher Ebene befiehlt A-Star einer Einheit niemals, durch nicht begehbare Kanten zu gehen, da diese Kanten überhaupt nicht in der Grafik vorhanden sein sollten.
Auf einer niedrigeren Ebene sollte das Lenkverhalten Kollisionsreaktionen umfassen, die Boids von den Wänden fernhalten.
Gearbeitetes Beispiel
Der gesamte weiße Raum in der physischen Welt ist navigierbar, die Grafikwelt ist ein entsprechendes Navigationsnetz . Beachten Sie, dass ich der Geometrie im Diagramm absichtlich nicht gefolgt bin, da es sich um eine Abstraktion handelt. Es spielt also keine Rolle, solange die Kanten ein korrektes Gewicht haben (nicht gezeigt).
Das Boid ist in A
und a
das Ziel ist in E
und e
es gibt eine Tür in D
und d
.
Physical world Graph world
+--------+------+ a---b
|A B|F G| |\ /|
| | | | X |
| | | |/ \|
| | | c---(d)---f
| | | |\ / |
| + | | X |
|C D E| |/ \ |
+---------------+ e----g
Das Boid ist also drin a
, sein A-Star-Pfad ist a->b->d->e
. A-Star entscheidet also, dass die nächste Bewegung auf hoher Ebene stattfinden soll d
(zwei Eckpunkte entfernt, um glatte Flugbahnen zu erstellen). Da d
beschließt, D
nimmt der Boid ein suchendes Verhalten gegenüber an D
. Aber der Boid hat auch große Angst vor einem Feind. B
Hier ist also, was passiert (die Punkte zeigen die Flugbahn):
Physical world Graph world
+--------+------+ a---b
|A B|F G| |\ /|
|. | | | X |
|. | | |/ \|
|. | | c---(d)---f
| . | | |\ / |
| . + | | X |
|C D E| |/ \ |
+---------------+ e----g
Das Boid steuerte weg von B
(Kombination aus Suchen + Fliehen), wechselte dabei den Knoten und ist jetzt auf dem Knoten c
! Wir berechnen den Pfad neu und bekommen jetzt c->d->e
. Das Boid wird E
als Suchziel zugewiesen . Usw. usw.
Auf diese Weise erhalten wir einen natürlichen und emotional kohärenten Weg, der eine Mischung aus A-Star- und Lenkverhalten darstellt.