Multiagentensysteme: Modelle, Programmierung, Plattformen

PD Stefan Bosse
Universitรคt Bremen, FB Mathematik & Informatik
SS 2020
Version 2020-07-15

Kommunikation und Interaktion

Agent-Agent und Agent-Welt Kommunikation

Shared Memory

  • Agenten sind parallele und verteilte Systeme!

  • Eine der einfachsten Kommunikationsmodelle und Architekturen fรผr parallele Systeme ist der geteilte Speicher.

  • Das Shared-Memory-Modell ist ein hรคufig verwendetes Interprozesskommunikationsparadigma fรผr parallele, weniger fรผr verteilte Systeme. Es ist eng verwandt mit dem Parallelregister und Random-Access-Maschine (PRAM),

  • Das PRAM-Modell nimmt n identische Verarbeitungseinheiten (PU) an, die mit einer Shared-Memory-Ressource รผber Direktzugriff (SRAM) verbunden sind.

    • Speicherzellen haben gleiche Breite, die durch eine numerische Adresse referenziert werden.
    • Das SRAM-Modell unterstรผtzt konkurrierende Lese- und Schreiboperationen.
    • Lesen ist i.A. konfliktfrei, Schreiben kann zu Konflikte fรผhren.

Shared Memory

  • Agenten kรถnnen รผber den geteilten Speicher Daten austauschen!
  • Aber: Es gibt Datenaustausch ohne explizite Synchronisation zwischen den Agenten.
  • Und: Das SRAM Modell ‘verletzt’ das Autonomieparadigma von Agenten!

figpramag


Abb. 1. Das PRAM Modell und die Verknรผpfung mit Agenten die auf den PUs ausgefรผhrt werden.

Tupelrรคume

  • Tupel-Rรคume stellen ein assoziiertes Shared-Memory-Modell dar, wobei die gemeinsam genutzten Daten als Objekte mit einer Reihe von Operationen betrachtet werden, die den Zugriff der Datenobjekte unterstรผtzen

  • Tupel sind in Rรคumen organisiert, die als abstrakte Berechnungsumgebungen betrachtet werden kรถnnen.

  • Ein Tupelraum verbindet verschiedene Programme, die verteilt werden kรถnnen, wenn der Tupel-Space oder zumindest sein operativer Zugriff verteilt ist.

    • Oder: Mobile Agenten als Tupel Verteiler!
  • Das Tupelraum Organisations- und Zugangsmodell bietet generative Kommunikation, d.h. Datenobjekte kรถnnen in einem Raum durch Prozesse mit einer Lebensdauer รผber das Ende des Erzeugungsprozesses hinaus gespeichert werden.

  • Ein bekanntes Tupelraum-Organisations- und Koordinationsparadigma ist Linda [GEL85].

Tupelrรคume

figts[3]


Abb. 2. Ein Schnappschuss eines Tupelraumes mit Tupeln und Tupeloperationen

Tupelrรคume

  • Kommunikation von Agenten รผber Tupelrรคume ist eine Koordinationssprache.

figtsgen


Abb. 3. Direkter Nachrichtenaustausch (a), z.B. durch Signale, im Vergleich zu generativer Kommunikation (b) und virtuelle verteilte Rรคume (c) durch mobile Prozesse (Agenten)

Tupelrรคume - Datenmodell

  • Die Daten sind mit Tupeln organisiert.

  • Ein Tupel ist eine lose gekoppelte Verbindung einer beliebigen Anzahl von Werten beliebiger Art /Typ/

  • Ein Tupel ist ein Wert und sobald es in einem Tupelraum gespeichert ist, ist es persistent.

  • Tupeltypen รคhneln den Datenstrukturtypen, sie sind jedoch dynamisch und kรถnnen zur Laufzeit ohne statische Beschrรคnkungen erstellt werden.

  • Auf die Elemente von Tupeln kann nicht direkt zugegriffen werden, was รผblicherweise Mustererkennung und musterbasierte Dekomposition erfordert, im Gegensatz zu Datenstrukturtypen, die einen benannten Zugriff auf Feldelemente bieten, obwohl die Behandlung von Tupeln als Arrays oder Listen diese Beschrรคnkung lรถsen kann.

  • Ein Tupel mit n Feldern heiรŸt n-stellig und wird in der Notation <v1, v2, ..> angegeben.

Tupelrรคume - Datenmodell

Beispiele

<'SENSOR',1000>
<'SENSOR2',[10,100,2]>
<1,3,5,7,11>
<'SLEEPMODE',True,2500.34>
<0,'OFF'>
<1,'ON'>
  • Formal werden Tupel als Vektoren durch die folgende Generierungsregel mit Werten v, Ausdrรผcken ε und Variablen x definiert, die als tatsรคchliche Parameter betrachtet werden (d.h. Variablen x, die mit Wertesemantik verwendet werden):
\[t = \left\langle {\overrightarrow d } \right\rangle {\text{, with }}\overrightarrow d :: = d|d,\overrightarrow d {\text{ and }}d:: = v|\varepsilon |x
\]

Tupelrรคume - Datenmodell

  • Tupelwerte erfordern einen Mustervergleich basierend auf dem Vorlagenmuster mit der folgenden Generierungsregel, bestehend aus tatsรคchlichen (v, ε, x) und formalen Parametern (x?, Variablen, die mit Referenzsemantik verwendet werden):
\[p = \left\langle {\overrightarrow {dt} } \right\rangle {\text{, with }}\overrightarrow {dt} :: = dt|dt,\overrightarrow {dt} {\text{ and }}dt:: = v|\varepsilon |x|x?| \bot
\]
  • Ein Suchmuster kann ein Wildcard () anstelle von formalen Parametern verwenden.

  • Jedes Tupel t hat eine Typsignatur Sig (t) = St = <T1; T2; ; Tn>, ein Tupel mit der gleichen Stelligkeit wie t, das den Typ jedes Tupelfeldes angibt.

  • Ein Tupel kann nur durch seine Verknรผpfung mit Templates p angesprochen werden.

Tupel Rรคume - Datenmodell

  • รœblicherweise wird das erste Feld eines Tupels als symbolischer Schlรผssel behandelt, der eine Tupelunterklasse identifiziert, indem Textzeichenfolgen oder aufgezรคhlte symbolische Konstantenwerte verwendet werden.

Mustersuche

Definition 1.
Sei t = <d1, d2, .., dn> ein Tupel, p = <dt1, dt2, .., dtm> eine Vorlage; dann wird t durch p abgedeckt (bezeichnet durch match (t, p) = true), wenn die folgenden Bedingungen gelten: (i) m = n. (ii) dti = di oder dti = , 1 i n. Bedingung (1) prรผft, ob t und p die gleiche Stelligkeit haben, wรคhrend (2) prรผft, ob jedes Nicht-Wildcard-Feld von p gleich ist dem entsprechenden Feld von t.

Tupelrรคume - Operationale Semantik

  • Es gibt eine Reihe von Operationen, die von Prozessen angewendet werden kรถnnen, bestehend aus
    • einer Reihe reiner Datenzugriffsoperationen, die Tupel als passive Datenobjekte behandeln,
    • und Operationen, die Tupel als eine Art von aktiven Rechenobjekten behandeln (genauer gesagt, zu berechnende Daten).
    • RPC-Semantik (Remote Procedure Call).
out(t)
Die Ausfรผhrung der Ausgabeoperation fรผgt das Tupel t in den Tupelraum ein. Mehrere Kopien desselben Tupelwerts kรถnnen eingefรผgt werden, indem die Ausgabeoperation iterativ angewendet wird. Die gleichen Tupel kรถnnen nach dem Einfรผgen in den Tupelraum nicht unterschieden werden.
Beispiel: out("Sensor",1,100); out("Sensor",2,121);

Tupelrรคume - Operationale Semantik

inp(p)

Die Ausfรผhrung der Eingabeoperation entfernt ein Tupel t aus dem Tupelraum, der der Mustervorlage p entspricht. Wenn kein passendes Tupel gefunden wird fรผhrt das zu einer Blockierung des aufrufenden Prozesses bis ein passendes Tupel eingestellt wird.

Beispiel: inp("Sensor",1,s1?); inp("Sensor",i?,s?);

rd(p)

Die Ausfรผhrung der Leseoperation gibt eine Kopie eines Tupels t zurรผck, dass der Vorlage p entspricht, entfernt sie jedoch nicht. Wenn kein passendes Tupel gefunden wird fรผhrt das zu einer Blockierung des aufrufenden Prozesses bis ein passendes Tupel eingestellt wird.

Beispiele: rd("Sensor",1,s1?); rd("Sensor",i?,s?);

Tupelrรคume - Operationale Semantik

inp?(p), rd?(p)

Nichtblockierende Version von inp/rd. Wird kein passendes Tupel gefunden wird die Operation ergebnislos terminiert.

Beispiel: res:=inp?('SENSOR',a?,b?);

inpw?(tmo,p), rdw?(tmo,p)

Teilblockierende Version von inp/rd, Wird einer Zeit von tmo kein passendes Tupel gefunden wird die Operation abgebrochen.

Beispiel: res:=inpw?(1000,'SENSOR',a?,b?);

  • Die Verwendung von zeitlich unbegrenzt blockierenden Operationen kann unter Betrachtung der Lebendigkeit von Agenten nachteilig sein. Daher sollte immer eine zeitliche Begrenzung und anschlieรŸende Abfrage des Operationsstatus erfolgen (abgebrochen?)

Tupelrรคume - Operationale Semantik

test(t), testandset(p,function (t)→t)
Nicht blockierender Test eines Tupels und atomare Verรคnderung eines Tupels, dass der Vorlage p entspricht. Das zweite Argument ist eine Abbildungsfunktion. Das Ergebnistupel ersetzt das ursprรผngliche.

Markierungen

  • Tupel sind persistent und kรถnnen fรผr immer in einem Tupelraum verbleiben!
  • Daher ist die Verwendung von Markierungen hรคufig sinnvoll.
  • Eine Markierung ist ein Tupel mit einer Lebenszeit τ
  • Nach Ablauf der Lebenszeit wird das Tupel - sofern es nicht entfernt wurde - durch einen Garbagecollector entfernt.
\[m = \left\langle {\tau ,\overrightarrow d } \right\rangle {\text{, with }}\overrightarrow d :: = d|d,\overrightarrow d {\text{ and }}d:: = v|\varepsilon |x,{\text{ }}\tau :{\text{timeout}}
\]
mark(tmo,t)
Ausgabe eines Tupels t mit einer Lebenszeit τ (im Tupelraum).

Tupelrรคume - Operationale Semantik

eval(p)
Diese Operation ermรถglicht die Injektion von aktiven Tupeln, die derzeit nicht vollstรคndig ausgewertet sind, indem ein erweitertes funktionales Tupel t verwendet wird (mit erweitertem dt :: = v | ε | x | f (x) mit einem Funktionsargument). Das Tupel wird erst bei Bedarf in einem eigenen Prozess ausgewertet (durch inp oder rd Operation initiiert)
Diese Operation nimmt eine Funktion f (x) an, die in den Prozessen vorhanden ist, die am Tupleraum teilnehmen und die fรผr die vollstรคndige Berechnung dieser Tupel verwendet werden kann.

Alternative Implementierung mit eval (Klientenseite) und listen und reply Operationen (Serverseite):

P1: eval("square",2,y?)
P2: def sq = fun x -> x*x;
    listen("square",x?,?);
    y=sq(x);
    reply("square",x,y);

Tupelrรคume - Synchronisationsmodell

  • Es gibt Produzenten- (Generator) und Verbraucherprozesse.
  1. Ein Produzent erzeugt ein Tupel, das von einem Konsumentenprozess entfernt werden kann.

    • Die Tupelausgabeoperation endet unmittelbar (asynchron), alternativ nachdem das Tupel im Tupelraum gespeichert wurde (synchron).
  2. Ein Verbraucher-Prozess wird blockiert, wenn die Anfrage nicht bearbeitet werden kann, wenn im Tupel-Bereich tatsรคchlich kein passendes Tupel vorhanden ist.

  3. Nachdem ein รผbereinstimmendes Tupel im Tupelraum gespeichert wurde, wird es sofort einen der wartenden Verbraucherprozesse zugewiesen.

  • Daher ist die Eingabeoperation immer synchron. Einzige Ausnahme sind die nicht permanent blockierenden Versionen, die das Warten auf eine obere Zeitgrenze begrenzen (Timeout).

  • Es gibt keine anfรคngliche zeitliche Anordnung von Erzeuger- und Verbraucheroperationen.

Tupelrรคume - Beispiele

Verteilte Tupelrรคume

  • Die Verteilung von Tupel-Rรคumen auf verschiedenen Rechnerknoten impliziert Synchronisationsprobleme und erfordert normalerweise eine zuverlรคssige Gruppenkommunikation, die in Rechnernetzwerken nicht erwartet werden kann.

  • Die Verteilung von Tupel-Rรคumen bedeutet die Verteilung und asynchrone Ausfรผhrung einer Menge von Tupelraum-Servern anstelle eines einzelnen Servers.

  • Ein Tupelraum-Server bietet die notwendige Koordination fรผr gleichzeitige oder verschachtelte In / Out-Anfragen.

    • Die Verteilung der Server fรผhrt zu einer Verteilung der Koordination.
    • Dieses Problem kann jedoch gelรถst werden, indem der Tupelraum in Unterrรคume partitioniert wird und jeder Unterraum auf einem anderen Knoten von einem Server bedient wird.
    • Problem: Tupel sind nicht gleichmรครŸig verteilt schlechtes Load Balancing!

Verteilte Tupelrรคume

figtsdist


Abb. 4. Zusammenhang von lokalen und entfernten (verteilten) Tupelrรคumen

figtsdistarch


Abb. 5. Lokale und multiple globale Tupelraumserver

Kommunikationssignale

  • Signale sind einfache Nachrichten die

    • An einen bestimmten Prozess oder Agenten gerichtet sein kann Unicast;
    • An eine bestimmte Gruppe von Prozessen oder Agenten Multicast;
    • Oder an unbestimmte Gruppe von Prozessen oder Agenten in der Umgebung Broadcast
  • Ein Signal besteht aus einem Signaltyp (Nummer, Zeichenkette usw.) und einem (optionalen) Datenteil (Signalargument)

  • Ein Signal kann gesendet und empfangen werden.

  • Hรคufig wird auf den Empfang eines Signals nicht aktiv gewartet sondern mittels Signalhandlern, die eingehende Signale asynchron verarbeiten.

  • Ein Agent kann verschiedene Signale aus einer Menge S=[Sig1,Sig2,..} verarbeiten

  • Fรผr jedes Signal muss ein Signalhandler installiert werden!

Kommunikationssignale

Verarbeitung von Signalen

signal SIGNAL1,SIGNAl2;
Ag1: 
  on(SIGNAL1, function (arg,from) { 
   do process signal SIGNAL1 from sender });
  on(SIGNAL2, function (arg,from) { 
   do process signal SIGNAL2 from sender });
Ag2: 
  send(Ag1,SIGNAL,ε;
  • Signale sind gekennzeichnet durch das Tupel
    <Absender,Empfรคnger,Name,Wert>

  • Nachteil gegenรผber Tupeln: Der Agent kann die eingehenden Nachrichten nicht filtern bezรผglich

    • Inhalt
    • Relevanz und Interesse
    • Absender

Kommunikationssignale

Kommunikationssignale

  • Anders als bei Tupeln muss der Empfรคnger (Agent) dem Absender (Agent) bekannt sein (Agentenreferenz)
    • Eltern-Kind Beziehungen werden daher hรคufig fรผr Unicast Signale verwendet
    • Gruppenbeziehungen kรถnnen durch Agentenklassen und rรคumliche Bereiche entstehen

Routing

  • Signale adressieren mobile Agenten die ihren Standort, d.h. die Plattform, wechseln kรถnnen

  • Der Vermittlung (Routing) der Signalnachrichten kommt daher besondere Bedeutung zu.

  • Eine Mรถglichkeit eine Signalnachricht zwischen zwei Agenten A und B zu vermitteln ist die Vermittlung entlang des Pfades von A und B (Spuren)

    • Wenn die Spuren von A und B sich irgendwo kreuzen (Kreuzungspunkte sind die Plattformen) so kann die Nachricht รผber den Kreuzungspunkt zugestellt werden

Kommunikationssignale

figagtraces


Abb. 6. Mobile Agenten in einem Netzwerk aus Plattformen (APP) und ihrer Spuren; Routing von Nachrichten รผber Kreuzungspunkte von Spuren

Kommunikationssignale

figagentcomm


Abb. 7. Agentenkommunikation (a) Lokale Tuplerรคume (b) Agent-Agent Signale (c) Entfernte Agent-Knoten Signale (d) Entfernte Tupleraumoperationen

Hรถhere Kommunikation: Interaktion

  • Tupelrรคume und Signalnachrichten sind nur ein Werkzeug um hรถhere Ebenen der Kommunikation zu erreichen Interaktion von Agenten.

figagentinter


Abb. 8. Taxonomie der Agenteninteraktion die auf Kommunikation aufbaut

Sprache und Aktionen

  • Kommunikation als Sprache kann aktionsorientiert und wissensbasiert sein!

  • Nachrichten verfolgen Absichten und sollen beim Empfรคnger Aktionen auslรถsen.

Speech Act Theory
Die Sprechakttheorie behandelt Kommunikation als Aktion. Es basiert auf der Annahme, dass Sprachhandlungen von Agenten genauso wie andere Aktionen ausgefรผhrt werden, um ihre Absichten zu fรถrdern.
  • Das Ziel einer Anfrage/Ersuchens (Request) eines Sprechers ist die Ausfรผhrung einer Aktion des Zuhรถrers.

  • Das Erreichen der Ziele รผber Sprachkommunikation hรคngt von Wissen und Planung des Sprechers und des Zuhรถrers ab.

  • Agentenkommunikationssprachen spielen daher eine wesentliche Rolle bei der Planung und Aktionsausfรผhrung wissensbasierte Agenten (deduktive)

Agentenkommunikationssprachen

  • Wichtige Vertreter der sprachorientieren Kommunikation von Agenten sind:
KQML

KQML ist eine nachrichtenbasierte Sprache fรผr die Agentenkommunikation. Daher definiert KQML ein allgemeines Format fรผr Nachrichten. Eine KQML-Nachricht kann grob als Objekt betrachtet werden (im Sinne objektorientierter Programmierung): Jede Nachricht hat eine Performative (Zusammenhang zwischen Sprechen und Handeln, die man sich als die Klasse der Nachricht vorstellen kann) und eine Anzahl von Parametern (Attribut / Wert Paare, die man sich als Instanzvariablen vorstellen kann).

FIPA-ACL

Diese Sprache รคhnelt oberflรคchlich KQML: Sie definiert eine “รคuรŸere” Sprache fรผr Nachrichten, definiert 20 Performativen (wie z.B. inform), um die beabsichtigte Interpretation von Nachrichten zu definieren, und es ist keine spezifische Sprache fรผr den Nachrichteninhalt vorgegeben. Darรผber hinaus รคhnelt die konkrete Syntax fรผr FIPA-ACL-Nachrichten weitgehend der von KQML.

KQML

figkqmlperf


Abb. 9. KQML Nachrichtentypen (Performativen): Teil 1, VKB: Virtual Knowledge Base

KQML

figkqmlperf2


Abb. 10. KQML Nachrichtentypen (Performativen): Teil 2 [C]

KQML

  • KQML Nachrichten besitzen Parameter, die u.A. eine Sprache des Inhaltes und eine Ontologie festlegen gemeinsames Verstรคndnis!

figkqmlparam


Abb. 11. KQML Nachrichtenparameter
  • Eine Ontologie ist eine formale Definition eines Wissenskรถrpers. Die typischste Art von Ontologie beinhaltet strukturelle Komponenten. Im Wesentlichen eine Taxonomie der Klassen- und Unterklassenbeziehungen gekoppelt mit Definitionen der Relationen zwischen diesen Dingen.

KQML

Beispiele fรผr Dialoge

(evaluate
 :sender A :receiver B 
 :language KIF :onto1ogy motors 
 : reply-with q1 :content (val (torque ml)))
(reply
 :sender B :receiver A 
 :language KIF :ontology motors 
 :in-reply-to ql :content (= (torque ml) (scalar 12 kgf)))
 
(stream-about 
 :sender A :receiver B 
 :language KIF :ontology motors 
 :reply-with q1 :content m1)
(tell
 :sender B :receiver A 
 :in-reply-to q1 :content (= (torque ml) (scalar 12 kgf)))
(tell
 :sender B :receiver A 
 :in-rep1y-to q1 :content (= (status ml) normal))
(eos
 :sender B :receiver A :in-reply-to q1)

FIPA-ACL

figfipaperf


Abb. 12. FIPA Nachrichtentypen (Performativen) und ihre Anwendungsgebiete [C]

FIPA-ACL

Implementierung

  • Weit verbreitet ist die JADE Plattform in der Agenten als Java Threads ausgefรผhrt werden.

figfipaimpl


Abb. 13. Schichtenaufbau der APP mit FIPA-ACL รผber der Wissensdatenbank und Reprรคsentationsschicht [D]

Ontologien

  • Neben einer gemeinsamen Sprache bei der Kommunikation ist
    • Die richtige Interpretation der Inhalte, Informationen, und Wissensreprรคsentation;
    • Und das Erkennen und Verstehen von Zusammenhรคngen (Strukturen)

wichtig fรผr ein zielgerichtete Emergenzverhalten von Agenten.

  • Ontologien kรถnnen die Informationen und Inhalte die ausgetauscht werden beschreiben und klassifizieren sowie Strukturen (Zusammenhรคnge) zwischen Elementen beschreiben.

  • Auch Ontologien benรถtigen eine geeignete Beschreibungssprache, z.B. im XML/JSON Format, oder die OWLโ€“ The web ontology language

  • Ontologien beschreiben u.A. bzw. bestehen aus:

    • Klassen
    • Formale “ist-ein” Taxonomien, d.h., die Einordnung von Klassen
    • Attribute von Klassen
    • Wertebeschrรคnkungen
    • Logische Randbedingungen

Ontologien

  • Ontologien kรถnnen sehr spezielle Beschreibungen von Elementen und Strukturen besitzen oder sehr allgemein sein.

figontohier


Abb. 14. Die Abstraktion von Ontologien bestimmt ihren Nutzen und eine Hierarchie [B]

Ontologien

Applikationsontologie

Eine Anwendungsontologie definiert Konzepte, die von einer bestimmten Anwendung verwendet werden. Es wird typischerweise auf einer Domain-Ontologie und wiederum auf einer oberen Ontologie aufbauen.

Konzepte aus einer Anwendungsontologie werden normalerweise nicht wiederverwendbar sein: Sie sind typischerweise nur in der Anwendung relevant, fรผr die sie definiert wurden.

Domainontologie

Eine Domain-Ontologie definiert Konzepte, die fรผr eine bestimmte Anwendungsdomรคne geeignet sind.

Domain-Ontologien sind in der Regel auf Konzepten einer รผbergeordneten Ontologie aufbaut Wiederverwendung von Ontologien ist sehr wichtig, da je mehr Anwendungen eine bestimmte Ontologie verwenden, desto mehr รœbereinstimmung herrscht รผber Terme.

Ontologien

  • Ontologien besitzen unterschiedliche Ausdrucksstรคrke, je nachdem ob sie eher informal oder formal sind.

figontotspec


Abb. 15. Spektrum der Ontologien [B]