Peter Lorenz English smaller fonts Simulation und Animation

5.4. Verbände und Gruppen

Transaktionen können Kopien von sich selbst erzeugen. Jede Transaktion bildet gemeinsam mit ihren Kopien einen Verband. Transaktionen eines Verbandes können aufeinander warten. Ihr Lauf läßt sich synchronisieren. Sie können nach getrenntem Lauf auch wieder vereinigt oder verschmolzen werden.
Mit bisher behandelten Mitteln läßt sich kein direkter Austausch von Information zwischen Transaktionen beschreiben. Dazu dient die Zuordnung von Transaktionen zu einer Gruppe. Die Parameter dieser Transaktionen werden anderen Transaktionen zugänglich: Andere können die sonst privaten Parameter lesen oder mit neuen Werten belegen. Außer Gruppen von Transaktionen gibt es Gruppen von Werten. Das sind Mengen, für die verschiedene Mengenoperationen ausführbar sind.

VerbändeTop Line

Ein Verband ist eine Menge von Transaktionen, die aus einer ursprünglichen Transaktion durch Kopieren oder Splitten hervorgegangen ist. Für derartige Xacts gibt es mehrere Möglichkeiten der Synchronisation ihres Laufes.

Funktion von VerbändenTop of the Paragraph

In vielen praktischen Situationen müssen Akteure, also handelnde Subjekte, ihre Tätigkeit abstimmen oder synchronisieren. Synchronisieren bedeutet, den zeitlichen Ablauf zweier Vorgänge gleichlaufend zu machen [Meyers Neues Lexikon Leipzig 1964] oder auf gleichen Takt bringen. [Großes Fremdwörterbuch Leipzig 1980].

Beispiele

Zur Nachbildung derartiger Prozesse bietet GPSS das Konzept des Verbandes von Xacts.

Ein Verband ist eine aus einem Ausgangsxact durch Duplizieren oder Splitten hervorgegangene Menge von Xacts, die man wieder sammeln, an verschiedenen Punkten des Modells paarweise synchronisieren oder nach der Sammlung wieder vereinigen kann.

Blöcke für VerbändeTop Line

Die Blöcke SPLIT, GATHER, MATCH, ASSEMBLE beziehen sich auf Verbände von Xacts und sollen im folgenden beschrieben und an Beispielen erläutert werden.

SPLIT
ist ein Block, der Kopien einer Xact erzeugt, welche zu einem Verband gehören. Die folgende Tabelle informiert über die Belegung der Operanden:
OperandInhalt Erklärung
A xpr Anzahl der zu erzeugenden Kopien
B xpr Block, zu dem die Kopien verzweigt werden sollen. Wird für jede erzeugte Xact neu berechnet und kann insbesondere die wechselnden Werte des in C spezifizierten Parameters einbeziehen.
C xprPint Parameternummer und -typ für eine laufende Numerierung der erzeugten Xact-Kopien. Original und jede Kopie erhalten einen um 1 inkrementierten Parameterwert.
leer keine Nummerierung
D..GxprPany Parameteranzahlen und -typen für die Kopien. Die Parameterwerte des Originals werden immer dann übernommen, wenn es möglich ist.
leer Parametersatz und -werte des Originals werden übernommen
Die Xacts eines Verbandes werden ringförmig rückwärts verkettet. Die zuletzt erzeugte Xact enthält einen Verweis auf ihren Vorgänger; das Original verweist auf die zuletzt erzeugte Kopie. Davon kann man sich bei der Anzeige der CEC überzeugen. Die Kopien übernehmen die Priorität des Originals. Die Gruppenzugehörigkeit wird nicht übernommen. Wenn Kopien einen SPLIT-Block betreten, so entstehen Kopien, die dem ursprünglichen Verband angehören.

Beispiel 1

Welche Nummern erhalten die Xacts?


ASSEMBLE
ist das Gegenstück zu SPLIT: Eine im Operand A angegebene, zu einem Verband gehörende Anzahl von Xacts wird so zusammengefaßt, dass nur die zuerst eingetroffene Xact übrigbleibt und die anderen vernichtet werden.
  • Die erste, in einen ASSEMBLE -Block eingetretene Xact muß dort solange warten, bis die angegebene Anzahl von Xacts desselben Verbandes eingetroffen ist.
  • Jede später eintreffende Xact wird unverzüglich aus dem Verband entfernt und vernichtet. Nur die Parameterwerte der zuerst eingetretenen Xact bleiben erhalten.
Ein ASSEMBLE -Block kann gleichzeitig Xacts verschiedener Verbände verarbeiten.

Beispiel 2

Flugpassagiere geben vor dem Abflug ihre Gepäckstücke ab. Bei der Ankunft muß aufeinander gewartet werden.

Treten erhebliche Unterschiede in der Wartezeit in Abhängigkeit von der Anzahl der Gepäckstücke auf?
SLX-Modell der Gepäckabholung

GATHER
ist ein Block, in dem Xacts eines Verbandes warten, bis eine durch den Operand A definierte Anzahl von ihnen eingetroffen ist. Nach Erreichen dieser Anzahl werden alle gesammelten Xacts, nach Priorität und Eintrittszeitpunkt geordnet, in die CEC eingefügt.
MATCH
ist ein Block, mit dem man den Lauf zweier Xacts eines Verbandes synchronisieren kann. Sein Operand A bestimmt den konjugierten MATCH-Block, mit dem die Synchronisation stattfinden soll. Dieser Block muß auf den ersten Block dieses Match-Paares verweisen:
 OTTO    MATCH   PAUL
...
 PAUL    MATCH   OTTO
stellt ein Beispiel eines solchen Paares dar. Betritt eine Xact einen MATCH -Block und befindet sich am konjugierten Block keine Xact desselben Verbandes im Vergleichszustand, so werden folgende Operationen ausgeführt:
Die Xact wird aus der CEC entfernt. Das Vergleichsbit wird gesetzt, wodurch die Xact in den Vergleichszustand überführt wird.Betritt eine Xact einen MATCH -Block und befindet sich am konjugierten Block eine Xact desselben Verbandes im Vergleichszustand, so wird das Vergleichsbit dieser Xact zurückgesetzt und die Xact wird in die CEC als letzte ihrer Prioritätsklasse zurückgeführt. Das Zustandsänderungsbit wird gesetzt, was einen Neustart der CEC vor dem nächsten Stellen der Systemuhr bewirkt.

Beispiel 3

Auf einem Bahnhof sollen zwei Züge aufeinander warten.

Ermitteln Sie den gemeinsamen Abfahrzeitpunkt beider Züge! Er ist am Ende des obigen Textfensters versteckt.

Beispiel 4

Vielfältigen Synchronisationsproblemen begegnet man in einem Restaurant. Hier wartet die Bedienung, bis alle Gäste an einem Tisch die Speisen ausgewählt haben. Damit gleichzeitig serviert wird, warten alle Speisen, bis die letzte fertig ist. Dann wird gewartet, bis zwei Servierkräfte frei sind. Abserviert wird frühestens dann, wenn alle gegessen haben.

Beispiel 5

Beim Quartettspiel muß versucht werden, vier oder zwei Karten zu erhalten, die zu einem Verband gehören. Man kann durch Simulation herausfinden, wieviele Spielrunden gebraucht werden, um bei gegebener Kartenzahl, Spielerzahl und gegebenen Spielregeln ein Spiel zum Ende zu führen.

GruppenTop Line

Die Xacts, die immer stärker als die dominierenden Modellelemente hervortreten und die sich immer deutlicher als universell nutzbare Modellelemente empfehlen, sind nach der bisherigen Darstellung noch nicht in der Lage, untereinander zu kommunizieren. Bisher erscheinen ihre Attribute (Parameter) als privat. Sie können sie zwar selbst preisgeben, indem sie z.B. die Werte ihrer Parameter in Skalare schreiben. Aber die direkte Übertragung von Informationen zwischen ihnen ist bisher noch nicht behandelt worden. Ein weiteres Defizit in der bisherigen Darstellung des GPSS ist das Fehlen eines Mengenkonzeptes. Ob eine Zahl bereits in einer gegebenen Zahlenmenge enthalten ist, läßt sich bisher nur recht umständlich ermitteln. Das GPSS-Gruppenkonzept bietet für beide Probleme eine Lösung.

Gruppen
Gruppen sind permanente, statische Modellelemente, denen Xacts oder Zahlenwerte angehören. Mit den Gruppen stehen die folgenden Blöcke in Verbindung:
OperationInhalt
JOIN Zuordnung zu einer Gruppe
REMOVE Aufheben der Gruppenzugehörigkeit
EXAMINE Test auf Gruppenzugehörigkeit
ALTER Ändern von Parameterwerten der Xacts einer Gruppe
SCAN Erfragen eines Parameterwertes einer Xact einer Gruppe
Für Gruppen gibt es lediglich ein numerisches Standardsymbol:
G
bezeichnet die aktuelle Anzahl der Mitglieder oder Elemente einer Gruppe.

Im folgenden werden die mit den Gruppen verbunden Blöcke genauer vorgestellt und an Beispielen ihre Benutzung erklärt.

JOIN
ist ein Block der eine Xact oder einen Wert in eine Gruppe eingliedert. Beide Nutzungsformen schließen einander aus. Der Gruppentyp (Xacts oder numerische Werte) wird beim Eintritt der ersten Xact festgelegt.
OperandInhaltErklärung
Axpr Name oder Nummer der Gruppe
Bxpr in die Gruppe aufzunehmender Wert
leerXact wird Gruppenmitglied
Wenn später versucht wird, einen numerischen Wert in eine Xact-Gruppe einzuordnen oder eine Xact in eine Gruppe von Werten einzubringen, erfolgt eine Fehlermeldung.
EXAMINE
ist ein Block, der die Gruppenzugehörigkeit einer Xact oder eines Wertes prüft. Er steuert die Bewegung der eintretenden Xact in Abhängigkeit von Resultat der Zugehörigkeitsprüfung. Seine Operanden sind wie folgt belegt:
OperandInhaltErklärung
Axpr Name oder Nummer der Gruppe
Bxpr Der Wert des Ausdrucks wird auf Gruppenzugehörigkeit geprüft
leer Die eintretende Xact wird auf Gruppenzugehörigkeit geprüft
Cxpr Name oder Nummer des Blockes, zu dem die Xact bewegt wird, wenn keine Gruppenzugehörigkeit vorliegt

Beispiel 1

Für ein Lottospiel sollen sieben aus 49 Zahlen zufällig gezogen werden. Dabei darf keine Zahl doppelt auftreten.


ALTER
ist ein Block, der die Änderung eines Parameterwertes von Xacts ermöglicht, die Mitglied einer Gruppe sind. Dieser Block ist nur für Gruppen von Xacts möglich. Er ändert den Parameterwert einer oder mehrerer Xacts, die nach gewissen Kriterien ausgewählt werden.
OperandInhaltErklärung
Axpr Name oder Nummer der Gruppe
Bxpr Anzahl der Xacts, bei denen ein Parameterwert zu ändern ist
ALL Bei allen Xacts der Gruppe soll der im Operanden C spezifizierte Parameter geändert werden
CxprPint Spezifikation des zu ändernden Parameters
PR Die Priorität der ausgewählten Xact(s) der Gruppe ist zu ändern
Dxpr Neuer Wert für den Parameter der Xact(s)
Gxpr Block, zu dem die eintretende Xact verzweigt wird, wenn keine Xact in der Gruppe gefunden wurde
Als Operationszusatz zu ALTER kann ein Vergleichsoperator (L, LE, G, GE, E, NE) oder MIN bzw. MAX angefügt werden. Im ersten Fall gilt folgende Operandenbelegung:
ExprPint Spezifikation eines Vergleichsparameters für die Xacts der Gruppe.
Die vorgesehene Änderung erfolgt für maximal so viele Xacts, wie in B angegeben sind
PR Vergleichspriorität
FxprVergleichswert
Im zweiten Fall (MIN, MAX entfällt der Operand F. G enthält einen Alternativausgang für den Fall, dass die Gruppe leer ist.

Beispiel 2

Am Magdeburger Hauptbahnhof kommen Fahrgäste an, die mit einem Taxi nach Hause fahren wollen. Sie teilen dem Fahrer ihr Fahrtziel mit. Dazu wird folgender Code benutzt:
  1. Sudenburg
  2. Buckau
  3. Südost
  4. Cracau
  5. Neustadt
  6. Texas
  7. Stadtfeld
  8. Olvenstedt

Im obigen Beispiel ändert eine Transaktion Parameterwerte einer anderen. In ähnlicher Weise ist es auch möglich, dass eine Transaktion den Parameterwert einer anderen Transaktion erfragt und in einem eigenen Parameter notiert. Dazu dient der Block SCAN .

SCAN
ist ein Block, der einer Xact das Erfragen eines Parameterwertes einer anderen Xact ermöglicht, die Mitglied einer Gruppe ist. Dieser Block ist nur für Gruppen von Xacts, nicht für Gruppen von Werten, erklärt. SCAN erfragt den Parameterwert derjenigen Xact, die bestimmte Merkmale besitzt. Als Operationszusatz kann ein Vergleichsoperator (L, LE, G, GE, E, NE) oder MIN bzw. MAX angefügt werden. Im ersten Fall gilt folgende Operandenbelegung:
OperandInhaltErklärung
Axpr Name oder Nummer der Gruppe, der die zu befragende Xact angehört
BxprPint Parameterwert des Gruppenmitglieds, der in den Vergleich einzubeziehen ist
PR Prioritätswert ist zu vergleichen
Cxpr Vergleichswert (Gesucht wird die erste Xact der Gruppe, für die der Vergleich wahr wird.)
leer C bleibt leer, wenn MINoder MAX als Operationszusatz angegeben sind
DxprPint Parameter der ersten Xact der Gruppe, welche die Bedingung erfüllt
PR Priorität dieser Xact
ExprPint Parameter der in SCAN eingetretenen Xact, der den gelesenen Wert übernehmen soll
Fxpr Sprungziel bei erfolgloser Suche

Beispiel 4

Der bereits oben skizzierte Restaurantbetrieb kann jetzt, wo der Austausch von Nachrichten zwischen Kellner, Gast, Koch und Buffetier möglich ist, wie folgt modelliert werden:

Als letzter auf Gruppen bezogener Block bleibt REMOVE vorzustellen.

REMOVE
ist ein Block, der die Zugehörigkeit zu einer Gruppe bedingungsabhängig oder unbedingt aufhebt. Als Operationszusatz kann ein Vergleichsoperator (L, LE, G, GE, E, NE) oder MIN bzw. MAX angefügt werden.Das ist im GPSS/H leider nur für Gruppen von Xacts erlaubt. Andere GPSS-Versionen (z.B. SIMDIS) lassen diesen Operationszusatz auch für numerische Werte zu und erschließen damit eine Vielzahl von Selektions- und Prüfungsmöglichkeiten für Mengen. Zuerst soll die Benutzung dieses Blocks für Gruppen von Xacts erklärt werden.
OperandInhaltErklärung
Axpr Name oder Nummer der Gruppe, aus der die Xact zu entfernen ist. Wenn kein anderer Operand belegt ist, wird die eintretende Xact aus der durch A spezifizierte Gruppe entfernt, falls sie Mitglied ist.
Bxpr Maximale Anzahl der aus der Gruppe unbedingt oder bedingungsabhängig zu entfernenden Xacts
ALL Alle Xacts sind zu entfernen
Cleer für Xact-Gruppen
xpr Zu entfernender Wert
Dxpr Parameter von Xacts der Gruppe oder deren Priorität als Vergleichsobjekt in Verbindung mit dem Operationszusatz. Entfernt werden Xacts deren Vergleichsobjekt die angegebene Bedingung erfüllen. Wenn MIN oder MAX als Operationszusatz angegeben ist, wird die Xact mit kleinstem oder größtem Vergleichsobjekt gesucht
PR Priorität der zu entfernenden Xact
Expr Vergleichswert zur Auswahl der zu entfernenden Xact(s)
leer Wenn MIN oder MAX als Operationszusatz angegeben ist, muß E leer bleiben.
Bxpr Block als Sprungziel, falls
  1. die Gruppe leer ist,
  2. keine Xact der Gruppe die Bedingung erfüllt
  3. die in B angegebene Anzahl nicht erreicht wird
leer in jedem Falle nächster Block
Für Gruppen numerischer Werte spezifiziert A die zu bearbeitende Gruppe. Der herauszulösende Wert ist als Operand C anzugeben.

Spezielle FunktionenTop Line

Möglichkeiten zur Reduzierung des Umfangs von GPSS-Quelltexten und zur Modularisierung von Programmen liegen in der Nutzung von Funktionen der Typen S und E.

FUNCTION ist eine bereits früher eingeführte Definitionsanweisung für Funktionen verschiedenen Typs. Der Operand A bezeichnet in Funktionen aller Typen das Argument. Der Funktionstyp wird im Operanden B spezifiziert.

Funktionen vom Typ S
stellen eine Zuordnung zwischen Nummern und Namen von Modellelementen her. In den Operanden C, D, ... sind Symbole für Modellelementklassen anzugeben.Als Symbole sind dabei F, S, Q, L, CH, G, XF, XL, XH, XB, MF, MH, MB, ML, T, FN, V und BV zulässig. Während der Übersetzung sucht GPSS für die angegebenen Modellelementklassen nach übereinstimmend freien Nummernserien, die an eine Serie von Modellelementen dieser Klassen intern vergeben werden.

 FTYPS	FUNCTION	PH1,S4,F,S,Q
1,OBJ1/2,OBJ2/3,OBJ3/4,OBJ4
vergibt an vier Einrichtungen, Speicher und Warteschlangen die vier Namen OBJ1 ...OBJ4 und weist ihnen übereinstimmende interne Nummern zu. Die Nummernfolge ist aufsteigend, braucht aber nicht lückenlos zu sein. Deshalb ist die Anwendung von SELECT und COUNT auf derartige Elementfolgen im allgemeinen nicht zu empfehlen. Es liegt nahe, in Verbindung mit einer derartigen Funktion die Argumentwerte (z. B. die Werte von PH1) als relative und die Funktionswerte (interne Elementnummern) als absolute Nummern der einbezogenen Modellelemente zu bezeichnen.
Funktionen vom Typ E ordnen ihren Argumenten aktuelle Werte von Standardsymbolen zu.
 FTYPE FUNCTION XH2,E3
2,SM$SAAL/5,QA$KASSE/7,XF13
kann bei jedem Aufruf andere aktuelle Funktionswerte besitzen. Abschließend sei noch ein Programmausschnitt wiedergegeben, der sich auf das Restaurant-Modell bezieht. Im Ausschnitt wird demonstriert, wie man Küchen- und Buffetmodell zu einem einheitlichen Abschnitt zusammenfassen kann.
*      3.   B E D I E N E R*
.................................
       ADVANCE    V$BTWEG
 BORD  FUNCTION   PH4,S2,XB        FUNKTIONSWERTE: BLOCKNUMMERN2,ORD/3,VTERM
       SPLIT      1,FN$BORD
       TRANSFER   ,BDIEN
.................................
*
*      5.   K U E C H E   U N D   B U F F E T*
 ORDTP FUNCTION   PH4,S2,F,V,G,C   KOMPONENTEN FUER BUFFET UND KUECHE1,BUFF/2,KOCH
 ORD   SEIZE      FN$ORDTP         BUFFET/KUECHE  UEBERNIMMT AUFTRAG       ADVANCE    V(FN$ORDTP)      ZUBEREITUNGSDAUER       RELEASE    FN$ORDTP         BUFFET/KUECHE WIRD FREI       JOIN       FN$ORDTP
       LINK       FN$ORDTP,FIFO    GETRAENKE/SPEISEN Z. SERVIEREN BEREIT VTERM TERMINATE                   VERNICHTUNG ERLEDIGTER AUFTRAEGE*
.........................

Mit der Behandlung des Gruppenkonzepts, der oft sehr blocksparenden Unterprogrammtechnik sowie der Funktionen spezieller Typen soll die Einführung in GPSS abgeschlossen werden. GPSS wird auch in den folgenden Abschnitten insbesondere als Grundlage von Modell- und Programmbeispielen dienen.

Abschlußbeispiel Top Line

Layout

Kontrollfragen Top Line

  1. Wie entstehen Verbände von Transaktionen?
  2. Welche Funktion haben Verbände in Simulationsmodellen?
  3. Welche Blöcke dienen der Arbeit mit Verbänden?
  4. Wie kann man Transaktionen eines Verbandes numerieren?
  5. Wie unterscheiden sich die Blöcke GATHER und ASSEMBLE?
  6. Welche Attribute hat die mit SPLIT erzeugte Kopie einer Transaktion?
  7. Welche Funktionen haben Gruppen in Simulationsmodellen?
  8. Welche Objekte können Mitglieder von Gruppen werden?
  9. Wie beschreibt man Eintritt und Austritt aus einer Gruppe?
  10. Welche Blöcke dienen dem Austausch von Nachrichten zwischen Gruppen?
  11. Wozu dienen Funktionen vom Typ S?
  12. Welche Werte haben Funktionen vom Typ E?

SAHome previous next up Englishsmaller fonts Top Line
Last Modified Wed 07-03-13 12:50 GMT Valid CSS!

Comments please to:pelosim@yahoo.com