Einführung in JAM (Stefan Bosse) [5.2025]

Programmierung von JAM Agenten (Teil 2)

Einführung

Die JavaScript Agent Machine (JAM) ist eine unievrsele Agentenausführungsplattform für AgentJS Agenten. Ein Agent gehört zu einer Klasse die durch eine Konstruktionsfunktion beschrieben wird. Diese muss vier wesentliche Abschnitte definieren:

  1. Körpervariablen: this.x=<init>
  2. Aktivitäten (die Aktionen ausführen): this.act={ .. }
  3. Übergänge zwischen Aktivitäten (transitions): this.trans={ .. }
  4. Signal- und Ereignishandler (optional): this.on

Die JAM Plattform ist als Shell in diese Übung integriert. Es wird keine weitere Software benötigt.

Weitere Informationen finden sich im über die JAM Shell in jamsh.pdf, über JAM in jam2020.pdf, und zusammenfassend in diesem Buch jamabx.pdf.

Aufgabe. Lese Kapitel 7 im Buch jamabx.pdf. Was ist der Unterschied zwischen Physikalischen und Virtuellen Clustern?


JAM Plattform Shell

Für diese Übugn werden native JAM Plattformen benötigt. Dazu wird das jamsh Programm benutzt, welches wiederum die JS Plattformen jx oder pl3, notfalls auch node.js, verwendet.

Aufgabe. Starte auf dem lokalen Rechner eine jamsh Instanz mit folgenden Argumenten.

> jx jamsh -s -v -p http:9999
JAM Shell. Version 1.37.1 (c) Dr. Stefan Bosse
[JAM] Created world NOYOHUGI.
[JAM] Created root node noyohugi (0,0).
11:14:15:32 [IP] iprouter: add link http://localhost:9999
11:14:15:32 [AMP 31:FE:B9:B5:AD:D7 IP(9999)] Starting http://localhost:9999 [MUL|SRV] (proto http)
11:14:15:35 [AMP 31:FE:B9:B5:AD:D7 IP(9999)] IP port http://192.168.0.181:9999 (proto http)
Eine Shell im Browser erzeugen. Nur einmal ausführen!

 ▸ 
 ✗ 
 ≡ 


Plattformkonfiguration, Verbindung mit externer Plattform und Start der Shell (im Browser)

 ▸ 
 ✗ 

Programmieren eines Mobilen Agenten

Ein Agent kann seinen aktuellen Knoten mittels myNode() abfragen.

Wir brauchen für die Mobilität drei Zutaten:

  1. Welche Plattformen sind aktuell erreichbar und verbunden? Dazu kann die link(..) Operation verwendet werden.
  2. Wie komme ich zum nächsten Knoten um dort weiter ausgeführt zu werden? Dazu kann die moveto(destination) Operation genutzt werden.
  3. Welche Sensoren kann ich auf den Plattformen nutzen um Daten zu sammeln? Dazu kann z.B. die info(..) Funktion verwendet werden, oder elementar auch myNode().

Ein einfacher mobiler Agent.

 ▸ 
 ✗ 

Aufgabe. Wie verhäkt sich der Agent, welche Parameter beeinflussen sein Verhalten?


Agent erzeugen und starten


Agent erzeugen und starten

 ▸ 
 ✗ 

Aufgabe. Der obige Agent sollte einwandfrei funktionieren. Ändere die Transition gohome wie unten gezeigt ist ab so dass der Agent sich bei der Rückkehr fehlerhaft verhält. Was passiert? Ändere den LIFETIME Parameter ab (statt 5000 auf 10000). Was passiert dann?

    gohome : function () {
      if (this.back[0]==this.home) return result;  // wir sind zuhause

      else return gohome; // weiter zurück

    },

Rekonfiguration der Shell (im Browser)

 ▸ 
 ✗ 


Der Explorationsagent

Aufgabe. Verbssere obige Agenten. Bei der Exploration muss dieser prüfen ob ein Knoten schon besucht wurde (visited). Kein Knoten soll zweimal besucht werden (außer als Durchgang und der Heimatknoten). Sammle auf jedem Knoten weitere sensorische Information, siehe info("node"), so z.B. der Standort (Stadt usw.). Starte eine weitere JAM Shell und verbinde beide.


Ein verbesserter mobiler Explorationsgent.

 ▸ 
 ✗ 



Hilfe



Einreichung (Assignment #2025-82416)



Prüfen



Bewerten (Lehrer)




Created by the NoteBook Compiler Ver. 1.36.4 (c) Dr. Stefan Bosse (Tue Jun 03 2025 21:26:47 GMT+0200 (Central European Summer Time))