Skip to content

Intelligente Objekte: Die Zukunft der Simulation

  • AUTHOR
  • C. Dennis Pegden, PhD

Zusammenfassung

In diesem Beitrag wird ein neues Modellierungssystem - Simio - beschrieben, das die Modellerstellung vereinfachen soll, indem es einen Paradigmenwechsel in der Modellierung von der Prozessorientierung zur Objektorientierung fördert. Simio ist ein Simulationsmodellierungsrahmen, der auf intelligenten Objekten basiert. Die intelligenten Objekte werden von Modellierern erstellt und können dann in mehreren Modellierungsprojekten wiederverwendet werden. Obwohl der Schwerpunkt des Simio-Frameworks auf der objektbasierten Modellierung liegt, unterstützt es auch die nahtlose Verwendung mehrerer Modellierungsparadigmen, einschließlich Ereignis-, Prozess-, Objekt- und agentenbasierter Modellierung.

1. Modellierungs-Paradigmen

In den Anfängen der diskreten Ereignissimulation war das vorherrschende Modellierungsparadigma die Ereignisorientierung, die durch Werkzeuge wie Simscript (Markowitz, et .al 1962) und GASP (Pritsker, 1967) umgesetzt wurde. In diesem Modellierungsparadigma wird das System als eine Reihe von momentanen Ereignissen betrachtet, die den Zustand des Systems verändern. Der Modellierer definiert die Ereignisse im System und modelliert die Zustandsänderungen, die beim Auftreten dieser Ereignisse eintreten. Dieser Modellierungsansatz ist sehr flexibel und effizient, stellt aber auch eine relativ abstrakte Darstellung des Systems dar. Aus diesem Grund empfanden viele Menschen die Modellierung mit Hilfe der Ereignisorientierung als schwierig.

In den 80er Jahren verdrängte die Prozessorientierung die Ereignisorientierung als dominierenden Ansatz für die diskrete Ereignissimulation. In der Prozesssicht beschreiben wir die Bewegung passiver Entitäten durch das System als Prozessfluss. Der Prozessfluss wird durch eine Reihe von Prozessschritten (z. B. Erfassen, Verzögern, Freigeben) beschrieben, die die Zustandsänderungen im System modellieren. Dieser Ansatz geht auf die 1960er Jahre mit der Einführung von GPSS (Gordon, 1960) zurück und bot eine natürlichere Methode zur Beschreibung des Systems. Aufgrund vieler praktischer Probleme mit dem ursprünglichen GPSS (z. B. eine ganzzahlige Uhr und langsame Ausführung) wurde es jedoch nicht zum vorherrschenden Ansatz, bis verbesserte Versionen von GPSS (Henriksen, 76) zusammen mit neueren Prozesssprachen wie SLAM (Pegden/Pritsker, 79) und SIMAN (Pegden, 82) in den 80er Jahren weit verbreitet wurden. In den 80er und 90er Jahren entwickelten sich auch die grafische Modellierung und die Animation zu wichtigen Merkmalen der Simulationsmodellierungswerkzeuge. Die grafische Modellerstellung vereinfachte den Prozess der Erstellung von Prozessmodellen, und die grafische Animation verbesserte die Anzeige und Validierung von Simulationsergebnissen dramatisch. Die Einführung von Microsoft Windows ermöglichte die Entwicklung verbesserter grafischer Benutzeroberflächen, und es entstanden eine Reihe neuer grafikbasierter Tools (z. B. ProModel und Witness).

Ein weiterer konzeptioneller Fortschritt in dieser Zeit war die Einführung von hierarchischen Prozessmodellierungswerkzeugen, die das Konzept der domänenspezifischen Prozessbibliotheken unterstützten. Das Grundkonzept besteht darin, den Benutzern die Möglichkeit zu geben, neue Prozessschritte durch die Kombination bestehender Prozessschritte zu erstellen. Das weit verbreitete Arena-Modellierungssystem (Pegden/Davis, 1992) ist ein gutes Beispiel für diese Fähigkeit.

Seit der weit verbreiteten Umstellung auf eine grafikbasierte Prozessorientierung gab es zwar Verfeinerungen und Verbesserungen bei den Werkzeugen, aber keine wirklichen Fortschritte bei den zugrunde liegenden Rahmenbedingungen. Die große Mehrheit der diskreten Ereignismodelle wird nach wie vor mit der gleichen Prozessorientierung erstellt, die in den letzten 25 Jahren weit verbreitet war.

Obwohl sich die Prozessorientierung in der Praxis als sehr effektiv erwiesen hat, bietet die Objektorientierung ein attraktives alternatives Modellierungsparadigma, das das Potenzial hat, natürlicher und einfacher zu sein. Bei der Objektorientierung modellieren wir das System durch die Beschreibung der Objekte, aus denen das System besteht. Zum Beispiel modellieren wir eine Fabrik, indem wir die Arbeiter, Maschinen, Förderbänder, Roboter und andere Objekte beschreiben, aus denen das System besteht. Das Systemverhalten ergibt sich aus der Interaktion dieser Objekte.

Obwohl eine Reihe von Produkten zur Unterstützung der Objektorientierung auf den Markt gekommen sind, haben sich viele Praktiker bisher für die Prozessorientierung entschieden. Ein wichtiger Grund dafür ist, dass das zugrundeliegende Modellierungsparadigma zwar einfacher und weniger abstrakt sein mag, die spezifische Implementierung jedoch schwierig zu erlernen und zu verwenden sein kann (z. B. Programmierung erforderlich) oder langsam in der Ausführung ist. Dies unterscheidet sich nicht von den Herausforderungen, denen sich die Prozessorientierung bei der Ablösung der Ereignisorientierung gegenübersieht. Obwohl das erste Prozessmodellierungstool (GPSS) 1961 eingeführt wurde, dauerte es 25 Jahre, bis die Prozessorientierung so weit entwickelt war, dass Praktiker davon überzeugt werden konnten, den Paradigmenwechsel vorzunehmen. In diesem Beitrag wird Simio beschrieben - ein neues Simulationsmodellierungswerkzeug, das die Objektorientierung leicht anwendbar und effizient ausführbar machen soll. Obwohl Simio eine Reihe innovativer Funktionen enthält, um dieses Ziel zu erreichen, wird sich erst mit der Zeit zeigen, ob dieses Werkzeug die vielen praktischen Probleme überbrückt hat, die gelöst werden müssen, um einen weit verbreiteten Paradigmenwechsel in der Art und Weise, wie Praktiker Modelle erstellen, auszulösen.

Das Tool ist von Grund auf für die Unterstützung des Objektmodellierungsparadigmas konzipiert, unterstützt jedoch auch die nahtlose Verwendung mehrerer Modellierungsparadigmen, einschließlich der Prozess- und Ereignisorientierung. Außerdem unterstützt es sowohl diskrete als auch kontinuierliche Systeme sowie groß angelegte Anwendungen, die auf agentenbasierter Modellierung basieren. Diese Modellierungsparadigmen können innerhalb eines einzigen Modells frei gemischt werden.

2. Das Simio Objekt-Paradigma

Simio ist ein Simulationsmodellierungsrahmen, der auf intelligenten Objekten basiert. Die intelligenten Objekte werden von Modellierern erstellt und können dann in mehreren Modellierungsprojekten wiederverwendet werden. Die Objekte können in Bibliotheken gespeichert und leicht gemeinsam genutzt werden. Modellierungsanfänger ziehen es vielleicht vor, vorgefertigte Objekte aus Bibliotheken zu verwenden, aber das System ist so konzipiert, dass es auch für Modellierungsanfänger einfach ist, ihre eigenen intelligenten Objekte für den Aufbau hierarchischer Modelle zu erstellen.

Ein Objekt kann eine Maschine, ein Roboter, ein Flugzeug, ein Kunde, ein Arzt, ein Panzer, ein Bus, ein Schiff oder jedes andere Objekt sein, das in Ihrem System vorkommt. Ein Modell wird durch die Kombination von Objekten erstellt, die die physischen Komponenten des Systems darstellen. Ein Simio-Modell sieht aus wie das reale System. Die Modelllogik und die Animation werden in einem einzigen Schritt erstellt.

Ein Objekt kann in 3D animiert werden, um den sich ändernden Zustand des Objekts wiederzugeben. Zum Beispiel hebt und senkt ein Gabelstapler seinen Hub, ein Roboter öffnet und schließt seinen Greifer, und ein Kampfpanzer dreht seinen Geschützturm. Das animierte Modell liefert ein bewegtes Bild des Systems im Betrieb.

Die Objekte werden nach den Konzepten der Objektorientierung aufgebaut. Im Gegensatz zu anderen objektorientierten Simulationssystemen ist der Prozess der Objekterstellung jedoch sehr einfach und vollständig grafisch. Es besteht keine Notwendigkeit, Programmiercode zu schreiben, um neue Objekte zu erstellen.

Die Erstellung eines Objekts in Simio ist identisch mit der Erstellung eines Modells - in der Tat gibt es keinen Unterschied zwischen einem Objekt und einem Modell. Dieses Konzept wird als Äquivalenzprinzip bezeichnet und ist von zentraler Bedeutung für das Design von Simio. Wann immer Sie ein Modell bauen, ist es per Definition ein Objekt, das in ein anderes Modell instanziiert werden kann. Wenn Sie zum Beispiel zwei Maschinen und einen Roboter zu einem Modell einer Arbeitszelle kombinieren, ist das Modell der Arbeitszelle selbst ein Objekt, das beliebig oft in anderen Modellen instanziiert werden kann. Die Arbeitszelle ist ein Objekt, genau wie die Maschinen und der Roboter Objekte sind. In Simio gibt es keine Möglichkeit, die Idee, ein Modell zu bauen, von dem Konzept, ein Objekt zu bauen, zu trennen. Jedes Modell, das in Simio gebaut wird, ist automatisch ein Baustein, der für den Bau von Modellen auf höherer Ebene verwendet werden kann.

3. Die objektorientierte Grundlage

Viele beliebte Programmiersprachen wie C++, C# und Java basieren auf den Grundprinzipien der objektorientierten Programmierung (OOP). In diesem Programmierparadigma wird Software als eine Sammlung von zusammenarbeitenden Objekten aufgebaut, die aus Klassen instanziiert werden. Diese Klassen werden nach den Grundprinzipien der Abstraktion, Kapselung, Polymorphie, Vererbung und Komposition entworfen.

Das Abstraktionsprinzip lässt sich als Konzentration auf das Wesentliche zusammenfassen. Das Grundprinzip besteht darin, die Struktur der Klassen so einfach wie möglich zu gestalten.

Das Kapselungsprinzip legt fest, dass nur das Objekt seinen Zustand ändern kann. Die Kapselung schirmt die Implementierung der Objektklasse von der Außenwelt ab.

Polymorphismus bietet eine konsistente Methode für Nachrichten, um Objektaktionen auszulösen. Jede Objektklasse entscheidet, wie sie auf eine bestimmte Nachricht reagieren will.

Vererbung ist ein Schlüsselkonzept, das es ermöglicht, neue Objektklassen von bestehenden Objektklassen abzuleiten: Dies wird manchmal als "is-a"-Beziehung bezeichnet. Dies wird auch als Unterklassenbildung bezeichnet, da wir eine speziellere Klasse eines Objekts erstellen. Die Unterklassenbildung ermöglicht es in der Regel, das Objektverhalten um eine neue Logik zu erweitern und auch zu ändern, indem einige der vorhandenen Logik außer Kraft gesetzt wird.

Die Komposition ermöglicht die Erstellung neuer Objektklassen durch die Kombination bestehender Objektklassen: Dies wird manchmal als "has-a"-Beziehung bezeichnet. Objekte werden zu Bausteinen für die Erstellung von Objekten höherer Ebenen.

Interessanterweise reichen die Wurzeln dieser Ideen bis in die frühen 1960er Jahre zurück, als das Simulationsmodellierungswerkzeug Simula 67 entwickelt wurde. Dieses Modellierungswerkzeug wurde von Kristen Nygaard und Ole-Johan Dahl (1962) vom Norwegischen Rechenzentrum in Oslo entwickelt, um das Verhalten von Schiffen zu modellieren. Sie führten die grundlegenden Konzepte der Erstellung von Objektklassen ein, die ihre eigenen Daten und ihr eigenes Verhalten besitzen und in andere Objekte instanziiert werden können. Dies war die Geburtsstunde der hierarchischen Modellierung und der objektorientierten Programmierung.

Viele Menschen gehen davon aus, dass die Konzepte der objektorientierten Programmierung in der Welt der Programmierung entwickelt wurden; dies war jedoch nicht der Fall. Diese Prinzipien wurden für die Erstellung von Simulationsmodellen entwickelt und dann von der Programmierwelt übernommen.

Obwohl die Simulationswelt die ursprünglichen objektorientierten Konzepte entwickelt hat, ist es ihr bisher nicht gelungen, einen objektorientierten Modellierungsrahmen zu schaffen, der in der Praxis auf breite Zustimmung stößt. Obwohl es eine Reihe von Versuchen gab, einen solchen Rahmen zu schaffen, sind die Praktiker letztendlich größtenteils bei ihrer bewährten Prozessorientierung für die Modellierung geblieben. Einer der Hauptgründe dafür ist, dass es sich bei den meisten bisherigen Versuchen einfach um objektorientierte Programmierbibliotheken handelt, die den Benutzer dazu zwingen, 25 Jahre in der Zeit zurückzugehen und seine Modelle und/oder Objekte erneut in einer Programmiersprache zu programmieren.

4. Das Simio Objekt-Framework

Das Simio-Objekt-Framework basiert auf denselben Grundprinzipien wie objektorientierte Programmiersprachen; diese Prinzipien werden jedoch in einem Modellierungs- und nicht in einem Programmier-Framework angewandt. So hat beispielsweise das Microsoft-Entwicklungsteam, das C# entworfen hat, diese Grundprinzipien bei der Entwicklung dieser Programmiersprache angewandt. Obwohl dieselben Prinzipien auch das Design von Simio bestimmen, ist das Ergebnis keine Programmiersprache, sondern ein grafisches Modellierungssystem. Diese Unterscheidung ist wichtig für das Verständnis des Designs von Simio.

Simio ist nicht einfach ein Simulationsmodellierungswerkzeug, das in einer OOP-Sprache programmiert ist (obwohl es in C# programmiert ist). Ebenso ist es nicht einfach ein Satz von Klassen, die in einer OOP-Sprache wie Java oder C++ verfügbar sind und für die Erstellung von Simulationsmodellen nützlich sind. Simio ist ein grafischer Modellierungsrahmen zur Unterstützung der Konstruktion von Simulationsmodellen, der auf den grundlegenden objektorientierten Prinzipien aufbaut. Wenn Sie zum Beispiel ein Objekt wie eine "Maschine" in Simio erstellen, ermöglicht Ihnen das Prinzip der Vererbung, eine neue Maschinenklasse zu erstellen, die das Basisverhalten einer "Maschine" erbt, aber dieses Verhalten kann geändert (überschrieben) und erweitert werden. Während wir in einer Programmiersprache das Verhalten erweitern oder überschreiben, indem wir Methoden in einer Programmiersprache schreiben, erweitern oder überschreiben wir in Simio das Verhalten, indem wir grafisch definierte Prozessmodelle hinzufügen und überschreiben.

Diese Unterscheidung zwischen objektorientierter Modellierung und objektorientierter Programmierung ist entscheidend. Bei Simio sind die Fähigkeiten, die zum Definieren und Hinzufügen neuer Objekte zum System erforderlich sind, Modellierungsfähigkeiten, nicht Programmierfähigkeiten.

5. Die Anatomie eines Objekts (Modells)

Wenn Sie ein Modell in Simio erstellen, legen Sie eine Objektklasse an, von der mehrere Instanzen erstellt werden können. Dieser Vorgang wird als Instanziierung bezeichnet.

Wenn Sie ein Objekt in ein Modell instanziieren, können Sie Eigenschaften des Objekts angeben, die das Verhalten dieser speziellen Instanz des Objekts bestimmen. Zu den Eigenschaften einer Maschine gehören beispielsweise die Rüst-, Bearbeitungs- und Abrisszeit sowie eine Materialliste und ein Bediener, der während des Rüstvorgangs benötigt wird. Der Ersteller des Objekts entscheidet über die Anzahl und die Bedeutung der Eigenschaften. Die Eigenschaften in Simio sind stark typisiert und können numerische Werte, Boolesche Werte, Strings, Objektreferenzen, Datums- und Zeitangaben usw. darstellen. Da jedes Modell, das Sie erstellen, per Definition ein Objekt ist, haben Sie auch die Möglichkeit, Ihr Modell durch Eigenschaften zu parametrisieren.

Es ist zu beachten, dass die Instanziierung eines Modells nicht dasselbe ist wie das Kopieren oder Klonen des Modells. Wenn ein Modell als Baustein für die Konstruktion anderer Modelle verwendet wird, kann es viele Male in vielen verschiedenen Modellen instanziiert werden. Die Modellinstanz enthält lediglich einen Verweis auf die eine Modelldefinition, die immer wieder verwendet wird. Die Instanz enthält auch die Eigenschaftswerte, da diese für jede Instanz eindeutig sind. Die Modelllogik wird jedoch von allen Instanzen gemeinsam genutzt. Unabhängig davon, wie viele Instanzen erstellt werden, gibt es nur eine Klassendefinition des Objekts, und jede Instanz verweist auf diese eine Definition zurück. Jede Instanz verfügt über die Eigenschaften, die nur für diese Instanz gelten, greift aber auf die Definition zurück, um das zugrunde liegende Verhalten zu erhalten. Wenn das Verhalten in der Definition geändert wird, verwenden alle Instanzen automatisch dieses neue Verhalten.

Zusätzlich zu den Eigenschaften haben Objekte auch Zustände. Zustände sind ebenfalls stark typisiert, werden aber immer auf einen numerischen Wert abgebildet. Zum Beispiel entsprechen die Booleschen Werte true und false den Werten 1 und 0, und eine Aufzählung von Zustandsnamen entspricht der Indexposition (0, 1, ...., N) in der Liste. Ein Zustand ändert sich als Ergebnis der Ausführung der Logik innerhalb des Objekts. Eigenschaften können als Eingaben in ein Objekt betrachtet werden, und Zustände können als Ausgangsreaktionen betrachtet werden, die sich während der Ausführung der Objektlogik ändern. Ein Zustand kann die Anzahl der fertiggestellten Teile, den Status einer Maschine, die aus einer Liste von Zuständen ausgewählt wurde, die Temperatur eines Barrens, der in einem Ofen erhitzt wird, den Ölstand in einem Schiff, das befüllt wird, oder den Füllstand auf einem Förderband darstellen.

Es gibt zwei grundlegende Arten von Zuständen: diskrete und kontinuierliche. Ein diskreter Zustand ist ein Wert, der sich nur zu bestimmten Zeitpunkten ändert (Ankunft eines Kunden, Ausfall einer Maschine usw.) Ein kontinuierlicher Zustand (z. B. Tankfüllstand, Position eines Wagens usw.) hat einen Wert, der sich im Laufe der Zeit ständig ändert.

6. Drei Objekt-Ebenen

Eines der wichtigen und einzigartigen internen Designmerkmale von Simio ist die Verwendung einer dreistufigen Objektstruktur, die ein Objekt in eine Objektdefinition, eine Objektinstanz und eine Objektrealisierung unterteilt. Die Objektdefinition legt das Verhalten des Objekts fest und wird von allen Instanzen des Objekts gemeinsam genutzt. Eine Objektinstanz ist einfach eine Instanz dieses Objekts innerhalb einer übergeordneten Objektdefinition (z. B. wird eine Drehmaschine innerhalb einer Arbeitszellendefinition platziert). Die Objektinstanz definiert die Eigenschaftswerte für jede einzelne Instanz des Objekts, und diese Instanzdaten werden wiederum von allen Objektrealisierungen gemeinsam genutzt.

Die Objektrealisierung wird verwendet, um eine bestimmte Realisierung einer Instanz innerhalb einer erweiterten Modellhierarchie darzustellen. Jedes Mal, wenn beispielsweise eine neue Arbeitszelleninstanz in einer übergeordneten Objektdefinition (z. B. einer Produktionslinie) platziert wird, entsteht die Notwendigkeit einer neuen Realisierung für die eingebettete Drehmaschine. Obwohl die Arbeitszellendefinition aus einer einzigen Drehmaschineninstanz aufgebaut ist, kann diese einzelne Drehmaschineninstanz nicht die Statuswerte enthalten, die mehreren Drehmaschinenrealisierungen entsprechen, die aus mehreren Instanzen der Arbeitszelle resultieren. Die Objektrealisierungen bieten den Mechanismus, um diese hierarchischen Zustandsinformationen in einer sehr kompakten Form zu speichern. Die Objektrealisierungen werden nur während der Modellausführung erstellt und enthalten nur die Modellzustandsvariablen und einen Verweis auf ihre übergeordnete Objektinstanz. Dies ist eine hocheffiziente Struktur, die für groß angelegte Anwendungen wie agentenbasierte Modelle, die viele Tausende von Objektrealisierungen haben können, entscheidend ist.

7. Drei Wege zur Erstellung von Objektdefinitionen

Das vorherige Beispiel, in dem wir eine neue Objektdefinition (Arbeitszelle) durch die Kombination anderer Objekte (Maschinen und ein Roboter) definiert haben, ist ein Beispiel dafür, wie wir in Simio Objektdefinitionen erstellen können. Diese Art von Objekt wird als zusammengesetztes Objekt bezeichnet, weil wir dieses Objekt durch die Kombination von zwei oder mehr Komponentenobjekten erstellen. Dieser Ansatz zur Erstellung von Objekten ist vollständig hierarchisch, d. h. ein zusammengesetztes Objekt kann als Komponentenobjekt für die Erstellung von Objekten höherer Ebenen verwendet werden. Dies ist nur eine Möglichkeit, Objekte in Simio zu erstellen, es gibt noch zwei weitere wichtige Methoden.

Die grundlegendste Methode zur Erstellung von Objekten in Simio besteht darin, die logischen Prozesse zu definieren, die ihren Zustand als Reaktion auf Ereignisse ändern. Zum Beispiel kann ein Maschinenobjekt durch die Definition der Prozesse erstellt werden, die den Maschinenzustand ändern, wenn Ereignisse wie die Ankunft eines Teils, der Ausfall eines Werkzeugs, usw. auftreten. Diese Art der Modellierung ähnelt der Prozessmodellierung in traditionellen Modellierungssystemen wie Arena oder GPSS, die heute verwendet werden. Ein Objekt, das durch die Beschreibung seiner nativen Prozesse definiert ist, wird als Basisobjekt bezeichnet, das wiederum als Komponentenobjekt für die Erstellung von Objekten auf höherer Ebene verwendet werden kann.

Die letzte Methode zur Erstellung von Objekten in Simio basiert auf dem Konzept der Vererbung. In diesem Fall erstellen wir ein Objekt aus einem bestehenden Objekt, indem wir einen oder mehrere Prozesse innerhalb des Objekts überschreiben (d.h. ersetzen) oder zusätzliche Prozesse hinzufügen, um sein Verhalten zu erweitern. Mit anderen Worten: Wir beginnen mit einem Objekt, das fast unseren Vorstellungen entspricht, und ändern und erweitern es dann nach Bedarf, damit es unseren eigenen Zwecken dient. So können wir zum Beispiel aus einem allgemeinen Maschinenobjekt ein spezialisiertes Bohrerobjekt erstellen, indem wir zusätzliche Prozesse hinzufügen, um den Ausfall und den Austausch des Bohrers zu behandeln. Ein Objekt, das auf diese Weise erstellt wird, wird als abgeleitetes Objekt bezeichnet, da es von einem bestehenden Objekt abgeleitet ist.

Unabhängig davon, welche Methode zur Erstellung eines Objekts verwendet wird, wird es nach der Erstellung auf genau dieselbe Weise verwendet. Ein Objekt kann beliebig oft in einem Modell instanziiert werden. Sie wählen einfach das gewünschte Objekt aus und platzieren es (instanziieren es) in Ihrem Modell

8. Objektklasse

Es gibt sechs grundlegende Objektklassen in Simio. Diese sechs Objektklassen bieten einen Ausgangspunkt für die Erstellung intelligenter Objekte in Simio. Standardmäßig verfügen alle sechs Objektklassen über sehr wenig eigene Intelligenz, aber alle haben die Fähigkeit, Intelligenz zu erlangen. Sie erstellen intelligente Versionen dieser Objekte, indem Sie ihr Verhalten als eine Sammlung von ereignisgesteuerten Prozessen modellieren.

Die erste Klasse ist das feste Objekt. Dieses Objekt hat eine feste Position im Modell und wird verwendet, um die Dinge in Ihrem System darzustellen, die sich nicht von einem Ort zum anderen bewegen. Feste Objekte werden verwendet, um stationäre Anlagen wie Maschinen, Tankstellen usw. darzustellen.

Agenten sind Objekte, die sich frei im dreidimensionalen Raum bewegen können. Agenten werden in der Regel auch für die Entwicklung agentenbasierter Modelle verwendet. Diese Modellierungssicht ist nützlich für die Untersuchung von Systemen, die aus vielen unabhängig voneinander agierenden intelligenten Objekten bestehen, die miteinander interagieren und so das Verhalten des Gesamtsystems erzeugen. Beispiele für Anwendungen sind die Marktakzeptanz eines neuen Produkts oder einer neuen Dienstleistung oder das Populationswachstum konkurrierender Arten in einer Umgebung.

Eine Entität ist eine Unterklasse der Klasse Agent und hat ein wichtiges zusätzliches Verhalten. Entitäten können sich im System von Objekt zu Objekt über ein Netz von Verbindungen und Knoten bewegen. Beispiele für Entitäten sind Kunden in einem Dienstleistungssystem, Werkstücke in einem Fertigungssystem, Schiffe in einem Transportsystem, Panzer in einem Kampfsystem sowie Ärzte, Krankenschwestern und Patienten in einem Gesundheitssystem.

Beachten Sie, dass in traditionellen Modellierungssystemen wie GPSS oder Arena die Entitäten passiv sind und von den Modellprozessen beeinflusst werden. In Simio hingegen können die Entitäten über Intelligenz verfügen und ihr eigenes Verhalten steuern.

Link- und Node-Objekte werden verwendet, um Netzwerke aufzubauen, über die Entitäten fließen können. Ein Link definiert einen Pfad für die Bewegung von Entitäten zwischen Objekten. Ein Knoten definiert einen Start- oder Endpunkt für einen Link. Links und Knoten können zu komplexen Netzwerken kombiniert werden. Obwohl die Basisverbindung nur wenig Intelligenz besitzt, können wir ihr Verhalten hinzufügen, damit sie einen uneingeschränkten Fluss, einen überlasteten Verkehrsfluss oder komplexe Materialhandhabungssysteme wie Stauförderer oder Power-and-Free-Systeme modellieren kann.

Die letzte Objektklasse ist der Transporter, eine Unterklasse der Entitätsklasse. Ein Transporter ist eine Entität, die die zusätzliche Fähigkeit besitzt, eine oder mehrere andere Entitäten aufzunehmen, zu befördern und abzusetzen. Standardmäßig haben Transporter keines dieser Verhaltensweisen, aber durch Hinzufügen von Modelllogik zu dieser Klasse können wir eine breite Palette von Transporter-Verhaltensweisen erstellen. Ein Transporter kann ein Taxi, einen Bus, ein AGV, einen U-Bahn-Wagen, einen Gabelstapler oder jedes andere Objekt modellieren, das in der Lage ist, andere Objekte von einem Ort zu einem anderen zu transportieren.

Ein wesentliches Merkmal von Simio ist die Möglichkeit, aus diesen sechs Basisklassen ein breites Spektrum an Objektverhalten zu erstellen. Das Simio-Modellierungsframework ist anwendungsneutral - d.h. diese sechs Basisklassen sind nicht spezifisch für Fertigung, Dienstleistungssysteme, Gesundheitswesen, Militär usw.. Es ist jedoch einfach, anwendungsspezifische Bibliotheken zu erstellen, die aus intelligenten Objekten dieser sechs Klassen bestehen und für bestimmte Anwendungen konzipiert sind. Es ist zum Beispiel relativ einfach, ein Objekt (in diesem Fall eine Verknüpfung) zu erstellen, das ein komplexes Stauförderband für den Einsatz in Fertigungsanwendungen darstellt. Die Entwurfsphilosophie von Simio sieht vor, dass diese Art von domänenspezifischer Logik in die Objekte gehört, die von den Benutzern erstellt werden, und nicht in das Kernsystem programmiert wird.

9. Erstellen von intelligenten Objekten mit Prozessen

Die Modellierung in Simio beginnt mit Basisobjekten - sie sind die Grundlage, auf der Objekte höherer Ebenen aufgebaut werden. Ein Basisobjekt in Simio ist ein festes Objekt, ein Agent, eine Entität, ein Link, ein Knoten oder ein Transporter, dem durch einen oder mehrere Prozesse Intelligenz hinzugefügt wird. Prozesse verleihen einem Objekt seine Intelligenz, indem sie die Logik definieren, die als Reaktion auf Ereignisse ausgeführt wird.

Jeder Prozess ist eine Abfolge von Prozessschritten, die durch ein Ereignis ausgelöst und von einem Token ausgeführt wird.Ein Prozess beginnt immer mit einem einzigen Begin-Schritt und endet mit einem einzigen End-Schritt. Ein Token wird durch den Begin-Schritt freigegeben und ist einfach ein Ausführungsstrang (ähnlich den Entitäten in Arena). Ein Token kann Eigenschaften (Eingabeparameter) und Zustände (zur Laufzeit änderbare Werte) haben, die die Ausführung der Prozessschritte steuern. Sie können Ihre eigenen Klassen von Token definieren, die verschiedene Kombinationen von Eigenschaften und Zuständen haben.

Die Modellierungskraft von Simio ergibt sich aus den Ereignissen, die automatisch für die sechs grundlegenden Objektklassen ausgelöst werden, sowie aus den Prozessschritten, die zur Modellierung von Zustandsänderungen als Reaktion auf diese Ereignisse zur Verfügung stehen. Um die Kunst des Aufbaus intelligenter Objekte vollständig zu beherrschen, muss man die Ereignisse und die Sammlung der verfügbaren Prozessschritte erlernen, zusammen mit dem Wissen und der Erfahrung, wie man diese Schritte kombiniert, um komplexe Logik darzustellen.

Jeder Schritt in Simio modelliert einen einfachen Prozess, wie z.B. das Halten des Tokens für eine Zeitverzögerung, die Beschlagnahme/Freigabe einer Ressource, das Warten auf das Eintreten eines Ereignisses, die Zuweisung eines neuen Wertes zu einem Zustand oder die Entscheidung zwischen alternativen Flusspfaden. Einige Schritte (z. B. Delay) sind Allzweckschritte, die bei der Modellierung von Objekten, Verbindungen, Entitäten, Transportern, Agenten und Gruppen nützlich sind. Andere Schritte sind nur für bestimmte Objekte nützlich. Zum Beispiel sind die Schritte Pickup und Dropoff nur für das Hinzufügen von Intelligenz zu Transportern nützlich und die Schritte Engage und Disengage sind nur für das Hinzufügen von Intelligenz zu Links nützlich.

Jede Objektklasse hat ihren eigenen Satz von Ereignissen. Eine Verknüpfung bietet beispielsweise Ereignisse, die ausgelöst werden, wenn Entitäten die Verknüpfung betreten und verlassen, vollständig in der Verknüpfung aufgehen, mit anderen Entitäten, die sich auf der Verknüpfung befinden, kollidieren oder sich von ihnen trennen, sich innerhalb eines bestimmten Bereichs einer anderen Entität bewegen usw. Durch die Bereitstellung einer Modelllogik, die auf diese Ereignisse reagiert, können wir die Bewegung von Entitäten über die Verbindung vollständig steuern. Um beispielsweise eine Akkumulationslogik zum Link hinzuzufügen, schreiben wir einfach einen kleinen Prozess, der ausgelöst wird, wenn eine Entität mit der Entität kollidiert, der sie folgt, und der die Geschwindigkeit der Entität neu zuordnet, damit sie der Geschwindigkeit der Entität entspricht, der sie folgt.

Die Prozessschritte, die verwendet werden, um die zugrunde liegende Logik für ein Objekt zu definieren, sind zustandslos - d. h. sie haben Eigenschaften (Eingabeparameter), aber keine Zustände (Ausgabereaktionen). Dies ist wichtig, weil dies bedeutet, dass eine einzige Kopie des Prozesses von der Objektklassendefinition gehalten und von einer beliebigen Anzahl von Objektinstanzen gemeinsam genutzt werden kann. Wenn die Prozesslogik geändert wird, wird diese Tatsache automatisch von allen Instanzen des Objekts übernommen.

Die Zustände für eine Objektinstanz werden in Elementen gehalten. Elemente definieren die dynamischen Komponenten eines Objekts und können sowohl Eigenschaften (Eingabeparameter) als auch Zustände (zur Laufzeit änderbare Werte) haben. Innerhalb eines Objekts können die Token Schritte ausführen, die die Zustände der Elemente, die zum Objekt gehören, verändern.

Ein Beispiel für ein Element ist die Station, die einen Ort innerhalb eines Objekts definiert. Stationen werden auch verwendet, um Eingangs- und Ausgangspunkte in und aus einem Objekt zu definieren. Entitäten können in und aus Stationen transferiert werden (mit dem Schritt Transfer), und eine Station führt eine Warteschlange von Entitäten, die sich derzeit in der Station befinden, sowie von Entitäten, die auf einen Transfer in die Station warten. Eine Station hat eine Kapazität, die die Anzahl der Transfers in eine Station begrenzt. Daher kann eine Entität, die über eine Verbindung zu einem Objekt kommt, die Verbindung nur dann verlassen und das Objekt betreten, wenn die Eingangsstation für das Objekt über freie Kapazitäten verfügt.

10. Terminierung mit endlicher Kapazität

Obwohl die Simulation traditionell auf das Konstruktionsproblem angewandt wird, kann sie auch auf betrieblicher Basis zur Erstellung von Produktionsplänen für die Fabrikhalle eingesetzt werden. Wenn sie in diesem Modus verwendet wird, ist die Simulation ein Finite Capacity Scheduler (FCS) und bietet eine Alternative zu anderen FCS-Methoden wie Optimierungsalgorithmen und Job-at-atime-Sequencer. Der simulationsbasierte FCS hat jedoch eine Reihe wichtiger Vorteile (z. B. Ausführungsgeschwindigkeit und flexible Planungslogik), die ihn zu einer leistungsstarken Lösung für Planungsanwendungen machen

Die Simulation bietet eine einfache und dennoch flexible Methode zur Erstellung eines Plans mit endlicher Kapazität für die Fabrik. Der grundlegende Ansatz bei der simulationsgestützten Terminierung besteht darin, das Fabrikmodell mit dem Ausgangszustand der Fabrik und der Menge der geplanten zu produzierenden Aufträge auszuführen. Entscheidungsregeln werden in das Modell integriert, um Entscheidungen über die Auftragsauswahl, die Ressourcenauswahl und die Routenplanung zu treffen. Die Simulation konstruiert einen Zeitplan, indem sie den Arbeitsfluss durch die Anlage simuliert und "intelligente" Entscheidungen auf der Grundlage der festgelegten Planungsregeln trifft. Die Simulationsergebnisse werden in der Regel als Aufträge angezeigt, die in ein interaktives Gantt-Diagramm geladen werden, das vom Benutzer weiter bearbeitet werden kann. Es gibt eine große Anzahl von Regeln, die innerhalb eines Simulationsmodells angewendet werden können, um verschiedene Arten von Plänen zu erstellen, die sich auf Maßnahmen wie die Maximierung des Durchsatzes, die Aufrechterhaltung einer hohen Auslastung an einem Engpass, die Minimierung von Umstellungen oder die Einhaltung bestimmter Fälligkeitstermine konzentrieren.

Aufgrund der besonderen Anforderungen von Terminplanungsanwendungen (z. B. die Notwendigkeit spezieller Entscheidungsregeln und die Notwendigkeit, die Ergebnisse in Form eines interaktiven Gantt-Diagramms anzuzeigen) wurden für simulationsbasierte Terminplanungsanwendungen in der Regel spezielle Simulatoren verwendet, die speziell für diesen Anwendungsbereich entwickelt wurden. Das Problem bei diesem Ansatz ist, dass die spezialisierten Simulatoren über eingebaute, datengesteuerte Fabrikmodelle verfügen, die nicht verändert oder an die Anwendung angepasst werden können. In vielen Fällen handelt es sich bei diesem eingebauten Modell um eine übermäßig vereinfachte Sicht auf die Komplexität der Produktion, was den Anwendungsbereich dieser Werkzeuge stark einschränkt. Einige Produktionsprozesse können durch dieses feste Modell angemessen dargestellt werden, viele andere jedoch nicht.

Simio verfolgt einen anderen Ansatz, indem es die Definition des Fabrikmodells unter Nutzung der gesamten Allzweckmodellierungsleistung des Werkzeugs ermöglicht. Somit ist die Bandbreite der Anwendungen nicht mehr durch ein fest eingebautes Modell eingeschränkt, das nicht zwischen den Anwendungen geändert werden kann. Die Komplexität des Produktionsprozesses kann durch das vom Benutzer erstellte Simio-Modell vollständig erfasst werden. Dies schließt nicht nur die Logik innerhalb jedes Arbeitsplatzes ein, sondern auch das Materialhandling, das erforderlich ist, um Aufträge zwischen den Arbeitsplätzen zu bewegen.

Die speziellen Anforderungen von FCS-Anwendungen werden durch die Integration von Funktionen in Simio berücksichtigt, die speziell auf die Bedürfnisse von FCS zugeschnitten sind. Zu diesen Funktionen gehören die Unterstützung von extern definierten Auftragsdatensätzen sowie eine sehr flexible Modellierung von Ressourcen und Materialien. Obwohl diese Funktionen speziell entwickelt wurden, um die volle Modellierungsleistung von Simio für FCS-Anwendungen freizusetzen, sind sie auch für allgemeine Modellierungsanwendungen nützlich.

Ein Simio-Job-Datensatz ermöglicht die externe Definition einer Liste von Jobs zur Verarbeitung durch das Simulationsmodell. Die Jobs werden in einem Datensatz definiert, der eine oder mehrere Tabellen enthält, wobei die Beziehungen zwischen den Tabellenspalten definiert sind. Das spezifische Schema für die Speicherung der Auftragsdaten ist beliebig und kann vom Benutzer so definiert werden, dass es dem Datenschema für die Fertigungsdaten (z. B. eines ERP-Systems) entspricht. Zu den Auftragsdaten gehören typischerweise Freigabe- und Fälligkeitsdatum, Arbeitspläne, Rüst- und Bearbeitungszeiten, Materialanforderungen sowie andere Eigenschaften, die für das jeweilige System relevant sind. Die Objekte in Simio können direkt auf die im Auftragsdatensatz angegebenen Werte (z.B. Bearbeitungszeit) verweisen, ohne das Schema zu kennen, das zur Speicherung der Daten implementiert wurde.

Jedes Objekt in Simio kann als kapazitive Ressource dienen und sein eigenes unabhängiges Verhalten haben. Die Ressourcen können aus einer Liste ausgewählt werden, die auf flexiblen Regeln basiert, wie z.B. minimale Umschaltzeit oder längste Leerlaufzeit. . Ressourcen unterstützen auch sehr flexible Regeln (frühestes Fälligkeitsdatum, geringster verbleibender Schlupf, kritisches Verhältnis usw.) für die Auswahl zwischen konkurrierenden Jobs, die darauf warten, die Ressource zu belegen. Schließlich kann die Auslastung der Ressourcen in einem interaktiven Gantt-Diagramm angezeigt werden.

Das Element Materialien in Simio bietet direkte Unterstützung für die Modellierung von Dingen, die während der Ausführung des Modells verbraucht und produziert werden können. Materialien können auch hierarchisch definiert werden, um eine traditionelle Stückliste für Fertigungsanwendungen zu modellieren. So kann ein Fertigungsschritt als der Verbrauch einer bestimmten Liste von Materialien innerhalb der hierarchischen Stückliste modelliert werden.

11. Zusammenfassung

Simio ist ein neuer Modellierungsrahmen, der auf den Grundprinzipien der objektorientierten Modellierung basiert. Es ist in folgender Hinsicht einzigartig:

  1. Das Simio-Framework ist ein grafisches, objektorientiertes Modellierungsframework und nicht einfach nur ein Satz von Klassen in einer objektorientierten Programmiersprache, die für die Simulationsmodellierung nützlich sind. Das grafische Modellierungsframework von Simio unterstützt vollständig die Kernprinzipien der objektorientierten Modellierung, ohne dass Programmierkenntnisse erforderlich sind, um dem System neue Objekte hinzuzufügen.
  2. Das Simio-Framework ist domänenneutral und ermöglicht die Erstellung von Objekten, die viele verschiedene Anwendungsbereiche unterstützen. Die Prozessmodellierungsfunktionen in Simio ermöglichen es, neue Objekte mit komplexem Verhalten zu erstellen.
  3. Das Simio-Framework unterstützt mehrere Modellierungsparadigmen. Das Framework unterstützt die Modellierung sowohl von diskreten als auch von kontinuierlichen Systemen und unterstützt eine Ereignis-, Prozess-, Objekt- und Agentenmodellierungssicht.
  4. Das Simio-Framework bietet spezielle Funktionen zur direkten Unterstützung von Anwendungen in den Bereichen Emulation und Finite Capacity Scheduling, die die allgemeinen Modellierungsfähigkeiten von Simio voll ausschöpfen.

Referenzen:

  • Gordon, Geoffrey, 1960 Oktober 25. A general purpose systems simulator. (Unveröffentlichtes Handbuch.) White Plains, N.Y.: IBM. Corp. ASDD Commercial Dept.
  • Henriksen, J. O. 1976. Building a better GPSS: a 3:1 enhancement. In Proceedings of the 1975 Winter Simulation Conference, 465-469. New Jersey: AFIPS Press
  • Markowitz, H., Hausner, B., und Karr, H. SIMSCRIPT: A simulation programming language, Prentice Hall, Englewood Cliffs, N. J. 1962
  • Nygaard, K. und O-J. Dahl, . SIMULA -An Extension of ALGOL to the Description of Discrete-Event Networks, vorgestellt auf der Second International Conference on Information Processing (1962)
  • Pegden, C. D. und A. A. B. Pritsker (1979). SLAM: Simulation Language for Alternatives Modeling. Simulation, Vol. 33, Nr. 5.
  • Pegden, C. D. (1982). Einführung in SIMAN. Systems Modeling Corporation.
  • Pegden, C. D. und D. A. Davis (1992) Arena: a SIMAN/Cinema-based Hierarchical Modeling System; In Proceedings of the 1975 Winter Simulation Conference 390-399
  • Pritsker, A. A. B. (1967). GASP H User's Manual. Arizona State University.