Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Nox

Supermoderator

  • »Nox« ist der Autor dieses Themas

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

1

28.01.2011, 17:23

KI-Potenzialfeld Ansatz

Hi,

Im Rahmen von www.galaxy-under-fire.de brauchen wir u.a. eine KI für den RTS-Part. Zunächst haben wir uns verschiedene Sachen wie Steering Behaviour für die KI und A* für die Wegfindung angeschaut bzw. getestet. Dabei kam die Idee auf, dass doch ein Potenzialfeldansatz viel geschickte wäre und KI sowie Wegfindung direkt in sich vereinen würde.
Wem Potenzialfelder kein direkter Begriff sind: Ein Potenzial gibt an wie viel (potenzielle) Energie ein Objekt an einem bestimmten Ort/Position hat. Objekte haben im Allgemeinen die Neigung ihre Energie zu minimieren. Sprich Sie versuchen Orte mit möglichst niedriger (potenziellen) Energie zu erreichen. Ein Potenzial kann z.b. so aussehen: http://mechatronik.tu-ilmenau.de/MTRWeb/images/eband4.png . Das Auto versucht immer sich entlang der niedrigen Energien zu bewegen. Man kann auch direkt aus einem Potenzial die auf ein Objekt wirkende Kraft ableiten ( dE / dx = F ; wahrscheinlich kennen es viele andersrum als Integral geschrieben E = integral F * dx ).
Warum also Potenziale?
-Potenziale sind additiv (wenn man zwei kleine Hindernisse hat, so haben beide ein abstoßendes Potenzial. Will man beiden Hindernissen ausweichen, so muss man nur die abstoßenden Potenziale addieren; will außerdem noch zu einem Ziel so addiert man einfach ein "Wegkosten-Potenzial" und schon hat man ein Gesamtpotenzial, was alle Informationen enthält)
-man erhält aus einem Potenzial direkt die "resultierende Kraft" über dE/dx = F
-Potenziale lassen sich einfach kombinieren und entwerfen

Meine Frage ist nun:
Hat schonmal jemand Erfahrungen mit diesem Ansatz gewählt? Würdet ihr eher analytische
Potenziale oder direkt ausgewertete Potenziale empfehlen? Welche Datentyp würde ihr für die einzelnen Raumpunkte wählen (immerhin muss man ja die verschiedene Potenziale addieren und ggf auch "unendlich hoch" in Kombination mit sehr flachen, ausgedehnten Potenziale ermöglichen; sprich hat einen sehr großen Wertebereich der abgedeckt sein will)?
Oder kennt ihr einen geschickteren Ansatz für ein RTS Spiel?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

28.01.2011, 18:29

Ich kenne die Technik nicht, aber inwiefern würde das bei einem RTS gross etwas für die Logik des Spieles helfen? Für die Fortbewegung ist es sicher eine Möglichkeit, aber wie denkst du triffst du so Entscheidungen ala "angreifen oder nicht"? Klar könnte man das auch so mit einem Feld modellieren, aber irgendwie bezweifle ich, dass das sehr geschickt ist.

Nox

Supermoderator

  • »Nox« ist der Autor dieses Themas

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

3

28.01.2011, 20:55

Naja. Den Ansatz könnte man beliebig komplex gestalten, aber eine Option wäre z.B. folgender Ansatz:
Schwächere(stärkere) Feindeinheiten haben ein anziehendes(abstoßendes) Potenzial. Reichweite des Potenzials hängt von der Waffenreichweite und Geschwindigkeitsdifferenz zusammen. Befreundete Einheiten könnten z.B. in einem "hilfe" radius ein konstantest pot generieren, was nicht den Agenten ansich beeinflusst (außer dass er versucht sich in dem Hilferadius aufzuhalten), aber das feindliche Potenzial deutlich abschwächt. Eine Befreundete Einheit, die angegriffen wird, könnte ein attraktives Potenzial haben.

Wie genau man die Potenzial designt ist natürlich "feintuning".
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

28.01.2011, 21:04

Ich kenne mich jetzt zu wenig mit KI im allgemeinen aus, aber irgendwie habe ich das Gefühl, dass dieser Ansatz für ein komplexeres RTS dann doch zu künstlich wird (für das allgemeine Verhalten), wenn die dann wirklich komplexere Sachen als nur Bewegung machen soll.

Ich kann mich natürlich irren. Sind nur so mal Gedanken. Ich weiss ja nicht an was da bei GUF alles gedacht werden muss. :)

Aber was spricht denn gegen den klassischen Ansatz? Ich meine es ist ja doch ein gewisses Risiko, wenn diese Modellierung nicht so üblich ist. Warum also nicht so machen, wie andere RTS auch?

DerMark

Treue Seele

Beiträge: 324

Wohnort: Emsdetten

Beruf: Softwareentwickler

  • Private Nachricht senden

5

28.01.2011, 21:30

Der Ansatz klingt interessant, baue doch einen kleinen Prototypen zeige das hier und warte ab wie die Reaktionen darauf sind. Eventuell sogar mit einem Vergleich zu traditionelleren Methoden.

Alles wird man durch diese Potenzfelder sicher nicht lösen können, aber doch schon ziemlich viel. Gebäudebaupositionen, Bewertung von Gefahrfeldern, Abwehrpositionen etc, all das gibt es soweit ich weiß auch schon bei ziemlich vielen Spielen. Meist allerdings bei der Auswertung von Karten für Taktikshooter, etc (Analyse wo wie oft jemand erschossen wird, etc.)

Versuche es mal,

Mark

Nox

Supermoderator

  • »Nox« ist der Autor dieses Themas

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

28.01.2011, 21:31

Naja. Gegen steering behaviour (in der Kräfte-Variante) spricht, dass man mit Kräften arbeitet. Diese "wissen" aber nichts über Hindernisse. Es ist also schnell passiert dass man sich in einer "Barrierenmulde" befindet. Man muss also gesondert die Kräfte auf ihre "Machbarkeit" prüfen und anhand der Kosten neu bewerten. Will man dass sich Einheiten in einer Formations bewegen, muss man die formationen erst "fest definieren". Bei dem Potenzialansatz würde man einfach ein schwaches "Fallenpotenzial" anwenden.

Der Ansatz scheint doch mittlerweile bedacht zu werden:
http://aigamedev.com/open/tutorials/potential-fields/
http://www.bth.se/tek/jhg.nsf/bilagor/ai…ile/aiide09.pdf
https://wiki.inf.ufrgs.br/Motion-planning

Wobei das Problem der Wegfindung, welches beim Tutorial angesprochen wird, nicht existiert, wenn man das Wegpotenzial "a*" ähnlich berechnet und nicht einfach die ausgedehnten Hindernisse nur mit einem abstoßenden Potenzial berücksichtigt.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Mastermind

unregistriert

7

28.01.2011, 23:20

ich werf mal ein Paper in den Raum das ein ehemaliger Kommilitone von mir geschrieben hat. Ich habe es jetzt zwar nur überflogen, aber ich glaube es gibt einen ganz guten Überblick wie das "hier" gemacht wird:

ftp://ftp.neuroinformatik.rub.de/pub/man…10_PREPRINT.pdf

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

8

29.01.2011, 12:16

Also ich finde den Ansatz mit den Potenzialen durchaus interessant. Ich weiß allerdings nicht, wie er sich ind er Realität machen würde. Aber so ließen sich eben auch bestimmte Gebäude für den Feind "attraktiver" machen und er greift zuerst die Wirtschaftsgebäude an, als stur auf das Hauptgebäude zu stürmen. Und gerade, wenn mehrere KIs zusammen spielen wären diese so in der Lage zu erkennen, wo der Mitspieler gerade angreift und somit evtl. Unterstützung bedarf oder sie können, wenn sie sehen, dass der Mitstreiter gute Chancen hat, an einem anderen Ort einen Angriff starten.
Für zu künstlich halte ich diese KI nicht unbedingt. Es gibt gerade im RTS-Bereich nicht sonderlich viele gute KIs. Meist läuft es darauf hinaus, dass auf einer Map bestimmte Punkte eben hoch priorisiert sind und diese werden dann stupide angegriffen und wenn man selbst dort dann ein paar Einheiten platziert, rennt der Computer einfach rein. Oder es werden verschiedene Wegpunkte zur Verfügung gestellt, die die KI nutzen kann, um somit Angriffe von verschiedenen Seiten zu ermöglichen.
Ein weiterer Vorteil der Potenziale wäre, dass die KI unabhängig von der Map agieren würde(weiß nicht, wie das bei eurem Weltraumspiel ist und ob es dort überhaupt verschiedene Maps gibt, aber das gilt eher allgemein). Ich habe schon viele Spiele erlebt, wo man eben, wenn man selbst eine Map erstellt, der KI bestimmte Punkte zuweisen muss oder so, damit die KI auf einer solchen Map überhaupt in der Lage ist vernünftig zu spielen. Durch die Potenziale sucht sich die KI diese Punkte selbst. Und wenn ein strategisch wichtiger Punkt sehr gut verteidigt wird, dann gleicht sich das Potenzial aus und die KI stürmt nicht mit alle Gewalt auf einen Punkt, sondern greift stattdessen anderorten an und zwingt den Gegner somit, sich überall zu verteidigen.
Also ich würde dir wirklich mal empfehlen, einen Prototypen zu schreiben, in dem so eine KI werkelt(Einfach in 2D, mit Pixel als Armeen, dann sieht man ja, wo die KI ihre Einheiten hinverschiebt etc. und was man vllt. besser machen könnte). Mich würde es auf jeden Fall interessieren, wie der Ansatz funktioniert.

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

9

29.01.2011, 13:09

Damit würde die KI zum Beispiel auch, wie bei "Die verlorene Welt" sich strategisch günstig an Engpässen positionieren können, um effektiver Verteidigen. Ich denke mit so einem Ansatz hat man eine Menge potential. Skriptereignisse und ähnliches funktionieren ja trotzdem noch.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

10

29.01.2011, 19:50

Hört sich wirklich interessant an. Ich selbst würde das Problem jedoch eher klassisch angehen. Ich würde die KI auf mehrere Schichten verteilen und so ein Zielgetriebenes Design wählen. Quasi einfach die Hauptschicht die entscheidet Gegner angreifen. Dann sagt sie der Schicht darunter was dafür passieren muss. Diese Schicht gibt an die darunter liegende Schicht die benötigten Befehle weiter, bis es irgendwann bei den Ausführenden Einheiten ankommt und umgesetzt wird. Das eine Bewertung der Map für strategisch kluge Punkte nützlich sein kann(je nachdem wie die Karten aussehen) ist klar. Aber dafür würde ich die Karte am Anfang parsen und gucken wo geeignete Punkte sind. Hierzu gibts auch viele interessante Sachen im Buch "ai gameprogramming wisdom". Der oben beschriebene Ansatz wird zum Beispiel bei Seacraft benutzt. http://www.microsoft.com/germany/msdn/co…t_seacraft.mspx Unter dem Link findest du dazu informationen. Es gibt mehrere Videos zu Einzelheiten vom Spiel. Unter anderem auch zur KI. Vielleicht findest du dort ja nette Ansätze. Wenn ihr das Potentialfeld benutzt, würden mich danach eure Erfahrungen damit interessieren. Also wenns ne kleine Testanwendung gibt wärs cool wenn ihr was posten könntet;)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige