DESMO-J ist ein sehr flexibel verwendbares Rahmenwerk für ereignis-diskrete Simulation. Es bietet leicht zugänglich die grundlegende Infrastruktur, um Simulations-Modelle und -Experimente für beliebige Anwendungsdomänen zu erstellen. Besonders im Logistik-Bereich ist die ereignis-diskrete Simulation eine etablierte Analysemethode, aber auch zur Untersuchung von Produktionssystemen oder Geschäftsprozessen bietet sie sich an.

Was mögliche Ziele der Simulation sind, habe ich an anderer Stelle schon detailliert erläutert. Im Allgemeinen geht es um einen Strategievergleich, z.B. den Vergleich eines Ist-Zustandes mit den Auswirkungen einer Maßnahme. Dazu werden verschiedene Kennzahlen untersucht, z.B. Kosten, Auslastung oder Zeiten. Die Simulation findet dabei nicht selbst optimale Maßnahmen um ein System zu verbessern. Der kreative Teil des Lösungsprozesses verbleibt stets beim Menschen. Aber mit Hilfe der Simulation können wir unsere Überlegungen überprüfen und absichern, bevor wir Investitionsentscheidungen treffen.

DESMO-J wird sehr vielseitig eingesetzt, sowohl in der Wirtschaft als auch in der Wissenschaft. Wissenschaftler neigen natürlich dazu, Ihre Studien auch zu veröffentlichen, und so offenbart eine Suche bei scholar.google.com die vielseitige Verwendung von DESMO-J. Alleine an der Universität Hamburg finden sich Tests von Steuerungssoftware für Containerterminals, Absicherung von Investitionsentscheidungen für die Produktion von Halbleitern, Boarding-Strategien für Flugzeugen in unterschiedlichen Kulturkreisen oder ein Strategievergleich zur Auftragsvergabe von Fahrradkurierdiensten.

Mit DESMO-J lassen sich für jede Branche schnell die relevanten Modellbausteine entwickeln, um wissenschaftlich fundierte Studien durchzuführen. Die wichtigste Verantwortung für den Anwender ist, klar zu definieren, was dieser Untersuchungsgegenstand und die zu untersuchende Fragestellung ist und das fällt mit DESMO-J sehr leicht.

DESMO-J bietet eine Simulations-Engine, welche die grundlegenden Werkzeuge für ein Simulationsexperiment mitbringt. Dazu gehört eine “Simulationsuhr”, welche die Zeitabschnitte in denen in der Simulation eh nichts passiert ganz effizient überspringt. Auf einer “Ereignisliste” kann vorgemerkt werden, wann das nächste mal etwas passieren wird. Das alles sind “Black-Box”-Klassen, deren Quellcode der Anwender zwar einsehen kann, aber nicht zu ändern braucht.

Hinzu kommen ein paar abstrakte “White-Box”-Klassen, wie Entitäten (Objekte mit Zuständen, z.B. ein “LKW”), Ereignisse (verändern Zustände, z.B. “LKW fährt los”) und Prozesse (kann den Lebenszyklus z,B, eines LKW abbilden). Diese Klassen muss der Entwickler für sein Simulationsmodell implementieren.

Trennung der Modellelemente und der Experiment-Infrastruktur

Der Modellierer muss zu Beginn den Untersuchungsgegenstand und die zu untersuchende Fragestellung klar defnieren. Hierauf aufbauend werden dann alle relevanten Entitäten (z.B. eine Menge von LKWs) mit samt derjenigen Attribute erfasst (z.B. Aufenthaltsort, Kapazität und aktuelle Ladung), die im relevanten Zusammenhang mit der Fragestellung stehen (z.B. Strategievergleich für das Routing der Paketsendungen).

Im nächsten Schritt müssen Ereignisse definiert werden. Diese beinhalten Sammlungen von Zustandsübergangen an verschiedenen der vorab definierten Objekte jeweils zu einem bestimmten Zeitpunkt in der Simulation. Diese Zustandsübergänge können an Bedingungen geknüpft sein. Klingt abstrakt, ein Beispiel macht es einfacher: Das Ereignis “LKW Ankunft” prüft, ob eine Entladestation frei ist. Wenn die Entladestation frei ist, beginnt es das Entladen des LKW (Ort des LKW: Entladestation), ansonsten wird er in eine Warteschlange eingereigt (Ort des LKW: Warteschlange). Wenn der LKW in der Entladestation ist, beginnt also das Entladen des LKW. Dieser Vorgang verbraucht Zeit. Für diesen Zweck haben wir unsere Entladestation mit einer stochastischen Verteilung versehen, die uns sagt, für welchen Zeitpunkt wie das Ereignis “Entladen beendet” auf die Ereignisliste setzen sollen.

Die Verwendung von stochastischen Verteilungen ermöglicht die Abbildung von natürlichen Schwankungen bei der Bearbeitung von Aktivitäten. Das beeinflusst die Bildung von Stauungen. Wenn wir das abbilden, werden unsre Simulationsexperimente sehr viel realistischer. Das wir diese Daten für ein Simulationsexperiment erstmal erfassen müssen, stellt häufig die größte Hürde für Simulationsstudien da. Doch sollte man hier nicht zu früh aufgeben. Wenn man intensiv genug sucht, findet man doch noch einen Mitarbeiter der einem weiter helfen kann, ggf. durch Schätzungen. Wie wichtig die Genauigkeit eines Parameters für eine Studie ist, lässt sich übrigens auch messen.

DESMO-J wurde am Fachbereich Informatik der Universität Hamburg in der Arbeitsgruppe von Prof. Dr.-Ing. Bernd Page entwickelt. Tim Lechler lieferte die erste lauffähige Version von DESMO-J bereits im August 1999. Seitdem haben zahlreiche Doktoranden Ihre Beiträge in die Weiterentwicklung geliefert. Darunter auch ich selbst. Auch besonders gute Studenten haben wir in unseren Projekten einbezogen.

DESMO-J ist Open-Source und steht unter der Apache License 2.0, d.h. man darf den Quellcode nicht nur einsehen. sondern auch beliebig für sich selbst erweitern um es z.B. in kommerzielle Produkte einzubauen. Das haben auch zahlreiche Firmen gemacht, so wurden Teile von IYOPRO gefunden in Tibco Business Studio, Borland Together, eClarus Business Process Modeler for SOA Architects und natürlich in IYOPRO – in letzteres habe ich es selbst eingebaut.

Der Hauptentwicklungszweig von DESMO-J beruht auf Java. Es gab aber auch erfolgreiche Portierungen. Meist wurden diese für bestimmte Projekte angefertigt, dabei wurde weitgehend automatisiert portiert. Aktuell scheint eine vollendete Portierung nach C#/.NET besonders spannend. Die wird in der kommerziellen BMN-Suite IYOPRO verwendet. Weitere Portierungen werden sicher weiterhin angegangen. Warum z.B. nicht mal nach Javascript?

Die Erweiterbarkeit von DESMO-J ist noch herauszustellender Aspekt. Da es sich technisch um eine Programmier-Bibliothek handelt, wird jeder Modellierer fokussiert auf sein Ziel erstmal “Erweiterungen” vornehmen, in dem er die notwendigen Entitäten implementiert. Häufig können diese Entitäten dann aber für verschiedene Studien wiederverwendet werden. Wer sich erstmal Klassen für alle relevanten Objekte auf einem Containter-Terminal mit samt ihrer Eigenschaften und ihres Verhaltens angelegt hat, kann diese dann für verschiedene Terminal-Layouts und Studien wiederverwenden. Er besitzt dann eine eigene Containterterminal-Bibliothek.

Aber auch Erweiterungen rein technischer Art wurden schon häufig vorgenommen. So wurden beispielsweise Animations-Komponenten entwickelt, die “Post-Process”, d.h. nach einem Simulationslauf, diesen in 2d oder 3d visualiseren können. Zu betonen ist hier, dass solch eine Animation immer nur der besseren Kommunikation des Simulationsmodells dienen kann, zum Beispiel wollen Sie die eventuell im Rahmen einer Präsentation nutzen. Diese Animationen taugen wenig, um Rückschlüsse aus dem Experiment zu ziehen, da wir ja immer nur einen Ausschnitt aus den zahlreihen Simulationsexperimenten betrachten und was wir dort sehen, ist doch ziemlich dem Zufall überlassen.

Zur fundierten Bewertung der Ergebnisse benötigen wir aggregierte Ergebnisse und das sind Statistiken: Blanke Zahlen aufbereitet in Diagrammen. Die Länge von Warteschlangen wird uns in DESMO-J automatisch ausgegeben. Wenn wir eigene Kennzahlen zur Untersuchung bestimmen wollen, müssen wir in DESMO-J nur kurz deklarieren, dass wir sie brauchen.

Mein Fazit ist: DESMO-J ist ein streng wissenschaftlich aufgebautes Simulations-Framework, das sehr schnell zu verstehen ist und sich mit den grundlegenden Kenntnissen in der objektorientierten Programmierung (OOP) auch leicht anwenden lässt. Dabei wird der Modellierer automatisch gezwungen, sich über jedes Modellelement genau die notwendigen Gedanken zu machen. Effizienter geht es kaum.