MCWS mit JAM (Stefan Bosse) [7.2020] |
In diesem Notebook ist eine vollständige JAM Plattform und eine JAM Shell eingebaut!
▸
|
✗
|
▸
|
✗
|
▸
|
✗
|
Es können jederzeit Status- und Statistikinformationen der eigenen JAM Plattform abgerufen werden
Einige Beispiele sind nachfolgend gezeigt
▸
|
✗
|
Ein wichtiger Sensor im Mobilen Crowdsensing ist die geografische Position (meistens in Polarkoordinaten mit Längen- (lon) und Breitengrad (lat) angegeben)
Neben der physikalischen geografischen Position ist der Ortskontext von Interesse (Ortsbeschreibung wie Straßenname und Stadt)
Die Erlangung der aktuellen geografischen Position eines mobilen Gerätes wie ein Smartphone erfolgt meistens direkt mittels Funkwellen und GPS
Die direkte Ableitung der Position über die Internetgeräteadresse ist schwierig da i.A. nur der Standort des Internetserviceproviders (ISP) ermittelt werden kann
JAM verwendet ein mehrstufiges Verfahren um den Standort seiner Hostplattform zu ermitteln:
Über die öffentliche IP Adresse und einer ISP Datenbank (Genauigkeit zwischen 10-500km) und Verwendung des ISP Datenbankservers http:\\ip-api.com
(Achtung: Ad-Blocker in WEB Browser verhindern den Zugriff auf diesen Datenbankservice). Diese Geolokalisation verwendet keine Daten aus Tracking und Tracing (kein Crowdsensing)!
Über die öffentliche IP Adresse und einen Lokalisationservice von Mozilla https:\\location.services.mozilla.com
. Dieser verwendet zur Bestimmung der Nutzerposition (Breiten- und Längengrad) Daten aus Crowdsensing (kollektive Mittelwertdaten, vermutlich nicht personalisiert) und https://api.opencagedata.com
zur Bestimmung des Ortskontextes (Ort, Land).
Wenn vorhanden und nutzbar GPS sowie im WEB Browser den HTML5 GeoLocation Service (über diesen wird dann auch GPS des Gerätes verwendet).
Im agentenbasierten mobilen Crowdsensing nehmen mobile Agenten (also mobiler Code/Software) möglichst slebständig die Erhebung von sensorischen Daten und die Durchführung von Umfragen durch
Beipiel ist folgender Explorationsagent, der
Ein Agent gehört initial zu einer Agentenklasse die in JAM/AgentJS als Konstruktionsfunktion (eines Agentenobjekts) programmiert wird
In AgentJS besteht die Agentenbeschreibung aus
this.data=value;
this.next=ai
, die initial die erste auszuführende Aktivität bezeichnet (beim Start des Agenten)init
percept
explore
goback
deliver
▸
|
✗
|
Wenn eine Agentenklasse mit der Konstruktionsfunktion in der Plattform verfügbar ist (mittels compile). können Agenten von dieser Klasse instantiiert werden.
Dazu wird die create Operation ausgeführt. Das erste Argument gibt den Namen der Agentenklasse an (identisch mit dem Namen der Konstruktionsfunktion), optionalen Argumenten, und den Privilegienlevel des Agentens (1: Standard, 2: Privilegiert).
Der Agent start unmittelbar nach seiner Ezeugung
▸
|
✗
|
DELIVER #
) können die Ergebenisse aus dem Tupelraum entnommen werden
▸
|
✗
|
▸
|
✗
|
▸
|
✗
|
global.foo
zugewiesen werden, damit sie hier später analysiert werden können!
Bei der Exploration soll der Agent Markierungen auf jedem besuchten Knoten hinterlassen (aber nicht doppelt). Ergänze obigen Agentecode mit Tupelraumoperationen. Die Lebenszeit der Markierungen soll 600 Sekunden betragen. Die Tupel müssen die ID des Agenten (abfragen mot me()
), die Uhrzeit (abfragen mit clock(true)
, und sein bisherigen Pfad enthalten (also die Variable path). Bei Doppelbesuchen nicht zweimal markieren (vorher testen).
Bei der Exploration soll nach fremden Spuren (also Markierungen anderer Agenten) gesucht werden. Diese sollen genauso wie die Sensordaten erfasst werden.
Die Ergebnisse der Agentensuche sollen erfasst und analysiert werden.
Die Pfade sollen als zeitaufgelöste Trajektorie mit Zeitstempeln versehen werden und aufgezeichnet werden (also der gesamte Pfad vom Start bis zur Rückkehr). Dazu eine neue Variable trace im Agenten anlegen. Wo liegt das Problem bei den Zeistempeln (mittels clock im ms)?
Optional: Wie kann man eine monotone und normierte Zeitserie in einer Trajektorie erstellen? Stichwort Uhrensynchronisation. Nicht trivial!
▸
|
✗
|