Hallo,
Ich entwickle derzeit mal wieder an einem Projekt mit, welches sich Multiagenten-Simulationen im Rahmen von Operations Research bedient. Ziel ist die Entwicklung eines eigenen Frameworks für komplexe soziale Simulationen zur Früherkennung und Beurteilung von möglichen Problemen, wie z.B. Aufstände, Hungersnöte, Massenpaniken, Seuchen usw.
Wir entwickeln hierzu ein bereits bestehendes Framework für Multiagenten-Systeme um die nötigen Bestandteile weiter. Später soll der Entwickler mit dem Framework vergleichsweise "einfach" entsprechende Modelle entwickeln können und sich um die Engine selbst nach Möglichkeit keine Gedanken mehr machen müssen.
Zu unseren Anforderungen gehört auch eine Echtzeitsteuerung der Simulation über eine GUI. Diese soll u.A. Schieberegler enthalten, welche direkt bestimmte Parameter anpasst, aber auch über ein Terminal für den direkten Zugriff auf Agenten haben.
Die Schieberegler lassen sich in meiner Vorstellung vergleichsweise einfach umsetzen. Hier sollen direkt Variablen in einer static class verändert, welche damit automatisch Einfluss auf alles nimmt, was diese Variablen verwendet. Diese Änderung kann einfach zu Beginn jedes Zuges in der Simulation erfolgen und ist somit nicht direkt zeitkritisch.
Mehr Kopfzerbrechen bereitet mir jedoch das Terminal. Dieses soll u.A. direkten Zugriff auf Agenten nehmen, Ihre Attribute ändern oder diese töten.
so soll z.B. die Eingabe "kill 12" die Entität mit der ID 12 töten.
Problem hierbei ist: Diese Änderung muss in Echtzeit und umgehend erfolgen, da sie ggf. nicht auf einen neuen Durchlaufen warten kann.
Hier weiß ich jetzt nicht weiter.
Gibt es die Möglichkeit in Java eine Art bedingte Programmunterbrechnung zu erwirken?
Ich stelle mir das etwa so vor:
1. Das Programm läuft normal ab
2. Der User macht eine Eingabe im Termial (in die GUI integriert) <- Programm läuft normal ab
3. Der User bestätigt den Befehl mit Enter <- das laufende Programm unterbricht
4. Der Befehl wird ausgewertet und umgesetzt (oder im Falle eines falsches Befehls eine Warnung ausgegeb). Variablen werden verändert, Objekte entfernt usw.
5. Der Befehl wurde umgesetzt und das Programm läuft mit geänderten Agenten-Attributen weiter.
Die Agenten bzw. Entitäten können einfach referenziert werden: Sie werden bei Programmstart in der globalen static Class in einem Array gespeichert, welches als zentrale Registry fungiert. Das Problem ist jetzt, dass ich nicht weiß, wie ich das laufende Programm zu jederzeit unterbrechen kann, um den Befehl anzunehmen.
Könnt Ihr mir da helfen?
Gruß
Moch
Ich entwickle derzeit mal wieder an einem Projekt mit, welches sich Multiagenten-Simulationen im Rahmen von Operations Research bedient. Ziel ist die Entwicklung eines eigenen Frameworks für komplexe soziale Simulationen zur Früherkennung und Beurteilung von möglichen Problemen, wie z.B. Aufstände, Hungersnöte, Massenpaniken, Seuchen usw.
Wir entwickeln hierzu ein bereits bestehendes Framework für Multiagenten-Systeme um die nötigen Bestandteile weiter. Später soll der Entwickler mit dem Framework vergleichsweise "einfach" entsprechende Modelle entwickeln können und sich um die Engine selbst nach Möglichkeit keine Gedanken mehr machen müssen.
Zu unseren Anforderungen gehört auch eine Echtzeitsteuerung der Simulation über eine GUI. Diese soll u.A. Schieberegler enthalten, welche direkt bestimmte Parameter anpasst, aber auch über ein Terminal für den direkten Zugriff auf Agenten haben.
Die Schieberegler lassen sich in meiner Vorstellung vergleichsweise einfach umsetzen. Hier sollen direkt Variablen in einer static class verändert, welche damit automatisch Einfluss auf alles nimmt, was diese Variablen verwendet. Diese Änderung kann einfach zu Beginn jedes Zuges in der Simulation erfolgen und ist somit nicht direkt zeitkritisch.
Mehr Kopfzerbrechen bereitet mir jedoch das Terminal. Dieses soll u.A. direkten Zugriff auf Agenten nehmen, Ihre Attribute ändern oder diese töten.
so soll z.B. die Eingabe "kill 12" die Entität mit der ID 12 töten.
Problem hierbei ist: Diese Änderung muss in Echtzeit und umgehend erfolgen, da sie ggf. nicht auf einen neuen Durchlaufen warten kann.
Hier weiß ich jetzt nicht weiter.
Gibt es die Möglichkeit in Java eine Art bedingte Programmunterbrechnung zu erwirken?
Ich stelle mir das etwa so vor:
1. Das Programm läuft normal ab
2. Der User macht eine Eingabe im Termial (in die GUI integriert) <- Programm läuft normal ab
3. Der User bestätigt den Befehl mit Enter <- das laufende Programm unterbricht
4. Der Befehl wird ausgewertet und umgesetzt (oder im Falle eines falsches Befehls eine Warnung ausgegeb). Variablen werden verändert, Objekte entfernt usw.
5. Der Befehl wurde umgesetzt und das Programm läuft mit geänderten Agenten-Attributen weiter.
Die Agenten bzw. Entitäten können einfach referenziert werden: Sie werden bei Programmstart in der globalen static Class in einem Array gespeichert, welches als zentrale Registry fungiert. Das Problem ist jetzt, dass ich nicht weiß, wie ich das laufende Programm zu jederzeit unterbrechen kann, um den Befehl anzunehmen.
Könnt Ihr mir da helfen?
Gruß
Moch