Technologien, Architekturen, Plattformen
Prof. Dr. Stefan Bosse
Universität Koblenz - FB Informatik - Praktische Informatik
Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke ::
Bisher wurden MAS auf einer Plattform ausgeführt.
Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke ::
Bisher wurden MAS auf einer Plattform ausgeführt.
Jetzt soll auch die Mobilität der Agenten über Plattformnetzwerke ermöglicht und diskutiert werden.
Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke :: Mobile Agenten
Ein Agent ist charakterisiert durch:
Programm und Daten bilden ein funktionales Objekt
Ein Agent in Ausführung wird durch einen Prozess repräsentiert.
Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke :: Mobile Agenten
Mobile Agenten bedeuten mobile Prozesse!
Bei der Migration muss ein Agentenprozess in einen
Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke :: Mobile Agenten
Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke :: Mobile Agenten
Damit ein Agent seinen Standort wechseln kann muss das gesamte funktionale Objekt und sein Kontrollzustand serialisiert werden:
Der Kontrollzustand ist vor allem durch die next Variable gegeben und bereits Bestandteil des Agentenobjekts.
Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke :: Mobile Agenten
Wie sollen nun aber die Funktionen aus der Aktivitäts-, Übergangs- und Behandlungssektion serialisiert werden?
Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke :: Mobile Agenten
In JavaScript kann jede Funktion durch die f.toString()
Methode (wieder) in Text umgewandelt werden.
IN JSON könnten diese Funktionen dann direkt als Text gespeichert werden. Aber wie soll man diese Zeichenketten von Daten unterscheiden? Und Programmcode enthält z.B. Zeilenumbrüche und Zeichen die in JSON kodiert (Escaped) werden müssen.
In JSON+ werden Funktionen als Zeichenketten mit einem Prefix im base64 Format gespeichert (erspart Kodeüberarbeitung).
Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke :: Mobile Agenten
while (ε) { ... }─────────────────while (ε && schedule()) { ... }for (;ε;) { ... }─────────────────for (;ε && schedule();) { ... }function foo() { ... }─────────────────function foo () { schedule(); ... }
Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke :: Mobile Agenten
{ x, act:{a1:() => {i1;i2;..}}, trans:{a1:() => {i1;i2;..}}, next}─────────────────────────────{ "x":ν, "act":{"a1":"__PxEnUf_aTE7aTI7Li4=",..}, "trans":{"a1":...}, next:"a2"}
Serialisierung eines Agentenobjekts in das JSON+ Format
Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke :: AgentJS Mobilität
Für mobile Agenten wird benötigt:
moveto(destination)
Die Verbindung von JAM Plattformen findet über AMP (Agent Management Port) und Kommunikationskanälen statt.
Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke :: Vernetzung von Agentenplattformen
Eine Agentenplattform repräsentiert einen physikalischen Knoten in einem Virtuellen Netzwerkgraphen
Ports von Plattformen verbinden und stellen Links her
Ein Agent kann auf einen anderen Knoten (Plattform) migrieren indem er die moveto Operation ausführt (innerhalb einer Aktivität):
DIR.NODE(<nodename>
), eine IP Adresse (DIR.IP(<url>)
), oder bei gerichteten Verbindungen die Richtung sein (z.B. DIR.NORTH
)Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke :: Vernetzung von Agentenplattformen
link(DIR.IP('%')
liefert JAM Plattformnamenlink(DIR.IP('*')
liefert IP Adressen der Plattformen{ var connected=link(DIR.IP('%')); if (connected.length) { var next = random(connected); moveto(DIR.NODE(next)); }}
Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke :: Vernetzung von Agentenplattformen
JAM Plattformen können in beliebigen Netzwerken miteinander verbunden werden.
Eine Vielzahl von Kommunikationsprotokolle sind verwendbar:
Beliebige Netzwerktopologien können gebildet werden (physisch wie logisch):
AMP: Agent Management Port als gemeinsames Protokoll und Interface in heterogenen Systemen
Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke :: Agent Management Port
Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke :: Agent Management Port
JAM Konnektivität und ein breites Spektrum an unterstützten JavaScript Host Plattformen. DOS ist ein optionale Distributed Organization System Schicht und implementiert verteilte Systeme via Remote Procedure Calls (RPC)
Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke :: Agent Management Port
// Service Providerport(DIR.IP(9999),{proto:'http'})// Service Userport(DIR.IP('http://localhost:*'));locate(print); // start localizationconnect(DIR.IP('http://localhost:9999'));
In der JAM Shell können AMP Service Endpunkte (außer im Browser) und AMP Verbindungen erstellt werden
Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke :: Agenten Interaktion
Effekt von verschiedenen AAPL/AgentJS Anweisungen zur Laufzeit auf Agenten und Plattformen
Stefan Bosse - MAS - Modul D Verteiltes Rechnen mit JAM Agenten (ABC): Mobilität und Netzwerke :: JAM Shell
Die JAM shell jamsh integriert eine JAM Plattform.
Beim Start wird ein JAM Knoten (d.h. einer virtuelle/logische JAM APP) erzeugt.
Nach dem Start können einzelne Anweisungen ausgeführt werden, wie das Laden von Agentenklassen oder das Herstellen von Verbindungen zu anderen JAM Knoten (physisch oder logisch)
Stefan Bosse - MAS - Modul D node jamsh :: JAM Shell
# node jamshJAM Shell. Version 1.1.14 (C) Dr. Stefan Bosse[JAM] Created world MUJIVOTO.[JAM] Created root node mujivoto (0,0).> help> port(DIR.IP(10001))iprouter: add link localhost:10001[AMP C2:EF:38:1F:F5:EC IP(10001)] Starting 127.0.0.1:10001 [MUL] (proto udp)[AMP C2:EF:38:1F:F5:EC IP(10001)] IP port 141.26.71.28:10001 (proto udp)> open('code/hello.js')> start()> create('hello',{text:"hello world"})dicexiro> stats('node')
Stefan Bosse - MAS - Modul D node jamsh :: JAM Shell
script(file)
Kommandos geladen werden.function hello(msg) { this.msg=msg; this.act = { init: function () { log('hello '+this.msg); }, end: function () {} } this.trans = { init:end } this.next=init;}compile(hello);
Stefan Bosse - MAS - Modul D node jamsh :: JAM Shell
start()
gestartet werden um Agenten auszuführen:> start()[JAM] Starting JAM loop ..
Schon vor dem Start können Agenten erzeugt werden!
Mit dem stop()
Kommando wird die Ausführung von Agenten durch JAM gestoppt, jedoch bleiben die Agenten erhalten. Eine nochmalige Verwendung des start()
Kommandos führt die Ausführung der Agenten weiter.
Stefan Bosse - MAS - Modul D node jamsh :: JAM Shell
Stefan Bosse - MAS - Modul D node jamsh :: JAM Shell
Mit dem port(dir)
Kommando kann ein neuer Kommunikationsport für eine JAM APP erzeugt werden, i.A, port(DIR.IP("IP:IPPORT"))
Mit dem link(dir)
Kommando werden zwei Ports miteinander verbunden, i.A. port(DIR.IP("IP2:IPPORT2"))
.
APP-A > port(DIR.IP('IP1:IPPORT1'))iprouter: add link localhost:10001[AMP 63:35:E4:66:FA:43 IP(localhost:10001)] Starting 127.0.0.1:10001 [MUL] (proto udp)[AMP 63:35:E4:66:FA:43 IP(localhost:10001)] IP port 141.26.71.164:10001 (proto udp)APP-B > port(DIR.IP('IP2:IPPORT2'))iprouter: add link localhost:10002[AMP CE:EE:47:39:61:1A IP(localhost:10002)] Starting 127.0.0.1:10002 [MUL] (proto udp)[AMP CE:EE:47:39:61:1A IP(localhost:10002)] IP port 141.26.71.164:10002 (proto udp)APP-A > link(DIR.IP('IP2:IPPORT2'))[AMP 63:35:E4:66:FA:43 IP(localhost:10001)] Trying link to 127.0.0.1:10002iprouter: add route 141.26.71.164:10001 -> 127.0.0.1:10002#negodoqe[AMP 63:35:E4:66:FA:43 IP(localhost:10001)] Linked with ad-hoc udp 127.0.0.1:10002, AMP CE:EE:47:39:61:1A, Node negodoqeAPP-B >iprouter: add route 141.26.71.164:10002 -> 127.0.0.1:10001#quxibumi[AMP CE:EE:47:39:61:1A IP(localhost:10002)] Linked with ad-hoc udp 127.0.0.1:10001, AMP 63:35:E4:66:FA:43, Node quxibumi
Stefan Bosse - MAS - Modul D node jamsh :: JAM Netzwerke
Grundlegende Vernetzung von virtuellen (innerhalb einer physischen) und physischen JAM Plattformen