Stimulus Response Agents

Ein Ansatz intelligentes Verhalten nachzubilden ist komplexes Verhalten durch Kombination von einfachen Verhaltensformen zu erreichen. Sehr einfaches Verhalten kann zum Beispiel mit Stimulus Response Agents implementiert werden.

Das charakteristische an Stimulus Response Agents ist, dass sie über keinen internen Zustand verfügen und lediglich reaktives Verhalten zeigen. Dazu werden sensorische Eingangsdaten auf auszuführende Actions gemappt. Um hierbei einen etwas höheren Abstraktionsgrad zu erreichen können die Sensordaten zuvor in einem Zwischenschritt zusammengefasst zu bestimmten typischen Situationen bzw. sogenannten „features“ zusammengefasst werden.

Beispiel

Bei einem vereinfachten Beispiel aus einem First-Person-Shooter könnte das dann folgendermaßen aussehen:

Sensoren
Sensor 1 (s1): true wenn ein Spieler im Sichtfeld ist, false sonst
Sensor 2 (s2): true wenn der Spieler zum gegnerischen Team gehört, false sonst

Mapping auf ein Feature:
s1 AND s2 => GegnerInSicht
Wenn s1 und s2 true sind ist ein Gegner im Sichtfeld

s1 AND NOT(s2) => FreundInSicht
Wenn s1 true und s2 false sind, ist ein Teammitglied im Sichtfeld

Mapping auf eine Action:
GegnerInSicht => Attack
Wenn ein Gegner in Sicht ist, wird attackiert. Diese Reaktion könnte aus mehreren Teilaktionen bestehen

Ziele und Zielhierachien

Da Stimulus Response Agents sehr einfaches Verhalten realisieren ist es bei der Nutzung dieses Ansatzes sinnvoll Zielhierachien zu bilden. Hier können zwei Ansätze kombiniert werden. Ein Ansatz ist das modellieren von Oberzielen für dessen Erreichen mehrere Unterziele erreicht werden müssen, die wiederrum Unterziele enthalten können, die irgendwann schlussendlich eine Aktion auslösen. Dadurch entsteht eine hierachisch geordnetes Zielsystem. Der zweite Ansatz bezieht sich auf die Entscheidung bei mehreren Aktionen auf gleicher Hierachiestufe. Dieses Problem lässt sich durch eine nach Priorität oder zeitlich geordnete sequentielle Abfolge der Aktionen lösen.

Möglichkeit der Implementierung

Die folgende Beispielimplementierung bezieht sich auf das obige First-Person-Shooter-Szenario.

...
// Auswerten der Sensoren und Bestimmen der Action
if (s1 AND s2) then attack()
elseif (s1 AND !s2) then follow()
elseif ...

attack() {
chooseweapon()
shoot()
}

Quelle: http://www.sci.brooklyn.cuny.edu/~parsons/courses/32-spring-2009/notes/lect03-4up.pdf