Netzwerkmodelle

Ein Netzwerkmodell umfasst Atommodelle und andere Netzwerkmodelle, die miteinander verbunden sind. Netzwerkmodelle können Komponenten anderer Netzwerkmodelle sein, wodurch die Konstruktion von Multi-Level-Systemen. Im Gegensatz zu Atommodellen, Netzwerkmodelle definieren nicht direkt neues dynamisches Verhalten. Die Dynamik eines Netzwerkmodells werden durch die Dynamik ihrer Bestandteile sowie deren Wechselwirkungen bestimmt. Atommodelle definieren grundlegende Verhaltensweisen; Netzwerkmodelle definieren Struktur.







Netzwerkmodelle werden von der Netzwerk-Klasse abgeleitet. Diese Klasse hat zwei virtuelle Methoden: Route und getComponents. Die Route-Methode implementiert Verbindungen zwischen den Komponenten des Netzwerks und zwischen diesen Komponenten und der Ein- und Ausgängen des Netzwerks selbst. Die getComponents Verfahren stellt den Satz von Komponenten, die das Netzwerk bilden.

Die Route-Methode

Die Route Methode realisiert drei Arten von Verbindungen. Die erste sind Verbindungen zwischen den Komponenten des Netzes. Die zweite sind Verbindungen aus dem Netzwerk die Eingänge an die Eingänge der Komponentenmodelle. Die dritte sind Verbindungen von den Komponenten-Ausgänge mit den Ausgängen des Netzes. Die Signatur der Route-Methode ist

Der Wert Argument ist, das Objekt zu routen, ist das Modell, das Netzwerk oder Argument Atommodell, das die Quelle des Wertes Objekts ist, und das R-Argument ist ein Beutel mit Modellen gefüllt werden, die den Wert Objekt als Eingabe empfangen sollten. Jedes Ziel wird durch ein Ereignisobjekt beschrieben, dass zwei Stücke von Information trägt: ein Zeiger auf das Modell, das das Ziel und die Aufgabe ist es, zu diesem Ziel geliefert werden. Der Simulator verwendet die Ereignisobjekte in einem von drei Arten auf die Beziehung zwischen der Quelle des Objekts und seinem Ziel abhängig. Diese Verwendungen sind
  1. Wenn die Quelle eine Komponente des Netzwerks ist und das Ziel ist das Netzwerk selbst, dann wird der Wert ein Ausgangssignal von dem Netzwerk.
  2. Wenn die Quelle das Netzwerk ist und das Ziel ist eine Komponente des Netzes, dann wird der Wert ein Eingang zu dieser Komponente.
  3. Wenn die Quelle und das Ziel beiden Komponenten des Netzwerks sind, dann wird der Wert ein Eingang zu dem Ziel.
Jede andere Beziehung zwischen der Quelle und dem Ziel ist illegal und bewirkt, dass der Simulator eine Ausnahme zu erhöhen.

Abbildung: Zwei miteinander verbundene Atom Komponenten in einem einzigen Netzwerk.

Netzwerkmodelle

Netzwerkmodelle

Figur: Ein Netzwerk mit externem Eingang, externem Ausgang und interner Kopplung.

Netzwerkmodelle

Obwohl sie nicht oben gezeigt, wird die Route-Methode erlaubt, den Wert Objekt zu ändern, bevor es an ein Ziel zu senden. Dies kann in einigen Fällen nützlich sein.

Das Verfahren getComponents

Figur: Illegal Kopplung in einem Netzwerkmodell.

Netzwerkmodelle

Es gibt keine speziellen Regeln für hierarchische Modelle simuliert. Der Simulator hält die gesamte Sammlung von Atommodellen, wenn die nächste Ereigniszeit Bestimmen, Ausgabe von Atommodellen werden in ihre atomaren Zielen geroutet rekursiv, und die Zustandsübergänge und die Garbage Collection sind über den gesamten Satz von aktiven Atomkomponenten durchgeführt. Hierarchien von Netzwerkmodellen sind ein geeignetes Organisationswerkzeug für den Modellierer, aber der Simulator flacht (indirekt über sein rekursive Routing von Ereignissen) Multi-Level-Netzwerke während der Simulation.

Die SimpleDigraph verfügt über zwei Methoden für ein Netzwerk aufzubauen. Die Add Methode nimmt ein Atomic oder Netzwerk-Modell und fügt sich den Satz von Komponenten. Das Paar Methode akzeptiert ein Paar von Komponenten und verbindet den ersten mit dem zweiten. Unten ist die Klassendefinition für das Modell. Beachten Sie, dass es ein Template-Parameter für die Einstellung seiner Ein- und Ausgabetyp hat. Die SimpleDigraph hat zwei Membervariablen. Die erste ist eine Reihe von Zeigern auf die Komponenten des Netzes. Diese werden in den Set genannt Modelle gespeichert. Die Komponenten können Atomic Objekte, Netzwerk-Objekte oder beides sein. Diese Komponenten des SimpleDigraph sind die Knoten der Graphen. Die zweite Element Variable ist das Links-Netzwerk. Diese werden in der Karte genannt Graph gespeichert.

Die SimpleDigraph hat vier Methoden und die gewünschte Strecke und getComponents. Eines davon ist der Konstruktor, der ein leeres Netzwerk erstellt. Ein weiterer Grund ist der destructor, die alle Netzwerkkomponenten löscht. Die restlichen zwei sind hinzufügen und Paar.

Die Add-Methode macht drei Dinge. Zuerst prüft es, dass das Netzwerk nicht selbst hinzugefügt werden. Das ist illegal und führt dazu, dass der Simulator eine Ausnahme zu werfen. Als nächstes fügt es die neue Komponente seiner Reihe von Komponenten. Schließlich macht die SimpleDigraph selbst Eltern der Komponente. Das ist erforderlich, so dass der Simulator steigt auf und ab Modellbaum. Wenn dieser Schritt dann weggelassen wird das rekursive Routing der Ereignisse wird fehlschlagen. Hier ist die Implementierung der Add-Methode.







Von den beiden erforderlichen Methoden ist, route desto komplizierter. Die Argumente zu routen sind ein Objekt geleitet werden, das Netzwerkelement (das heißt entweder die SimpleDigraph oder eine seiner Komponenten), die das Objekt erstellt wird, und um den Beutel mit dem Ereignis-Objekten gefüllt werden, dass die Objektempfänger anzuzeigen. Das Verfahren beginnt mit der Sammlung von Komponenten zu finden, die zu der Quelle des Objekts verbunden sind. Als nächstes durchläuft es diese Sammlung durch und für jeden Empfänger ergänzt die Tasche von Empfängern ein Ereignis. Wenn dies die Methode zurückgibt getan. Die Implementierung ist unten.

Das zweite erforderliche Verfahren, getComponents. ist trivial. Wenn wir eine Sammlung andere als ein Set verwendet hatten, die Komponenten zu speichern, dann wäre das Verfahren benötigt, um explizit jedes Komponentenmodell in das Set c einzufügen. Aber weil Modelle und c sind beide Set-Objekte, und das Set hat einen Zuweisungsoperator, ein Aufruf an diesem Betreiber ausreichend.

Der Konstruktor und der Destruktor der Klasse vervollständigen. Der Konstruktor nur ruft den Oberklassenkonstruktors. Der Destruktor löscht die Komponentenmodelle. Seine Umsetzung ist nachfolgend dargestellt.

Figur: Ein Digraph Modell mit zwei Komponenten.

Die Komponenten eines Digraph müssen adevs verwenden :: PortValue Objekte für ihre Ein- und Ausgangstyp. Der Digraph ist eine Template-Klasse mit zwei Template-Parameter. Der erste Parameter ist die Art des Gegenstandes für einen Wert in seinen PortValue Objekten verwendet. Der zweite Parameter ist die Art des Gegenstandes für einen Port in seinen PortValue Objekten verwendet. Der Port Parameter ist vom Typ `int‘ standardmäßig.

Die Digraph hat zwei Methoden, die verwendet werden, um ein Netzwerk zu konstruieren. Die Add-Methode fügt eine Komponente mit dem Netzwerk. Das Argument für die Add-Methode ist das Modell in dem Netzwerk aufgenommen werden. Das Paar Verfahren verbindet Komponenten des Netzes. Die ersten beiden Argumente, um das Paar Verfahren sind die Source-Modell und den Hafen. Die zweiten zwei Argumente sind das Zielmodell und Port.

Diese Ausgangsfunktion stellt einen Wert vom Typ `Kunde *‘ auf dem `` ankommen ‚‘ Anschluss des Generators; daran erinnern, dass ‚IO_Type‘ ist ein typedef für `PortValue‘. Ein entsprechendes PortValue Objekt erscheint in dem Eingabesack des Clerk. Der Wert Attribut des PortValue Objekts durch den Schreiber erhalten verweist auf das Customer-Objekt durch den Generator erstellt. Das Port-Attribut des PortValue Objekts ist der Clerk ‚s` `„Hafen ankommen.

Abbildung: Komponentenmodelle und ihre Verbindungen in dem Multi-Schreiber Convenience-Store-Modell.

Netzwerkmodelle

Das Multi-Schreiber-Modell wird durch Ableiten eine neue Klasse von Digraph umgesetzt. Der Konstruktor dieser neuen Klasse erstellt und fügt die Komponentenmodelle und baut ihre Verbindungen untereinander. Hier ist die Header-Datei für dieses neue Multi-Schreiber-Modell. Und hier ist die Quelldatei Beachten Sie, dass der MultiClerk destructor löscht nicht seine Komponentenmodelle. Dies liegt daran, die Komponenten von der Basisklasse angenommen werden, wenn sie hinzugefügt werden die Digraph ‚s Add-Methode. Folglich werden die Komponenten-Modelle von der Basisklasse destructor gelöscht, anstatt der Destruktor der abgeleiteten Klasse.

Ein Zellraum-Modell ist eine Ansammlung von atomaren und Netzwerkmodellen in einem regelmäßigen Raster anordnen und mit jedem Modell an seine benachbarten Modelle verbunden. Conways Spiel des Lebens ist ein klassisches Beispiel für eine Zelle Raummodell, das sehr schön als ein diskretes Ereignissystem beschrieben werden kann. Dieses Spiel wird auf einem flachen Brett gespielt viel aufgeteilt in reguläre Zellen wie ein Schachbrett. Jede Zelle hat eine Nachbarschaft, die seine acht benachbarten Zellen aufweist: oben, unten, links, rechts, und die vier Ecken. Eine Zelle kann tot oder lebendig sein. Der Wechsel von Toten lebendig und umgekehrt erfolgt nach zwei Regeln:
  1. (Tod Regel). Wenn eine Zelle am Leben ist und es hat weniger als zwei oder mehr als drei lebende Nachbarn stirbt die Zelle.
  2. (Rebirth Regel). Wenn eine Zelle tot ist und es hat drei drei lebende Nachbarn dann wird die Zelle wieder geboren.

Unsere Implementierung des Spiels des Lebens besteht aus zwei Teilen: Atommodelle, die die einzelnen Zellen und eine cellspace implementieren, die die Zellen enthält. Die cellspace ist eine Art von Netzwerk. und seine Komponenten Austausch CellEvent Objekte, die vier Attribute: die x-, y- und z-Koordinaten der Zielzelle (die Zelle Raum können drei Dimensionen haben, das Spiel des Lebens verwendet nur zwei) und das Objekt zu diesem Ziel zu liefern. Die CellEvent Klasse ist eine Klasse, deren Vorlage-Vorlage-Argument wird die Art von Objekt, das das Ereignis liefert. Die Größe des cellspace bestimmt, wenn das cellspace Objekt erstellt wird, und es hat Methoden für das Hinzufügen und die Zellen nach Ort abruft.

Die Atomic Zellen in unserem Spiel des Lebens haben zwei Zustandsvariablen: die tot oder lebendig Status der Zelle und seine Zählung der lebenden Nachbarn. Zwei Methoden werden implementiert, um die Tod und Wiedergeburt Regeln zu testen, und die Zelle setzt seine Zeit voraus auf 1, wenn eine Regel erfüllt ist.

Der Ausgang der Zelle ist sein neuer tot oder lebendig Zustand. Um richtig gezielt CellEvent s zu produzieren, wobei jede Zelle kennt seine eigene Position in dem Zellraum. Die interne Übergangsfunktion bewirkt, dass die Zelle ihre Toten / lebendig Zustand zu ändern. Die externe Übergangsfunktion aktualisiert die gräfliche Zelle eines lebenden Nachbarn als diese Nachbarn ihre Toten / lebendig Zustand ändern. Hier ist Header-Datei für unser Game of Life Zelle.

Die output_func Methode zeigt, wie eine Zelle Nachrichten an seine Nachbarn sendet. Die verschachtelten Schleifen für eine CellEvent erzeugen an jeder benachbarten Zelle abgezielt. Der Ort der Zielzelle wird auf die x, y geschrieben und z Attribute des CellEvent Objekts. Genau wie Arrays liegen die Positionen von Null auf die Größe minus einer Zelle Platz. Die Routen der CellEvent cellspace-Objekte zu ihren Zielen. Wenn jedoch das Ziel der CellEvent außerhalb des Zellraum ist, dann wird der sich das cellspace CellEvent als Ausgang erzeugen.

Der Rest des Simulationsprogramm sieht aus wie die Simulationsprogramme sehr viel, was wir gesehen haben. Ein cellspace Objekt erstellt und wir fügen Zellen zu. Dann wird ein Simulator-Objekt erstellt und ein Zeiger auf den cellspace wird an den Simulator ‚s Konstruktor übergeben. Schließlich führen wir Veranstaltungen bis unsere Abbruchkriterien erfüllt ist. Der Teil der Ausführung ist bereits bekannt, so lassen Sie uns konzentrieren nur die cellspace auf die Schaffung. Hier ist der Code-Schnipsel, die den Bau ausführt.

Genau wie bei der Digraph Klasse, das cellspace Template-Argument bestimmt den Wert Typen für die CellEvent Objekte als Eingabe und Ausgabe verwendet. Der Konstruktor setzt cellspace die Dimensionen des Raumes. Jede cellspace ist dreidimensional, und der Konstruktor akzeptiert drei Argumente für die x, y und z-Dimensionen. Ausgelassene Argumente standardmäßig 1. Die Unterschrift des Konstruktor

Die Komponenten werden auf die mit dem Add cellspace Verfahren hinzugefügt. Dieses Verfahren stellt eine Komponente an einer spezifischen x-, y- und z-Lage. Seine Unterschrift ist, wo eine Zelle Devs (atomic oder Netzwerk) von der Typdefinition ist auch wie der Digraph. die löscht seine Komponenten cellspace, wenn es gelöscht wird.

Die cellspace hat fünf Methoden für die Zellen und die Dimensionen des Zellraumes abruft. Diese sind mehr oder weniger selbsterklärend; die Signaturen sind unten gezeigt.

Netzwerkmodelle

Netzwerkmodelle







In Verbindung stehende Artikel