510 likes | 640 Views
Rescue team simulation. Multiagentensystem. Gliederung. Aufgabe Agenten Unterschiede/Funktion Umsetzung Entity-Package Control-Package GUI-Package. Gliederung. (No)CollisionNoCoordination Agenten search-Algorithmus (No)CollisionCoordination Agenten Erweiterungen, Verbesserungen
E N D
Rescue team simulation Multiagentensystem I. M., Christian Lange, U. P.
Gliederung • Aufgabe • Agenten Unterschiede/Funktion • Umsetzung • Entity-Package • Control-Package • GUI-Package
Gliederung • (No)CollisionNoCoordination Agenten • search-Algorithmus • (No)CollisionCoordination Agenten • Erweiterungen, Verbesserungen • Programmvorstellung • Ergebnisse der Simulation
Aufgabe • MAS zum Retten von Unfallopfern • Survivor • Verschlechtert seinen Gesundheitszustand mit einer Wahrscheinlichkeit von 60% je Zeiteinheit • Ausgangsgesundheit globaler Parameter • Agent • Random • NoCollisionNoCoordination • CollisionNoCoordination • NoCollisionCoordination • CollisionCoordination
Agenten • Random • Bewegen sich zufällig • Strafversetzung beim Kollidieren mit anderen Agenten • Survivor gerettet durch Betreten des Feldes
Agenten • NoCollisionNoCoordination / CollisionNoCoordination • Bewegen sich mittels intelligente Algorithmen • Kollisionen • Vermeiden • Strafversetzung • Survivor werden gerettet durch Betreten des Survivor-Feldes
Agenten • NoCollisionCoordination / CollisionCoordination • Bewegen sich mittels intelligente Algorithmen • Kollisionen • Vermeiden • Strafversetzung • Rettet den Survivor durch Umkreisen dieses
Aufgabe • Einstellungen • Anzahl der Agenten • Anzahl der Survivor • Größe des Feldes • Episoden • Eine Episode beendet, wenn alle Survivor gerettet worden sind Statistik • Durchschnittliche Rettungszeit • Durchschnittliche gerettete Survivor je Agentenart
Umsetzung • Erarbeiten der Agentenfunktionalität • Recherche nach ähnlichen Projekten • Sehr komplexe Algorithmen • Klassendiagramm erstellt • - • Implementierung des Simulators • Aufgabenverteilung
Entwicklungsumgebung • Java 1.5 Update 9 • Plattformunabhängig • Eclipse 3.2.1 • Freeware • Bibliotheken • JFreeChart
World • Klasse, welche die Welt repräsentiert • kapselt Teams und Survivor • Enthält das „Spielfeld“ • Field-Objekte • Was befindet sich auf dem Feld? • Was ist der Zustand des Feldes? • explored?
Team Ein Team für jede Agentenart • Enthält die Agenten • Besitzt die „TeamWorld“ • Steuert Agenten und gibt Anweisungen des Systems weiter • Stellt globale Teamvariablen bereit • Kommunikation innerhalb des Teams • Teams konkurrieren
Agent & Survivor • Agent • ID • Aktuelle Position • Zielpositon • nearestSurvivor • Survivor • ID • Gesundheitszustand • rescued
Control-Klassen • „RescueSystem“ • steuert den Ablauf in einem Zeitschritt & in den Episoden • ruft die Manager auf • Manager • „CollisionManager“ • Prüft, ob Kollisionen und löst diese • „RescuedManager“ • Prüft, ob Survivors gerettet wurden
„RescueSystem“ • steuert den Ablauf • Nachricht an die Teams • Agenten „sollen sich umschauen“ • & ihre „Wunschposition“ • Aufruf „CollisionManager“ • Nachricht an die Teams • Agenten auf nächste Position • updaten der World/TeamWorld • Felder setzen (durch Teams) • „RescuedManager“ • Gesundheitszustand der Survivors verändern • GUI neu zeichnen
GUI • Swing • JMenuBar • JToolBar • JTabbedPane • JPanel
Einstellungen • Anzahl der Agenten • Sichtweite • Wahrscheinlichkeit • Gesundheitszustand • Anzahl der Survivor • Anzahl der Episode und die Pausenzeit
Statistiken • 3 Arten Implementiert • Ø gerettete Survivors • je Agent pro Episode • je Team pro Episode • Ø Zeit für das Retten eines Survivors • Exportieren und Drucken der Diagramme
(No)CollisionNoCoordinationAgent I. M. Ines Moosdorf, Christian Lange, Ulrike Plötner
Einleitung NoCollisionNoCoordination & CollisionNoCoordination • Beide gleiche Art, um Survivor zu befreien • haben beide gleiche Algorithmen • Unterschied nur bei Kollisionskonfliktlösen • Sind keine Individualisten, sondern kommunizieren
Ablauf Agent Sensorik Überlegung Aktorik
Sensorik Agent: lookAround() • schaut sich x Kästchen weit um • trägt Entdeckungen in TeamWorld ein
Überlegung Team: findDestinations() • kürzeste Wege für alle Agenten zu allen Survivors • ermittelt Utilities • übergibt diese Daten dem Agenten Agent: berechnet daraus „Expected Utilities“ und bestimmt damit seinen optimalen Survivor
Berechnung „Expected Utility“ = Probability x Utility P.. Probability S.. Summe aller kürzesten Wege eines Agenten k.. Kürzester Weg zum aktuellen Survivor Utility.. Kehrwert des Gesundheitszustand des Survivors
Kommunikation zwischen den Agenten • wird vom Team angestoßen • klären, wer welchen Survivor bekommt • für jeden Survivor ein Agent (s=a) • wenn weniger Survivor als Agenten die besten laufen zu den Survivors & die restlichen durchsuchen andere Felder (search()) • wenn noch kein Survivor Agent ruft search()-Methode auf
Nächster Schritt • Agenten, die einen Survivor festzugeordnet bekommen haben: • Nächste Position: Feld, welches näher am Survivor dran ist als ihr aktuelles Feld • Agenten, die keinen Survivor haben: • search()-Algorithmus: • solange in eine Richtung gerade aus laufen, bis sie gegen eine Wand laufen
Kollisionsprüfung CollisionManager • Control-Klasse • solveCollisions()
Aktorik • Team: moveAllAgents() • Ruft move() der Agenten auf • ändert Status der Felder in der TeamWorld und in der „echten“ Welt Änderung in der Umgebung • Agent: move() • Gewünschte Position wird zur aktuellen Position Änderung im Agenten
TODO – (No)CollisionNoCoordination • search()-Algorithmus nicht optimal • NoCollision-Agenten • Kollisionsalgorithmus
(No)CollisionCoordinationAgent U. P. Ines Moosdorf, Christian Lange, Ulrike Plötner
Ablauf lookAround findDestinations move
findDestination findDestination if no survivor found else search coordinateRescue
search definiere geradeaus not possible while possible laufe geradeaus
Grundgedanken • Einteilung der Agenten in Rettungsteams • ANIM – AgentsNotInMission • SNIM – SurvivorsNotInMission • SIM – SurvivorsInMission
findDestinations() findDestinations() { checkDisappearedSurvivors(); checkNewSurvivors(); coordinateRescue(); }
coordinateRescue() • SIM: calcNextPositionRescueTeam() • Bildung der Rettungsteams aus ANIM wenn es SNIM gibt: • calcAgentsForRescue() • calcShortestWays() • putPrioritySurviovrInMission()
Erweiterungen • CollisionManager • Sichtweite der Agenten • momentan können sie hinter Mauern sehen
Verbesserungen • search-Algorithmus • Coordination-Agents: • flexiblere Teams • prioritySurvivor
Ergebnisse der Simulation • Größe 30x30 • 2 RandomAgents • 1 CollisionNoCoordinationAgent • 3 CollisionCoordinationAgent • Sichtweite 2 • Survivors 30 • Episoden 10