Inhaltsverzeichnis 1. Kooperation

Transcrição

Inhaltsverzeichnis 1. Kooperation
Kooperation mehrerer Computergegner
Inhaltsverzeichnis
Alexander Altmayer
Inhaltsverzeichnis
1. Kooperation - wozu?
2
2. Einleitung
3
3. Gruppenstrukturen
3
4. Nachrichten
4
5. Aufgabenbestimmung
6
5.1 Contract Net Protocol
7
6. Aufgabenausführung
11
7. Kooperation mehrerer Gegnergruppen
12
8. Zusammenfassung und Ausblick
13
9. Quellenangaben
14
1
Kooperation mehrerer Computergegner
1.
Kooperation - wozu?
Alexander Altmayer
Kooperation - wozu?
Der Grund, Teamfähigkeit in Computerspielen einzusetzen und zu verbessern, ist wohl derselbe wie der,
die Gegner-KI im Allgemeinen zu verbessern:
- die Gegner sollten schwieriger werden, ohne "unfaire" Mittel einzusetzen, wie z.B. immer zu treffen
- das bedeutet oft, Modelle und Vorgehensweisen herzunehmen, wie sie in der Natur bzw. beim Menschen vorzufinden sind; dadurch wirkt Verhalten "natürlicher"
Manchmal ist es nicht nötig, explizit eine Team-KI zu programmieren. Dadurch, dass die Individuen selbst
das Beste für sich wollen, helfen sie auch meistens der gesamten Gruppe.
Wenn jedoch Mechanismen eingebaut werden, die eine richtige Zusammenarbeit ermöglichen, dann kann
der Erfolg drastisch erhöht werden. Manche Ziele lassen sich auch nicht alleine lösen. Ein Stein, der zu
schwer ist, ihn alleine zu tragen, kann zu zweit vielleicht schon wieder weggetragen werden. Eine neue
Position einzunehmen, wenn ein Spieler der eigenen Gruppe in der Schusslinie steht, ist dabei nur eine
Kleinigkeit.
Man könnte aber auch die Vorgehensweise der Agenten derart anpassen, dass sie ihre Schritte im Voraus
sozusagen absprechen. Mögliche Szenarien wären Bots, die ihren Gegner ins Kreuzfeuer nehmen, d.h.
zusammen die richtigen Positionen einnehmen. Oder bei Weltraumsimulationen (Wing Commander[1]):
zwei Schiffe teilen sich die Aufgabe, den Spieler zu eliminieren - ein Schiff fliegt vor dem Spieler her und
weicht immer aus, das andere schiesst ihn von hinten ab. Bei Fussballspielen würden dann z.B. die Spieler
vorher abgesprochene Spielzüge durchführen.
Ausserdem ist es sicher für jeden Spieler nervig, wenn die computergesteuerten Mitspieler in seinem Team
völlig dumme Aktionen durchführen, anstatt sich weitgehend intelligent und autonom zu verhalten, dabei
aber immer kontrollierbar bleiben. Nicht nur Gegner, auch eigene Gruppe muss intelligent sein!
Berechenbare Gegner und Gruppen lassen ein Spiel schnell zu einfach und somit langweilig werden.
Für die Kooperation mehrerer Computergegner sind also folgende Aspekte am interessantesten:
- Informationsaustausch / Nachrichtenaustausch
- Aufgabenbestimmung / Aufgabenausführung
- Gruppenhierarchie
2
Kooperation mehrerer Computergegner
Einleitung
Alexander Altmayer
2. Einleitung
Kooperation ist die Zusammenarbeit mehrerer Individuen oder Gruppen unter einem gemeinsamen Ziel.
Wie sieht es damit in Spielen aus?
Wenn Kooperation in Spielen vorhanden ist, so wird diese meist nach der eigentlichen KI eines Agenten
hinzuprogrammiert und so sollte es auch sein. Die Kooperation wird an die schon existierenden Verhaltensweisen angehängt, denn im Normalfall ist der eigene Erfolg oder eigenes Wohlergehen wichtiger als das der
Gruppe. Das zeigt sich vor allem daran, dass ein sehr wichtiges Ziel eines Agenten wohl sein sollte, zu
überleben. Dies kann durch Persönlichkeit wieder angepasst werden, sodass es Agenten gibt, die für die
Erledigung der Aufgabe die eigenen Bedürfnisse nach hinten zu stellen.
Hat ein Agent dennoch keine wichtige Aufgabe zu erledigen, dann könnte er bei den anderen nachfragen,
ob sie eine Aufgabe für ihn haben, die dann eben wichtiger sein sollte als das aktuelle Ziel. Umgekehrt
könnten auch Agenten, die gerade eine Aufgabe erledigen wollen, andere Agenten um Hilfe zur Erledigung
der Aufgabe bitten. Agenten, die man nach Aufgaben fragt, könnten auch immer gerade für diese Aufgabe
da sein; d.h. sie sind immer die Lenker und Denker, die bestimmen, was getan werden soll.
Hierbei ist interessant, wie man die Prioritäten für die Aufgaben vergibt. Der Prioritätswert kann meist nicht
konstant sein (ein einfacher Integerwert), denn die Bewertung einer Aktion bzw. eines Ziels hängst von
vielen Parametern ab. Es drängt sich schnell die Frage einer Bewertungsfunktion auf (mit gewichteten
Prioritäten). Problematisch dabei ist dabei die "subjektive" Abarbeitung der Funktion. Sie lässt die Zustände der anderen Gruppenmitglieder ausser acht, setzt man voraus, dass ein Agent nicht alles über die anderen weiss.
Wie schon angesprochen muss man, um Kooperation zu realisieren, festlegen, wer die nächste Aufgabe
nun letztendlich bestimmt. Es gibt verschiedene soziale Strukturen, die man dafür einsetzen kann.
3. Gr uppenstrukturen
1.) hierarchisch
In einem hierarchischen System existiert eine Ordnung bezüglich der Befehlsgewalt. Individuen, die höher
in der Ordnung stehen, bestimmen, was Individuen tun sollen, die in der Ordnung unter ihnen stehen. Die
Struktur kann beliebig viele Ebenen beinhalten. D.h. Untergebene können ihrerseits wieder Anweisungen
an andere geben, die in der Hierarchie unter ihnen stehen. Es kann aber auch für ein Spiel genügen, wenn
ein Individuum an der Spitze ist und alle anderen auf einer einzigen Ebene darunter.
2.) autonom / dynamisch
Hier gibt es keine Ordnung bezüglich der Befehlsgewalt. Jeder hätte prinzipiell das gleiche Recht, Aufgaben
zu verteilen. Allerdings geht das schief, wenn nicht irgendwann bestimmt wird, wer die Aufgaben festlegt.
Bei zwei Agenten, die zufällig ihre Aufgaben festlegen, wäre die Wahrscheinlichkeit sehr hoch, dass sie nicht
dieselbe Aufgabe wählen. So käme selten Kooperation zustande, wenn die Ziele nicht dieselben sind. Vor
allem wäre auch nicht abgesprochen, wie die Aufgabe zu lösen ist (auh im Hinblick auf Spezialisierung und
Aufgabenteilung). Ist einmal ein übergeordneter Agent bestimmt, so kann Kooperation stattfinden, da nun
alles abgesprochen ist .
In beiden Fällen müssen die Individuen miteinander kommunizieren: Die Höhergestellten propagieren z.B.
die anstehenden Aufgaben oder Agenten signalisieren, dass sie eine neue Aufgabe erwarten.
3
Kooperation mehrerer Computergegner
Nachrichten
Alexander Altmayer
4. Nachrichten
Wie wir gesehen haben, benötigt Kommunikation eine Form von Nachrichten oder Anfragen.
Anfragen geschehen üblicherweise durch den Austausch von Nachrichten. Nachrichten können aber auch
nur reinen Datenaustausch beinhalten ohne auf das Aufgabenmanagment abzuzielen. Als Beispiel: in vielen
Spielen hat der Computergegner den totalen Überblick. Er weiss, wo der Spieler bzw. seine Einheiten
stehen. Das ist unfair und nicht besonders realistisch. Besser wäre es, wenn Agenten/Bots den anderen
Agenten weitergeben, dass ein Gegner gesichtet wurde. Die Agenten können aufgrund dieses neu erhaltenen Wissens entsprechend reagieren.
Im Wesentlichen besteht eine Nachricht mindestens aus folgenden Merkmalen, um sinnvoll zu sein:
- Name: dieser bestimmt eindeutig die Nachricht, hier wird auch der Typ der Nachricht codiert, z.B.
Data_Request Data_Enemy_Seen oder Task_Announcement
- Sender
- Empfänger
- evtl. Zeit, wann die Nachricht gesendet wurde
- sonstige Menge an Daten/Objekten, abhängig von der Nachricht z..B. Deadline
Es gibt verschiedene Arten, wie Agenten den Nachrichtenaustausch realisieren könnten [3]:
1.) Prozeduraufruf (synchron):
Eine sehr einfache Möglichkeit. Agenten rufen sich gegenseitig auf (mit Prozeduraufruf im Programm vergleichbar). Der Kontrollfluss ist leicht nachzuverfolgen, allerdings muss ein Agent auf die Rückantwort eines
anderen warten, was dazu führt, dass er währenddessen nichts tun kann. Bei schnellen Antwortzeiten (v.a.
wenn die Agenten auf demselben Server sind) kann diese Methode dennoch angewandt werden.
2.) Callback Methode (asynchron):
Auch hier sendet ein Agent eine Nachricht an eine andere ab. Anstatt auf eine Rückantwort zu warten,
nachdem die Nachricht verschickt wurde, kann er mit ihrer Arbeit fortfahren. Erst, wenn die Rückantwort
eintrifft, muss den Agenten unterbrechen, was er gerade getan hat und die Nachricht behandeln. Der
Programmablauf kann schlecht verfolgt werden, aber die Agenten können mit ihrer Arbeit fortfahren, nachdem sie Nachrichten abgeschickt haben.
3.) Mailbox:
Diese Methode kann man in ihrem Ablauf und ihrer Vorgehensweise zwischen den beiden vorherigen
einordnen. Agent A sendet eine Nachricht an Agent B. B behandelt die Nachricht und legt das Ergebnis in
eine Mailbox der Agent A ab.
Der Empfänger (B) wird zwar unterbrochen, aber in der Realität ist es oft genauso - man hört die Kanäle
ab, erhält alle Nachrichten, kann aber nach deren erhalten sofort wieder zu seiner vorherigen Tätigkeit
zurückkehren; die Nachricht wurde ignoriert, weil sie im Moment unwichtig ist. Dies kann man z.B. anwenden wenn der Agent gerade mit einem Gegner in einen Kampf verwickelt ist und somit bestimmte Nachrichten für ihn derzeit nicht wichtig sind. Sowohl Callback als auch Mailbox würde man eher bei verteilten
Systemen bzw. Agenten verwenden. Je nach Situation könnte man sich überlegen, ein erweitertes MailboxSystem (Bild 1) aufzubauen, in dem Nachrichten wie auch Antworten zunächst in eine Mailbox aufgenommen werden und dann periodisch bearbeitet werden. Dann kann man auch sehr genau steuern, wann
Nachrichten verarbeitet werden.
Um eine einfache Verhaltensweise eines Agenten zu implementieren, legt man für jeden eine Zustandsmaschine zugrunde. Diese beinhaltet im Grunde alle spielrelevanten Daten für den Agenten. Für die KI
4
Kooperation mehrerer Computergegner
Nachrichten
Alexander Altmayer
Mailbox
Mailbox
Bild 1 : erweitertes
Mailbox-System
Agent B
Agent A
selbst ist das aktuelle Ziel von grösster Bedeutung, denn abhängig vom Ziel reagiert der Agent auf eingehende Informationen unterschiedlich. Fügt man nun noch ein Nachrichtensystem hinzu, lässt sich schon
ein erster Ansatz von Kooperation realisieren. Der Ablauf würde dann ungefähr so aussehen (siehe auch
Bild 2):
1. Eingabe (visuell, Audio...) + ankommende Nachrichten
2. Auswahl des eigenen Ziels
3. Senden eigener Nachrichten und Befehle
Wissen über die Welt
(auch über sich selbst)
1. Update
1. Update
2. Auswahl
der Aktion
audiovisueller Input
Nachrichten
vorgegebene
Verhaltensweisen
3. eigene
Nachrichten
Output
Bild 2 : grober Ablauf
eines ersten
KI-Ansatzes
oder als Pseudocode (zur Verdeutlichung der Bedeutung des Zustands):
case state of
idle: begin
messages:=get_messages();
if enemy_visible() then
begin
state:=attack; //Zustandswechsel
goto end_st; // Abbruch, da neuer Zustand gefunden
end;
if in_messages(enemy_spotted,messages)
begin
state:=run_to_position; goto end_st;
end;
end_st: (...)
end; break;
run_to_postion: (...)
attack: (...)
retreat: (...)
Bemerkungen: die Reihenfolge der if-Statements bestimmt die Priorität der Ereignisse. Im obigen Beispiel
wäre das Sichten eines Gegners (enemy_visible) immer das wichtigste Ereignis im Zustand idle. Mögliche
Lösung: Bewertungsfunktion. Ausserdem muss meist nicht nur die Zielzustands-Variable gesetzt werden,
sondern auch bestimmte andere Variablen. Beispielsweise müsste man beim Wechsel zu run_to_postion
die (neue) Zielposition auch noch setzen.
5
Kooperation mehrerer Computergegner
Aufgabenbestimmung
Alexander Altmayer
5. Aufgabenbestimmung
Systeme, wie sie vorher beschrieben wurden, können aber zu reaktiv sein. Beispiel: ein Bot, der sofort zum
Gegner bewegt, wenn ein Verbündeter ihn darüber informiert, dass er einen Gegner gesichtet hat ("Enemy
spotted"). Zudem sind sie nicht sehr flexibel, da sie meist fest im Quellcode verankert sind. Änderungen der
Aktionsausführung (meistens durch ein if-then-else - Statement realisiert) führen oft zu einer aufwendigen
Umstrukturierung des Quellcodes. Durch Verwendung eines regelbasierten Systems ist es nicht nur möglich, die tatsächliche Ausführung des Ziels online zu berechnen, sondern auch in abgeänderter Form zur
Absprache, welche Aufgaben erledigt werden sollen. Ein Problem ist die benötigte Rechenzeit von Systemen oder welchen die sozusagen die einzelne Abfolge der Aktionen berechnen (ein „Planer“). In einem 3DShooter wäre ein komplizierter Planer eher Fehl am Platze (Rechenzeit), bei rundenbasierten Strategiespielen dürfte dieser Weg wieder interessant werden.
Beispiele, wo einfache Regeln angewandt werden könnten:
Bots: ich brauche gerade jemanden, der am besten nichts zu tun hat und spezielle Fähigkeiten besitzt.
Oder: ich bin schwer verwundet, ich brauche einen Arzt, der wiederum von ein paar Leuten beschützt
werden soll.
Oder Fussballspiel: ich ziehe all die Mitspieler als Anspielmöglichkeit in Betracht, die nicht zu weit von mir
entfernt sind.
Regelbasierte Systeme müssen übrigens nicht unbedingt besonders komplex sein, was Rechenzeit spart
und die Implementierung vereinfacht. Bei der Überprüfung eines Agenten, ob er für die Aufgabe ausgewählt
wird, genügt es, die Bedingungen und ihre Werte mit den Attributen des zu überprüfenden Agenten zu
vergleichen. Stimmen diese nicht überein, so wird der Agent nicht in die Auswahlliste aufgenommen.
Um es an einem exakteren Beispiel festzumachen: Ein Bot möchte in einen Raum eine Granate werfen (weil
sich dort ein Gegner aufhält), er hat aber keine Granate. Deshalb kann er bei den anderen nachfragen, ob
sie das nicht für ihn erledigen. Wie eine entsprechende Nachricht aussähe wird im folgenden Kapitel ersichtlich.
Nicht ganz einfach ist es auch, festzulegen, wer die Aufgaben verteilen darf. Hat z.B. einer von Anfang an
immer das Kommando, so muss man, wenn dieser aus dem Spiel ausscheidet, wieder einen neuen Kommandeur bestimmen.
Das Contract Net Protocol, das im Folgenden vorgestellt wird, bietet eine einfache Möglichkeit Anfragen
und Probleme dieser Art zu lösen.
6
Kooperation mehrerer Computergegner
Contract Net Protocol
Alexander Altmayer
5.1 Contract Net Protocol
Das Contract Net Protocol [4] ist ein Distributed Net Solver. Verteilt bedeutet, dass sowohl Daten als auch
Kontrolle völlig getrennt voneinander liegen und verarbeitet werden; es gibt weder globale Daten noch
globale Kontrolle, die Individuen sind autonom. Die Individuen sind schwach miteinander verbunden; sie
verwenden die meiste Rechenzeit mehr zur Ausführung und Berechnung als zum Nachrichtenaustausch.
Das Contract Net Protocol bietet effizienten Nachrichtrenaustausch und Aufgabenteilung. Das Protokoll
und eine einheitliche Sprache, die jedes Individuum besitzt, legt die Bedeutung und die Verarbeitungsweise
einer Nachricht fest.
Beispiele, wo das Contract Net oder eine Art davon angewandt wird ist ein ehemaliges Uni-Praktikum,
Pengi2 oder ein Distributed Sensor Network zur Verkehrsüberwachung.
Ablauf des Contract im Wesentlichen:
- es existieren Manager (vergibt Aufträge) und Unterschreibende (erfüllen Aufträge)
- Aufträge ausschreiben (als Manager als Nachricht verbreiten)
- Ausgeschriebene Verträge evaluieren (aus der Sicht eines Unterschreibenden)
- für den interessantesten Vertrag dem Manager ein Angebot machen
- Manager wählen die besten Angebote/Agenten aus, setzen den Vertrag fest
Hierarchien entstehen dadurch, dass Unterschreibende Unterverträge mit anderen Agenten aushandeln
- Auswahl eines bereitstehenden Vertrages/Auftrages
Beispiel einer Task Announcement (Ausschreibung eines Auftrags)
To: * (broadcast message)
From: 25
Type: Task Announcement
Contract: 22-3-1
Task Abstraction: Object Position X27 Y33
Eligibility: Must-Have Sensor, Must-Be Scout
Bid Specification: Position, Object Type
Expiration Time: Jan 28 2001 20:00
1.) Manager und Unterschreibender
In einem Vertrag übernehmen die Agenten entweder die Rolle eines Managers, also des Aufraggebenden
oder des Unterschreibenden. Der Manager kümmert sich hauptsächlich um die Vertragsaushandlung und
überwacht dessen Ausführung. Der Unterschreibende führt einen Auftrag aus. Die Verteilung der Rollen
kann sich dynamisch verändern. Ein Agent kann auch gleichzeitig Manager und Ausführender in verschiedenen Verträgen sein.
2.) Task announcements
Ein Agent schreibt Verträge aus, indem es eine entsprechende Nachricht an alle oder nur bestimmte andere
Agenten sendet. Er ist dann der Manager des Vertrags.
Zunächst besitzt ein Angebot alle elementaren Felder einer Nachricht d.h. Absender und Empfänger.
7
Kooperation mehrerer Computergegner
Contract Net Protocol
Alexander Altmayer
Eine Auftragsausschreibung hat zudem vier Hauptfelder:
- Aufgabenbeschreibung: eine kurze abstrakte Beschreibung der Aufgabe, die ausgeführt werden soll
- Qualifizierungsangabe: Kriterien, die ein Agent erfüllen muss, um an der Aufgabe teilnehmen zu können,
also um ein Angebot zur Teilnahme anzukündigen. Man kann dies als Erweiterung des Empfängerfeldes
sehen: die Anzahl der möglichen Agenten, die auf die Ausschreibung antworten, wird dadurch weiter
eingeschränkt.
- Angebotsspezifikation: gibt an, welche Informationen ein Agent übermitteln muss, wenn er ein Angebot
als Antwort auf eine Ausschreibung sendet. Sie hilft bei der Auswahl der besten Angebote bzw. Agenten.
- Ablaufdatum: die Deadline für ankommende Angebote.
3.) Ausschreibungen verarbeiten und Angebote senden
Kommen bei einem Agenten Ausschreibungen an, so wird überprüft, ob die Eigenschaften den Anforderungen der Aufgabe entsprechen (Qualifizierungsangabe). Dann wird die Ausschreibung in die Liste der
schon vorhandenen einsortiert. Ein Agent, der gerade nichts zu tun hat, kann neu ankommenden Ausschreibungen direkt ein Angebot folgen lassen oder warten, ob noch weitere ankommen. Für die interessanteste
Aufgabe wird dem Manager dann ein Angebot für den Auftrag gemacht. Evtl. gibt der Anbieter dann noch
an, welche weiteren Informationen er für die Ausführung der Aufgabe noch brauchen könnte (z.B. die
Methode zur Aufgabenausführung).
4.) Verarbeitung der Angebote
Ankommende Angebote werden vom Manager ebenfalls in einer sortierten Liste gespeichert. Manager
können ebenfalls eine gewisse Zeit warten, bis mehrere Angebote angekommen sind und dann die besten
auswählen oder Verträge gleich festsetzen. Sind keine Angebote nach einer gewissen Zeit vorhanden, dann
könnte der Manager versuchen, eine andere Ausschreibung zu machen.
5.) Ausführung des Tasks
Sobald ein Agent nichts zu tun hat, wird die erste Vertrag/Aufgabe ausgewählt, die in der Liste der zugeteilten Verträge steht (Bereit-Liste, siehe Bild 3). Wurde die Vertrag ausgeführt, so wird sie in den BeendetStatus überführt, wartet ein Agent auf bestimmte Ereignisse oder Informationen, dann wird die Aufgabe in
die Wartend-Liste transferiert. Wenn die Ereignisse eintreten, dann wird sie wieder in die Bereit-Liste
aufgenommen.
Während der Ausführung einer Aufgabe werden Berichte an den Manager geschickt oder nach Aufgabenbeendigung Endberichte. Mit Hilfe dieser kann ein Manager unter anderem entscheiden, ob eine Aufgabe
weitergeführt werden soll.
8
Kooperation mehrerer Computergegner
Alexander Altmayer
Contract Net Protocol
In
Receive Award
Receive report
Ready
Wait for Task
Processor
Obtain Task Processor
Executing
Generate
subcontract
Wait for report
Complete
Contract
Terminated
Announced
Suspended
Make award
Bild 3: Ein Contract
Processor
Out
und sonst...
Verträge sind nicht verdrängbar (im Contract-Prozessor). Dies könnte man ändern, damit wichtige
Aufgaben ohne Verzögerung ausgeführt werden.
Hat ein Agent nichts zu tun, wäre es möglich, Bereit-Nachrichten an andere Agenten zu schicken. Diese
suchen dann angemessene Aufgaben aus den schon vorhandenen Ausschreibungen heraus und teilen sie
den Anbietern direkt zu.
Managern kann es sehr leicht passieren, dass sie für eine lange Zeit keine Angebote für ihre Ausschreibungen bekommen. Gründe dafür sind:
- alle Agenten sind beschäftigt
- die Aufgabe wird zu schlecht bewertet
- der Agent darf die Aufgabe nicht ausführen (Qualifizierungsangaben)
Um dies zu vermeiden, schickt ein Agent dem Manager sofort eine Nachricht, in der steht, warum er kein
Angebot machen möchte (z.B. "BUSY"). Oder Der Manager kann die Anforderungen lockern.
Direkte Aufgabenzuteilungen reduzieren Rechenzeit (diese können aber auch wieder begründet abgewiesen werden)
Wendet man nun das Contract Net auf das vorher erwähnte Beispiel an, so würde eine Nachricht vielleicht
so aussehen:
Nachrichtentyp: Aufgabenanfrage
An: alle
Von : Agent X
Empfänger muss haben: Granate, Zugang zu Raum bzw. davor
Aufgabendaten: Raum bei Position x,y,z
9
Kooperation mehrerer Computergegner
Contract Net Protocol
Alexander Altmayer
Pengi 2 - Ein Contract Net Beispiel
Das Beispiel soll die Anwendung des Contract Net an einem konkreten Fall zeigen. Pengi 2[5] ist ein
einfaches Spiel und eine Modifikation von Pengo[5]. In einem Uni-Praktikum wurde es in LISP implementiert. Das zweidimensionale, quadratische Spielfeld besteht aus gleich grossen Feldern, auf denen sich
Pinguine und Bienen bewegen (Bild 4). Zudem befinden sich auf dem Spielfeld mehrere Blöcke, die verschoben werden können. Die Pinguine versuchen, bestimmte Blöcke zusammenzuschieben. Die Bienen
versuchen, die Pinguine zu töten. Dies können sie tun, indem sie Blöcke auf Pinguine zu schiessen (das
können auch die Pinguine mit Bienen tun). Oder die Bienen hindern die Pinguine an Bewegungsmöglichkeiten,
wodurch die Pinguine ebenfalls sterben. Das Hindern an der Bewegung eignet sich ideal für die Kooperation - die Bienen können so versuchen, Pinguine einzukreisen.
Im Grossen und Ganzen richtet sich das System nach dem Ablauf des Contract Net Protocol:
- Überleben (ankommende Eisblöcke)
- hat man gerade keine Aufgabe und sichtet einen Pinguin, so wird es als Aufgabe ausgeschrieben, diesen
Pinguin einzukreisen; die Biene, die den Pinguin gesichtet hat, ist somit Manager
- eingehende Aufgaben werden nach der Distanz von der eigenen Position zur Position des Pinguins der
eingehenden Aufgabe sortiert; nähere Pinguine sind interessanter, da schneller erreichbar
- eingehende Angebote werden nach der Distanz von der eigenen Position zur Position des Anbieters
sortiert; Bienen, die näher an mir dran sind, können mir schneller helfen
- liegen keine Aufgaben vor und wurde kein Pinguin gesichtet, so führt man einen Zug in eine Zufallsrichtung aus.
Bild 4:
Ein PengiSpielfeld
Probleme des Contract Net Protocols:
Das Contract Net ist eher für Spiele mit wenigen Agenten geeignet (Rechenzeit kann dennoch recht hoch
werden).
Verträge werden evtl. schnell wieder aufgelöst, weil viel Unvorhergesehenes passieren kann (in einem
Szenario, indem es wichtig ist, dass eine Aufgabe von drei Agenten ausgeführt wird, löst sich der ganze
Vertrag leicht auf, wenn einer der Agenten ausfällt).
10
Kooperation mehrerer Computergegner
Aufgabenausführung
Alexander Altmayer
6. Aufgabenausführung
Nachdem ein adäquates Ziel bzw. Aufgabe gewählt wurde, muss dieses Ziel auch noch ausgeführt
werden.
Die eigentliche Ausführung des Tasks ist so gesehen eine Black Box, die Agenten können nur auf der
Basis dessen, was sie wissen, ihre momentanen Aktionen ausführen.
So könnte es sein, dass ein Teil des Teams eine Aufgabe nicht erledigen kann, weil durch die Ausführung eines Plans durch ein anderen Gruppenteil die Aufgabe nicht mehr ausgeführt werden kann.
Eine Vorausplanung ist nur bedingt oder kaum sinnvoll. Die Umgebungen sind bei Spielen in der
Regel so dynamisch, dass Voraussetzungen für bestimmte Aktionen verlorengehen. Meist sind die
Spiele und ihre Welt auf wenige Ziele und Bedingungen eingeschränkt, wodurch die Durchführung
der Aufgaben zum grössten Teil bekannt ist. Die Ausführung von vordefinierten Methoden reicht oft
aus und führt zu guten Ergebnissen. Man könnte sich überlegen, die Aufgabenausführung, die Methode sozusagen auszutauschen, wenn das Resultat nicht besonders gut war.
Lösungsmöglichkeiten: der derzeitige Chef sagt z.B. bei einem Shooter, wer welchen Feind übernimmt, wo die anderen in Position gehen. Sind dann die Befehle zu ungenau, gehen die Agenten nach
eigenem Gutdünken vor. Wenn sich die Bots einer Gegnergruppe annähern, dann nehmen die Bots
automatisch die besten Positionen ein. Falls eine Position schon von einem anderen Gruppenmitglied
besetzt ist oder er in der Schusslinie steht, dann nimmt der Bot die nächstbeste Position ein (Bild 5).
Bild 5: Bot 1 steht
in der Schusslinie
von Bot 3 - Bot 3
muss sich einen
neuen Platz
suchen
Andere einfache Möglichkeiten koordinierter Aktion wäre bei einem Strategiespiel z.B., wenn ein
Bogenschütze von Nahkampfeinheiten beschützt werden oder dass sich Einheiten nach ihrer Aufgabe anordnen (bei Age of Empires II [9] gibt es auch Formationen - die Einheiten selbst kooperieren
jedoch nicht miteinander). Oder die Kavallerie startet einen schnellen Angriff, zieht sich zurück und
danach greifen die Schwertkämpfer ein. Man spricht bei solchen Vorgenhensweisen von Spezialisierung und Aufgabenteilung.
Allgemein ist die Implementierung von Kooperation in einer Spiele-KI bei autonomen Systemen
weitaus komplexer als bei einer relativ festen Kommandostruktur. Der Programmierer hat bei festen
Kommandostrukturen selbst mehr Kontrolle über den Aktionsablauf. Was getan wird und wer es
bestimmt, wird dadurch einfach klarer.
11
Kooperation mehrerer Computergegner
Kooperation zwischen mehreren Gruppen
Alexander Altmayer
7. Kooperation zwischen mehreren Gruppen
Kooperation kann man auch eine Ebene über einzelnen Agenten ansetzen. Gerade bei Strategiespielen steckt hinter den Computergegnern ja ein virtueller Spieler, der selbst nicht auf dem Spielfeld
präsent ist (eine bestimmte Zivilisation, ein Staat, eine Gruppierung etc.). Die Einheiten befehligt er
allein, die Steuerung geschieht auf globaler Ebene. Die Einheiten selbst könnten aber auch zu einem
gewissen Grade autonom und kooperierend agieren (bisher in wenigen Spielen gut verwirklicht).
Damit würde sich vor allem ein menschlicher Spieler nicht mehr um alles kümmern müssen. Hierbei
muss der Spieler immer noch immer in alle Aktionen eingreifen können, so dass gänzlich ungewollte
Verhalten verhindert werden. Bei (Echtzeit-)Strategie würde man das etwa so umsetzen, dass man
Einheiten bestimmte Verhaltensmuster vorgeben kann (z.B. schneller Angriff, dann zurückziehen,
wie in Dark Reign [7], Bild 6). Alle Einheiten, die dasselbe Verhaltensmuster haben, würden sich
dann gruppieren und gemeinsam agieren (z.B. bei dem vorhin genannten Verhaltensmuster Aussuchen eines gemeinsamen Angriffsziels).
Bei Rollenspielen in der Art von Baldur's Gate [8] wäre es sowieso sinnvoll, sich selbst um alle
Aktionen der Charaktere zu kümmern - man kann die Zeit ja anhalten. Bei manchen Botspielen kann
man jetzt schon einige Befehle an diese erteilen. So ruft man etwa um Hilfe oder schickt Bots zurück
zur Basis. Aber auch die Computergegner untereinander würden durch gewisse Kooperation viel
besser werden. Bei Strategiespielen wie Age of Empires 2 [9] oder Starcraft [10] gibt es zwar Bündnisse, aber sie beschränken sich eigentlich auf einen Nicht-Angriffspakt. Haben die Gegner jeweils
eine gewisse Menge an Einheiten rekrutiert, werden diese auf den Gegner losgehetzt. Wenn zwei
Gegner einen Spieler gleichzeitig angreifen, dann ist das Zufall. Stattdessen könnten die Computergegner ihre Angriffe koordinieren, d.h. zumindest der Zeitpunkt des Angriffs. Oder sie sprechen ab,
welche Einheiten gebaut werden. Wenn einem Spieler für einen Angriff Lufteinheiten fehlen, dann
fordert er sie bei seinem Partner an.
Skripte, vorberechnete Verhaltensweisen z.B. für bestimmte Karten sind nicht unbedingt schlecht.
Solange die Verhaltensweisen der Gegner intelligent aussehen, ist dies eine elegante Methode, um oft
recht gute Resultate zu erzielen.
Die KI in Civilization [11] ist ebenfalls skriptgesteuert und funktioniert recht gut. Zivilisationen
schliessen Bündnisse miteinander, wenn der Spieler zu stark wird und tauschen Technologien aus.
Bild 6:
Dark Reign 2
12
Kooperation mehrerer Computergegner
Alexander Altmayer
8. Zusammenfassung und Ausblick
Kooperation in Computerspielen existiert noch nicht lange. Dementsprechend simpel sind die Implementierungen oder es sind gar keine vorhanden. Das liegt sicherlich auch daran, dass die Entwickler
zunächst Wert auf die Grafik legen und andere Teile der KI, wie etwa Wegeplanung - diese machen
schon einen grossen Teil der Rechenzeit aus. Allerdings ist das kein grosses Argument, wenn man
bedenkt, dass Kooperation mit recht einfachen Mitteln, wie etwa dem Contract Net Protocol, zu realisieren sind. Der Rechenaufwand ist gering, da keine Suchalgorithmen verwendet werden, höchstens
eine Sortierfunktion. Ein wichtiger Teil von Kooperation ist, dass die Individuen das gleiche Ziel haben.
In den meisten Spielen ist dies dadurch verwirklicht, dass die Computergegner zufällig den gleichen
Gegner haben. Bedingte Zusammenschlüsse wie der von schwächeren Gruppierungen gegen die starke
findet man eher selten. Zusätzlich zum gleichen Ziel (gleicher Gegner) müssen noch die Aufgaben
festgelegt werden. Entweder alle versuchen, mit den gleichen Mitteln zum Ziel zu kommen oder die
Aufgaben werden aufgeteilt - bei spezialisierten Einheiten ist dies besonders zu empfehlen. Schliesslich
müssen Ziele und Aufgaben miteinander abgesprochen werden. Dazu wird ein Nachrichtensystem verwendet. Behält man diese Punkte bei der Programmierung seiner Spiele-KI im Hinterkopf, kann ziemlich einfach gute Resultate zustande kommen.
13
Kooperation mehrerer Computergegner
Quellenangaben
Alexander Altmayer
9. Quellenangaben
Kapitel 1 Kooperation - wozu?
[1] http://www.wingcommander.com
Kapitel 4 Nachrichten
[2] Agents talking to Agents, Todd Sundsted, http://www.javaworld.com/javaworld/jw-09-1998/jw-09howto.html
[3] Game Progamming Gems, edited by Mark A. DeLoura, Charles River Media
Kapitel 5 Aufgabenbestimmung und Kapitel 5.1 Contract Net Protocol
[4] The Contract Net Protocol, R. G. Smith, IEEE Transaction on Computers 29(12) S1104-1113, veröffentlicht 1980
[5] Pengo, Pengi 2, http://www.classicgaming.com/vault/roms/arcaderoms.Pengo8623.shtml
Kapitel 6 Aufgabenausführung
[6] „Terrain Reasoning for 3D Action Games“, William van der Sterren, .pdf von http://cgf-ai.com
Kapitel 7 Kooperation mehrerer Gruppen
[7] http://www.activision.com/games/dr2/index2.asp
[8] http://www.interplay.com/bgate2/
[9] http://www.ageofempires2.de/
[10] http://www.starcraft.org/
[11] http://www.civfanatics.com/
14