KI - mal in der Theorie

Posted By: Christian__A

KI - mal in der Theorie - 07/01/03 02:27

Hi Leute!

Ich bin gerade dabei, mir gedanken über ein neues KI - System zu machen. Nun mal zu den "Merkmalen" der KI:

- Bewegung über Waypoints, die zugleich verschiedene Aufgaben, wie z.B. Markieren von bestimmenten Positionen wie Mauern, hinter denen Gegner in Deckung gehen können oder "Zivilisten" alltägliche Handlungen ausführen, übernehmen.

- Möglichkeit, Actors in Gruppen agieren zu lassen

- Speicherung der Entity-Variabeln in einem großen Array, da die Skills nicht ausreichen.

- eine 10-20 Stellen große "to-do-list" für jeden gegner, wobei jede Tätigkeit eine unterschiedlich hohe priorität hat

- verwenden von herumliegenden gegenständen oder waffen

- kommunikation der gegner untereinander

- Gegner ergeben sich ( noch nicht sicher )

- Flucht über Verschiedene Wege ( auch über das Wypoint-System geregelt )

- Aufsuchen dunkler Punkte und Ecken, Verstecken hinter Säulen... ( Waypoints... )

So, ich hoffe jetzt habt ihr einen Eindruck gekriegt, was die KI nun so alles können soll und wie das funktionieren soll.

Ein Großteil wurde bereits im letzten halben Jahr umgesetzt und funktionierte, nur das Zusammenspiel bereitete noch Probleme. Deswegen habe ich auch beschlossen, nochmal von Vorne anzufangen. Und damit ich nicht wieder irgendwo hängen bleibe, wollte ich hier eine kleine Diskussion über KI allgemein anstoßen. Würde mich freuen, wenn hier viele ihre Erfahrungen mit KI in A5 / A6 einbringen würden.
Posted By: Damocles

Re: KI - mal in der Theorie - 07/01/03 03:56

Der größte Knackpunkt für die KI ist, das man es shafft die Interaktion zwischen den Entities zu ermöglichen.

Ich verwende ein sogenanntes Zyklussystem.
Das heisst, jede Entity startet mit ihrer actionfunktion einen "Lebenszyklus".

Bei jedem durchlauf (ein wait(1)) werden Kommandos ausgeführt.

So wird zuerst in dem Arraypart, den die Entity zugewiesen bekommen hat nachgeschaut, ob ihr eine Andere Entity ein Kommando gegeben hat, das kann zB sein: ich habe dich angegriffen und stehe neben dier.
Jezt kann die Entity entscheiden, ob sie sich ihrem angreifer zudreht oder wegrennt.

Auch kann der Entity das Kommando "Stirb" gegeben werden. Dann wechselt sie ihren Status zu tot.

Dananch wird überprüft, was die KI steuerung von der Entity will, so kann sie ihr auftragen einen neuen Weg in der Wegesuchfunktion suchen zu lassen. Dann wechselt sie ihren status in folge dem Weg...

Alle Entityvariablen sollten über eine set_meinevariable(Entity.skill_id) get_meinevariable... gesezt werden, die mit einem globalen array arbeiten, so ist man von levelwechseln unabhängig.

Und ein vernünftiges Pathfinding welcher art auch immer ist das Grundgerüst einer KI

sehr komplexes Thema....
Posted By: TB

Re: KI - mal in der Theorie - 07/01/03 04:23

Meine KI arbeitet mit sogenannten Paketen, die nacheinander abgearbeitet werden. Jedes Paket hat bestimmte Abbruchbedingungen oder kann manuell gestoppt werden und wird so lange ausgeführt, bis dies eintritt.
Die zentrale Steuerungseinheit überprüft die "Sinne" und Attribute des NSCs und führt dann entsprechende Aktionen aus. U.a. ist diese auch für Kommunikation zuständig, die über Scans mit entsprechend gesetzten signals ablaufen. Auf diese Weise werden auch das Hören, die Verwaltung von Weltevents, z.B. wenn etwas gestohlen wird, und versch. Attacks gesteuert. Jeder NSC hat zu jedem anderen einen Sympathiewert, der bei taktischen Überlegungen auch berücksichtigt, und von den Aktionen der anderen NSC gegenüber ihm beeinflusst wird.
Als Pathfinding-Lösung nehm ich die Router-Geschichte, da das, wie ich finde, den besten Kompromiss zwischen Schnelligkeit und Komfort darstellt.
Meine Daten werden über eine C++ Klasse verwaltet, jeder NSC bekommt so eine Klasse reserviert, auf die er dann über bestimmte funcs zugreifen kann.

Mir ist bei der Entwicklung meines RPG v.a. eine größtmögliche Flexibilität wichtig, denn bei sehr vielen NSCs spart man sich später die Arbeit, die man am Anfang investieren muss.
Posted By: VureX

Re: KI - mal in der Theorie - 07/01/03 05:22

Hallo zusammen

Ich für meinen Teil entwickle KI-Modelle für einen Mix aus EgoShooter-Schleich und Adventureelementen. Da das Spiel sehr vielseitige Anforderungen an die Künstliche Intelligenz der computergesteuerten Gegner stellt, habe ich bereits bei der anfänglichen Ausarbeitung und Konzeption grossen Wert darauf gelegt, dass die KI flexibel anpassbar, veränderbar und leicht neue Features integriert und ausgegliedert werden können. Ebenso war mir von anfang an wichtig, noch vor der eigentlichen Codearbeit an der KI einen gut funktionierenden, schnellen und effizienten Pathfinding-Algorithmus zu haben, was wir nach einiger Planung und zahlreichen Code-Stunden auch gelungen ist. Der Pathfinding-Algorithmus stellt übrigens eine Mischung aus einem A*-Algo und einem Way-Point-System zusammen.

Beim KI-Design ist meiner Meinung nach vorallem wichtig, dass das KI-Modell flexibel aufgebaut und gut studiert geplant wird. Zudem sollte das Programm innerhalb des KI-Codes immer nur an einer Programmstelle stehen, damit ein reibungsloser Ablauf gewährleistet wird und nicht die Attack-Funktion und die Patroullieren-Funktion gleichzeitig laufen.

Viel Spass beim Entwickeln eurer KI und immer dran denken, die KI möglichst gut auf euer eigenes Spiel anzupassen und erst neue Features hinzuzufügen, wenn die bisherige Version einwandfrei und ohne codetechnische Probleme funktioniert. Denn desto mehr Code ein Programm hat, desto schwerer sind Bugs zu finden und beseitigen und desto mehr Zeit geht letzten Endes im Debugging verloren.

Gruss Fure
Posted By: Damocles

Re: KI - mal in der Theorie - 07/01/03 06:53

@Fure: erstellst Du die Waypoints manuell im Wed, oder sind die automatisch erstell?
Ich lasse das Level automatisch durch einen Wegsucher "absuchen" und speichere das ergebniss in einer .txt datei, die man dann im spiel auslesen kann.

Bei mir aind alle Bewegungen der Entities Bewegungen zwischen dem Wegepunktgrid. Das gibt zwar Probleme mit der Auflösung bei großen Levels (da das Grid nur 160*160 Punkte Groß ist), aber ich habe keinerlei Probleme mit stheckenbleiben an Ecken. Das heist, jeder KI-Player kann sich zu jeder Zeit zum Player bewegen, (solange keine entity dazwischen steht)

Da ich hauptsächlich Nahkämpfe verwende, ist dies sehr wichtig.

Ich hab das Grundgerüst der Ki mit Statusabfragen und Kommandos. Jezt muß ich noch eine mögliche Gruppen KI entwickeln, so das Gegner, die einzeln schwach sind, durch kluge Taktik dem Player gefählich werden können, (ohne einfach als große Masse hingeplopt zu werden)
So könnte ein gegner den Player reizen, und dann wegrennen. Der unerfahrenen player rennt hinterher und wird dann von allen Seiten attackiert... oder so

Vor allem kann ich andere Leute an meiner Seite kämpfen lassen, die mir folgen und aktiv Feide aufspüren können.
Und das wichtigste wie immer für jede KI: das Pathfinding,
Es gibt genug Game Demos, wo ein Gegner zu dumm ist um den Mauervorsprung rum zu laufen...
Posted By: Christian__A

Re: KI - mal in der Theorie - 07/01/03 16:13

Guten Morgen !

Eure Lösungen hören sich ziemlich interessant an... Habe nun einige neue Ideen und Ansätze [Big Grin]

Bei unserer KI kommt es vor allem darauf an, dass sie einen realistischen und intelligenten Eindruck macht, da unser ganzes Spiel in einer realen Umgebung spielt und viel Wert auf eine tiefe Atmosphäre legt, die den Spieler in ihren Bann ziehen soll.
Dafür sind natürlich viele Faktoren wichtig... wie Damocles schon gesagt hat: "Es gibt genug Game Demos, wo ein Gegner zu dumm ist um den Mauervorsprung rum zu laufen..."
Genau solche Bugs, bei denen der Spieler vor dem PC dann aus dem Spiel "herrausgerissen" wird, wollen wir vermeiden.

Ich denke es ist sehr wichtig, darauf zu Achten, dass keine fehlerhafte KI die ganze Atmosphäre des Games vernichtet.

---

Mal was anderes:
Da wir ja komplett auf A* - Pathfinding verzichten und unsere Gegner / NPCs über Waypoints (die in WED platziert werden) durch die Levels rennen lassen, gibt es einige Probleme.

Es funktioniert zwar, das die Gegner den Player durch den ganzen Level verfolgen, aber nicht, dass sich z.B. 2 KI - Gesteuerte Actors in größeren Abständen hinterherrennen.

Unsere bisherige Lösung funktionierte so:

Sobald der Player einen Waypoint passiert ( die an allen Ecken von Gängen, "Abzweigungen" und wichtigen Punkten gesetzt sind ), wird eine Variable um eins erhöht und dieser Wert einem Skill ( sagen wir mal skill x ) des Wayoints zugewiesen.
Verfolgt nun ein KI-gesteuerter Gegner den Player, sucht dieser immer den Waypoint, der sichtbar ist und zugleich den höchsten wert in skill x hat. Dies ist dann der Waypoint, den der Gegner erreichen muss, um dem Player zu folgen.

Ich hoffe ihr habt es verstanden [Big Grin] und erkennt nun, warum es nur zwischen KI u. Player funktioniert.

Habt ihr vielleicht Ideen, wie man das Grundprinzip meiner Lösung entsprechend könnte?

Mein Ansatz wäre folgender: Jeder Actor speichert in einem Array ( ja, ich mag Arrays *g* ) sagen wir, maximal die letzten 5 - 10 passierten Waypoints des Gegners, den er verfolgen will. Sollte nun ein Actor einem anderen folgen wollen, braucht er nur diese Information abrufen und dem Weg folgen.
Natürlich müsste man noch integrieren, dass der Actor realistisch handelt, also dem anderen nicht durch ein Labyrinth folgen kann, wenn dieser schon ewig weit weg ist. Aber ich denke das ist eher ein kleineres Problem.

Meint ihr, diese Lösung wäre realisierbar?
Posted By: ello

Re: KI - mal in der Theorie - 07/01/03 16:50

ich finde es auch wichtig, mehrere zufällige entscheidungen zu treffen. z.b. wenn in einem raum ein mensch ist und man kommt mit einer pistole reingestürmt. dann muss er nicht gleich aufspringen und ballern. er könnte sich auch in die hosen machen, oder aufschreien und wild umherrennen. auch bei der bewegung sollte man zufälle einbauen, dann kann sich z.b. ein wächter an einer wegverzweigung mal nach rechts oder nach links wenden.
auch entscheidungen ob ein wesen andere um hilfe ruft sollte man von verschiedenen gegebenheiten abhängig machen. z.b. wieviel energie hat er, wie viel power,munition - wie weit sind die anderen entfernt, wie stark ist der spieler, und und und...
Posted By: Christian__A

Re: KI - mal in der Theorie - 07/01/03 17:39

@ello: Natürlich hast du Recht. Dadurch bekommen die Actors etwas "Menschliches". Hätte man ein Game , in den man gegen Roboter kämpft, könnte man darauf verzichten [Big Grin]

Es ist auch immer wieder net, eine "KI" von Tieren zu Programmieren. Vor einigen Monaten hab ich mal etwas mit Ratten experimentiert. Sah ganz lustig aus, wie 50 Ratten in einem kleinen Raum herumranten ohne hängenzubleiben. Vielleicht mach ich da mal ne kleine Demo draus... wenn interesse besteht [Big Grin]
Posted By: ello

Re: KI - mal in der Theorie - 07/01/03 18:57

jo, mach mal-würd ich mir gerne ansehen...
Posted By: VureX

Re: KI - mal in der Theorie - 07/01/03 20:16

Hallo zusammen

Ich greife bei meinem Pathfinding-Algorithmus auf eigenes gesetze Pathpoints zurück, bei denen es sich allerdings nicht um die gewöhnlichen "WED-Pathpoints", sondern um eigens kreieerte Pathpoint-Modelle handelt. (damit sind mehr Variationsfreiheiten gegeben) Zudem greifen wir nur auf eigene Funktionen zurück und nutzen keine Templates o.ä.

Gruss Fure
Posted By: Damocles

Re: KI - mal in der Theorie - 07/01/03 22:00

@Christian,

Dein Wegefinden erinnert mich an einen Hund, der seinem Ziel hinterherschüffelt [Big Grin]

Naja, ich würde bei diesem Konzept jedem Wegepunkt eine eigene ID geben, zb skill1 = wegepunktid

mahr braucht er nicht, um sich eindeutig zu identifizieren.

Dann bekommt jede entity (player oder Folger) eine Id als skill,

Der Rest läuft über ein Array: es muß Anzahl_der_Wegepunkte * Anzahl_der_KIEntities groß sein, dann kann jede Entity ihre Duftmarke an jedem Wegepunkt hinterlassen.

das auslesen geht zB so "HOCH"Wert_des_wegepunktes = get(meine_ziel_KIentity.id, Wegepunkt_id)

mit einer funktion, die auf das array zugreift.

Aber: dieses System hat zB das Problem, das der Folger immer vom niedrigsten zum nächsthösten Punkt sucht, steht aber der Player um die Ecke (und sieht den Player nicht mit direktem Trace) dann wieder: "manche Gegner sind zu blöd um um einen Mauervorsprung rumzulaufen"
Posted By: Christian__A

Re: KI - mal in der Theorie - 07/01/03 23:41

Hi!
So endlich zuhause... hab fast den restlichen Arbeitstag damit verbracht, mir Notizen zu meiner KI zu machen... was einem mit der Zeit nicht so alles einfällt [Big Grin]

@Damocles: Ja, das Problem mit dem Trace ist mir auch schon bewusst geworden...Bin gerade dabei, zu überlegen, was sich da machen lässt. Vielleicht den Trace-Zielpunkt etwas versetzen? und dann 3 traces hintereinander durchführen. Also 1 mal genau an den Player, das zweite mal etwas in die eine Richtung verschoben und dann das 3. mal etwas in die andere.. oder so *g*

@fure: wir verwenden auch entitys als waypoints... da bei uns auch so einige variablen in ihnen gespeichert werden müssen. Und Template-Verachter bin ich eh schon seid A3 Zeiten [Big Grin]
Posted By: TB

Re: KI - mal in der Theorie - 07/02/03 01:29

Wie funktioniert bei dir eigentlich das Gehen zu einem bestimmten Punkt? Könntest du nicht einfach die NSCs einfach zu den entsprechenden Positionen laufen lassen, die ständig geupdatet werden?
Posted By: Christian__A

Re: KI - mal in der Theorie - 07/02/03 14:28

Meinst du, einfach in die Richtung des Ziels drehen und drauf zulaufen lassen? Das Funktioniert nur, wenn das Ziel sichtbar ist.
Mit A* würde es natürlich auch in verwinkelten Gängen funktionieren. Aber da wir ja komplett auf nen A*-Algo verzichten, muss das anders gelöst werden. Und es funktioniert auch ganz gut so [Big Grin]
© 2024 lite-C Forums