Peter Lorenz English smaller fonts Simulation und Animation

4.4. Logikschalter und Verzweigungen

Die im vorigen Abschnitt eingeführten Modelle von Bedienungssystemen haben im Vergleich zum Single Server (Joe's Barbershop) einige Erweiterungen. Warteschlangen wurden eingeführt und es wurde die Möglichkeit eingeräumt, mehrere Bediener parallel oder konkurrent arbeiten zu lassen. Aber viele praktisch auftretende Bedingungen lassen sich bisher nicht ausdrücken. Es gibt bisher keine Möglichkeit, im Modell Folgendes darzustellen:

  1. Ein Kunde verzichtet auf Bedienung, wenn zu viele andere Kunden warten, z.B. wenn kein Stuhl mehr frei ist.
  2. Während der Mittagspause eintreffende Kunden verzichten ebenfalls auf Bedienung.
  3. Die Simulation wird dann abgebrochen, wenn der letzte wartende Kunde bedient ist.
  4. Eintreffende Kunden bevorzugen Joe. Sie lassen sich nur dann von Jim bedienen, wenn Joe besetzt ist.
  5. Joe bedient Damen und Herren. Seine Gehilfin Sue bedient nur Damen.

Zur Lösung von Aufgaben dieser Art hat GPSS/H als Modellelementklasse die Logikschalter sowie die Blöcke GATE, TEST und TRANSFER. Damit kann man Verzweigungen im Lauf von Transaktionen oder bedingungsabhängiges Warten beschreiben.

Logikschalter
sind Modellelemente, die nur zwei Zustände annehmen können: Ein (Set) oder Aus (Reset). Ein Zustand kann vor Beginn des Simulationslaufes durch INITIAL gesetzt und während des Laufes durch den Block LOGIC geändert werden.
GATE
ist ein Block, bei dessen Betreten eine logische oder Zustandsbedingung geprüft wird.
TEST
ist ein Block, bei dessen Betreten eine arithmetische Bedingung geprüft wird.
TRANSFER
ist ein Block, mit dem man den normalen Lauf der Transaktionen entsprechend der Reihenfolge der Blöcke im Programm unterbrechen kann. Der TRANSFER-Block veranlasst Sprünge zu Blöcken, die beliebig weit vor oder hinter ihm liegen.
Anfänger machen oft den Fehler, die IF- oder die GOTO-Steueranweisung zur Verzweigung oder für bedingungsabhängiges Warten von Transaktionen benutzen zu wollen. Das kann nicht funktionieren: Der Lauf von Transaktionen kann nur durch Blöcke, nicht aber durch Steueranweisungen beeinflußt werden.

Logikschalter Top

Logikschalter verkörpern eine Klasse von Modellelementen. Jeder Logikschalter kann die beiden Zustände Ein (Geschlossen, Set) oder Aus (Offen, Reset) annehmen. Man benutzt Logikschalter zur Nachbildung von Signalen, Verkehrsampeln oder einfach zur Modellierung eines realitätsgerechten Ablaufs der Prozesse.
Logikschalter sind passiv, statisch, permanent und dienen speziellen Zwecken. Ihr Anfangszustand ist Aus, falls nicht durch eine INITIAL-Steueranweisung etwas anderes festgelegt ist. Sie können durch den Eintritt einer Transaktion in den Block LOGIC in einen neuen Zustand versetzt werden.

INITIAL
ist eine Steueranweisung zur Festlegung von Anfangszuständen für Modellelemente verschiedener Klassen. Ihre Benutzung für Logikschalter geht aus den folgenden Beispielen hervor.
INITIAL LS3/LR5-LR7/LS(JOE) Schalter 3 anfangs geschlossen, Schalter 5 bis 7 offen, Schalter JOE geschlossen
LOGIC
ist ein Block, bei dessen Betreten ein Logikschalter geschlossen, geöffnet oder umgelegt wird:
Operation Hilfsoperator Operand Erklärung
LOGICS
R
I
ADer A-Operand ist der Name oder die Nummer eines Logikschalters, der zu schließen (S), zu öffnen (R) oder umzulegen (I= invert) ist.
Logikschalter haben zwei Standardattribute
Name Erklärung
LSj Wahr, wenn der Logikschalter j geschlossen ist. Dann hat LSj den Wert 1.
LRj Wahr, wenn der Logikschalter j gerade offen ist. Dann hat LRj den Wert 1.
Eine Fußgängerampel schaltet in Abständen von 60 Sekunden für 5 Sekunden auf grün. Fußgänger treffen in exponentiell verteilten Zeitabständen mit einem Mittelwert von 8 Sekunden ein. Ermitteln Sie für einen Simulationslauf von 8 Stunden die mittlere Wartezeit eines Fußgängers!

SLX

GATE Top

Ungeduldige Kunden
GENERATE-Blockierung
Tankwagen blockiert Tankstelle
GATE
testet Zustände von Einrichtungen, Speichern, Logikschaltern und den später zu behandelnden Verbänden.
GATE X A,B
verzögert oder verzweigt Transaktionen. X ist eine Hilfsoperation oder ein mnemonischer Operator, der durch
FU, FNU, FI, FNI, FV, FNV,
SF, SNF, SE, SNE, SV, SNV,
LS, LR,
M, MN
spezifiziert werden kann.
GATE hat in jedem Fall einen Operanden A und kann einen Operanden B haben.
A Name oder Nummer von Speicher, Einrichtung, Schalter oder Block
B Sprungziel bei nicht erfüllter Bedingung oder leer. Wenn B leer ist, warten ankommende Transaktionen, bis die durch X gegebene Bedingung erfüllt ist.
Hilfsoperator X von GATE
Objektklasse Wert Erklärung
LogikschalterLR Ausgeschaltet (Reset)
LSEingeschaltet (Set)
Einrichtung Iunterbrochen oder Interrupted
NInicht unterbrochen oder Not Interrupted
Ubenutzt oder (Used durch SEIZE oder PREEMPT
NUunbenutzt oder Not Used
FVverfügbar oder aVailable
FNVunverfügbar oder Not aVailable
FSbelegbar oder SEIZEable
FNSnicht belegbar oder Not SEIZEable
Speicher Eleer oder Empty
NEnicht leer oder Not Empty
SFvoll oder Full
SNFnicht voll oder Not Full
SVverfügbar oder aVailable
SNVunverfügbar oder Not aVailable
Verband M Match-Bedingung erfüllt (Xact im konjugierten Block gehört zum selben Verband und wartet auf Abschluss einer MATCH-,ASSEMBLE- oder GATHER-Operation
NM Match-Bedingung nicht erfüllt oder Not Matching
GATE SNF SALON Eintreffende Transaktionen warten, bis Platz im Speicher SALON frei wird.
GATE FNU JOE,BJIM Eintreffende Transaktionen prüfen, ob die Einrichtung JOE unbenutzt ist. In diesem Fall gehen sie weiter zum nächsten Block. Sonst springen sie zu einem Block mit dem Namen BJIM.

Ungeduldige KundenTop


SLX

Blockierung von GENERATETop

GATE kann (wie auch andere Blöcke, die eintreffenden Transaktionen den Zutritt verwehren können,) die Erzeugung von Transaktionen blockieren. Wenn GATE unmittelbar auf GENERATE folgt und einer Transaktion den Zutritt verweigert, weil die Testbedingung nicht erfüllt ist, wird die weitere Erzeugung von Transaktionen durch den GENERATE-Block suspendiert oder unterbrochen, bis die Testbedingung erfüllt ist.
GENERATE 15
GATE FNU JOE
Die erste Transaktion wird genau 15 Zeiteinheiten nach Beginn des Simulationslaufes erzeugt. Wenn der folgende GATE-Block gesperrt ist, wird die Erzeugung der zweiten Transaktion blockiert. Wenn die Bedingung FNU JOE zum Zeitpunkt 20 erfüllt ist, wird die zweite Transaktion erst zum Zeitpunkt 20 + 15 = 35 erzeugt (oder genauer: von der FEC freigegeben).

Tankwagen blockiert TankstelleTop


SLX

TESTTop

Ladenschluss
Kohleumschlaghafen
Der TEST-Block prüft eine arithmetische Bedingung. In Abhängigkeit vom Ergebnis darf die ankommende Transaktion weiter zum Folgeblock oder sie muss TEST hat wie GATE einen Hilfsoperator.
TEST [G]
[GE]
[L]
[LE]
[E]
[NE]
A Der A-Operand ist linker Vergleichsausdruck des mit der Hilfsoperation spezifizierten Vergleichs. Wenn der Vergleich den Wert Wahr hat, wird die Transaktion zum Folgeblock weitergeleitet.
B Der B-Operand ist der rechte Vergleichsausdruck.
C Der C-Operand spezifiziert den Namen oder die Nummer eines Blockes, zu dem die eintretende Transaktion verzweigt wird, wenn der Vergleich den Wert Falsch ergibt.
TEST GE AC1,50 Die ankommende Transaktion wartet, bis die Bedingung AC1>=50 erfüllt ist, d.h., bis ein Ereigniszeitpunkt auftritt, der nach der Zeit 50 liegt.
TEST NE Q(PALLET),10,PEMPTY Die ankommende Transaktion prüft, ob die Anzahl der Einheiten in der Warteschlange PALLET ungleich 10 ist. Dann geht die Transaktion weiter zum Folgeblock. Sonst springt sie zu einem Block mit dem Namen PEMPTY.

LadenschlussTop

Im folgenden Beispiel wird ein TEST-Block benutzt, um eine der am Eingang dieses Abschnitts erwähnten Aufgaben zu lösen: Der Simulationslauf endet erst dann, wenn der letzte Kunde in Joe's Laden bedient worden ist.

SLX

KohleumschlaghafenTop

Das folgende Programmbeispiel stellt das Füllen und Leeren einer Kohlehalde dar. Der TEST-Block wird zweimal benutzt. Er blockiert einen GENERATE-Block an den Wochenenden, wo keine Entnahme von Kohle stattfinden soll. Er prüft, ob noch ausreichend Kohle vorhanden ist, um einen Kipper zu füllen. Sonst würde der Entnahmeversuch (LEAVE) mit einem Laufzeitfehler enden.

Die Anzahl der Kipper, die auf Kohle warten mussten, erhält man nach Ausführung des Simulationslaufs aus der Standardausgabe: Sie ist die Differenz aus der Gesamtzahl der Kipperfahrten (3800) und der Anzahl der Fahrten ohne Warten (3554), also 246.
SLX

TRANSFER Top

Unbedingte Sprünge
Zwei Ankunftsströme
Sprünge mit Wahrscheinlichkeitsangabe
Sprünge zu alternativen Zielen
Alle Modifikationen
Der in vielen Modifikationen existierende TRANSFER-Block kann beim Eintritt einer Transaktion Bedingungen prüfen und die eingetretene Transaktion nicht zum folgenden Block, sondern zu einem anderen Block weiterleiten.

Im folgenden sollen zunächst drei Modifikationen des TRANSFER-Blockes vorgestellt werden:

  1. unbedingte Sprünge,
  2. Sprünge mit Wahrscheinlichkeitsangabe
  3. Sprünge zu alternativen Zielen (BOTH)

Schließlich folgt zum Nachschlagen eine tabellarische Übersicht über alle Modifikationen des TRANSFER-Blockes.

Unbedingte SprüngeTop

Wenn der A-Operand von TRANSFER frei bleibt, wird die eintretende Transaktion zu dem Block verzweigt, der durch den Operanden B spezifiziert ist.
TRANSFER ,ABC verzweigt jede eintretende Transaktion zum Block mit dem Namen ABC.
TRANSFER ,*-3 verzweigt jede eintretende Transaktion zum Block, der drei Plätze vor dem aktuellen TRANSFER steht. So kann man natürlich auch Endloszyklen programmieren.

Zwei AnkunftsströmeTop


SLX

Sprünge mit WahrscheinlichkeitsangabeTop

Wenn das erste Zeichen im Operand A ein Punkt ist, wird der Operand als Wahrscheinlichkeit interpretiert. Er gibt die Wahrscheinlichkeit p für den Übergang zu dem im Operand C spezifizierten Block an. Mit der komplementären Wahrscheinlichkeit 1-p wird zu dem Block verzweigt, der im Operanden B spezifiziert ist. Wenn B frei bleibt, gilt der nächste Block als Default-Wert.
Die Zahl nach dem Punkt wird in eine dreistellige Zahl im Bereich von 0 bis 999 konvertiert und mit einer Zufallszahl verglichen, die aus dem gleichen Bereich mit dem ersten Zufallszahlenstrom (RN1) ausgewählt wird. Wenn die Zufallszahl größer oder gleich dieser dreistelligen Zahl ist, wird die Xact zu dem in B spezifizierten Block, sonst zu dem in C spezifizierten Block geleitet. Wenn B leer ist, wird als Default-Wert der folgende Block angenommen.
TRANSFER .8,,BBB Mit der Wahrscheinlichkeit 0.8 wird zum Block BBB, mit der Wahrscheinlichkeit 0.2 zum Folgeblock verzweigt.
BLET &P=25
TRANSFER .&P,*+2,ABC
Mit der Wahrscheinlichkeit 0.975 wird zum übernächsten, mit der Wahrscheinlichkeit 0.025 zum Block ABC verzweigt.

Machen Sie am folgenden Beispiel Experimente mit verschiedenen Wahrscheinlichkeiten und beobachten Sie die Ergebnisse an Hand der Blockstatistik!


Sprünge zu alternativen ZielenTop

Wenn der Operand A das Schlüsselwort BOTH enthält, versucht eine eintreffende Transaktion zunächst, den im Operanden B spezifizierten Block zu betreten. Wenn das nicht möglich ist, wird versucht, den in C angegebenen Block zu betreten. Scheitert auch dieser Versuch, muss die Transaktion warten, bis eines der beiden Ziele den Eintritt erlaubt.

SLX

Bei ständig verfügbaren Aufträgen ist zu erwarten, dass zwei Drittel aller Aufträge an Platz1 erledigt werden. Wie ändert sich das Verhältnis, wenn Aufträge in Abständen von 10, 15 und 20 Zeiteinheiten eintreffen?
Wenn man die Wirkung von TRANSFER BOTH visualisieren will, braucht man zunächst ein passendes Layout. Im Layout sind Pfade zur Bewegung von Auftragsobjekten zwischen Quelle, Bearbeitungsplätzen und Senke definiert worden. Das folgende GPSS-Programm enthält einige zusätzliche Anweisungen zur Definition eines ATF, zur Erzeugung von ATF-Kommandos und zur Speicherung von Werten für das Zeichnen des Plots. Die hierzu benutzten SAVEVALUE-Blöcke werden später im Kapitel 4.6. erklärt.

Die Animation kann auch als svg angezeigt werden, wenn der SVG-Viewer von Adobe installiert ist.
Der Programmtext ist durch das Einfügen animationsbezogener Anweisungen um 32 neue Zeilen erweitert worden. Das ruft die Frage nach Methoden zur Reduktion des Quelltextes auf. Im Abschnitt 5.1. werden Makros und Subroutinen eingeführt, die sich für diesen Zweck eignen.

Alle Modifikationen des TRANSFER-BlockesTop

leer .xpr ALLBOTH PICK PHSBR SIM
Die folgende Tabelle ist zum Nachschlagen gedacht. Einige der TRANSFER-Modifikationen dieser Tabelle werden später, andere werden im Rahmen dieses Textes nicht weiter erklärt.
OperandWertErklärung
Aleer Eintreffende Transaktionen werden direkt zu dem Block umgeleitet, der im Operand B durch seine Nummer, seinen Namen (Marke) oder seine Relativadresse (z.B. *+2: übernächster Block) angegeben ist.
.xpr Wenn das erste Zeichen im Operand A ein Punkt ist, wird der Operand als Dezimalbruch behandelt. Diese Zahl wird mit einer gleichverteilten Zufallszahl aus dem Bereich (0;1) verglichen. Wenn die Zufallszahl größer oder gleich dem Wert des A-Operanden ist, wird die Transaktion zu dem Block weitergeleitet, der im Operanden B angegeben ist, andernfalls zum in C spezifizierten Block. Wenn B frei bleibt, gilt der nächste Block als Default-Wert.
A = .0 bewirkt den unbedingten Sprung zum durch B spezifizierten Block.
ALLEine eintretende Transaktion versucht der Reihe nach, eine Folge von Blöcken zu betreten. Zuerst wird versucht, den im Operanden B angegebenen Block zu betreten. Falls das nicht möglich ist, geht die Prüfung weiter mit dem B+n-ten, dem B+2n-ten Block usw. und endet mit einem durch C spezifizierten letzten Block. Dabei bezeichnet n die im Operanden D angegebene Schrittweite. Wenn einer der Blöcke den Eintritt erlaubt, wird der Sprung ausgeführt. Sonst muß die Transaktion warten, bis sie von einem der Blöcke aufgenommen werden kann. Das wird bei jedem Start der Aktuellen Ereigniskette (CEC) geprüft und kann relativ viel Rechenzeit kosten.
BOTH TRANSFER BOTH,x,y ist äquivalent zu TRANSFER ALL,x,y,(y-x).
PICKDie eintreffende Transaktion wird zufällig zu einem aus einer Serie von Blöcken weitergeleitet. B spezifiziert die kleinste und C die größte Blocknummer der Serie. Jeder Block dieser Serie ist gleichwahrscheinlich. Anders als bei ALL und BOTH wird der Sprung auch dann vollzogen, wenn der Zielblock momentan nicht aufnahmebereit ist. Die Zufallszahl wird dem Strom RN1 entnommen.
PHDie eintreffende Transaktion springt zu einem Block, dessen Nummer durch den Parameterwert B plus dem Wert des Operanden C berechnet wird. Der Parametertyp ist als Operand A anzugeben.
Seitdem GPSS/H Ausdrücke als Operanden erlaubt, ist diese Ausprägung des TRANSFER-Blockes überflüssig geworden:
TRANSFER PH,5,1 ist gleichbedeutend mit TRANSFER ,PH5+1
SBR Die eintreffende Transaktion springt zu einer Subroutine. Das ist ein durch den Operand B spezifizierter Block. Die Nummer des aktuellen TRANSFER-Blockes wird in dem Parameter gespeichert, der im Operand C spezifiziert ist.
Dieser Parameterwert kann nun nach Durchlaufen einer Blockfolge als Rücksprungadresse benutzt werden. Das geschieht mittels TRANSFER PH.
Beispiel:
TRANSFER SBR,MYSUB,2PH
organisiert den Sprung zum Block MYSUB und speichert seine eigene Blocknummer im zweiten Halbwortparameter.
TRANSFER PH,2,1
steht dann am Ende der Subroutine oder des Unterprogrammes und veranlasst den Rücksprung zu dem ersten Block nach TRANSFER SBR.
SIMDer SIM-Indikator der eintretenden Transaktion wird geprüft. Dieser Indikator wird eingeschaltet, wenn der Transaktion der Zutritt zu einem Block verwehrt wird. Er wird ausgeschaltet, wenn die Transaktion einen ADVANCE-Block verlässt. So liefert dieser Indikator eine Information darüber, ob die Transaktion seit ihrem letzten ADVANCE-Austritt schon einmal aufgehalten worden ist.
Wenn der SIM-Indikator eingeschaltet ist, schaltet der TRANSFER-Block diesen Indikator aus und bewegt die Transaktion zu dem Block, der durch den Operanden C spezifiziert ist. Wenn der SIM-Indikator ausgeschaltet ist, wird die Transaktion zu dem durch B bestimmten Block bewegt. TRANSFER SIM ist dann besonders nützlich, wenn die gleichzeitige Erfüllung einer Reihe von Bedingungen zu prüfen ist.
Eine Alternative zu TRANSFER SIM ist die Nutzung eines TEST-Blocks. Nachteilig dabei ist die ständige Überprüfung in der CEC.

Kontrollfragen

  1. Nennen Sie die allgemeinen Eigenschaften der Modellelementklasse Logikschalter!
  2. Wozu benutzt man Logikschalter?
  3. Wie kann man Logikschalter identifizieren?
  4. Welche Zustände können Logikschalter einnehmen?
  5. Welchen Anfangszustand haben Logikschalter?
  6. Wie kann man Logikschaltern Anfangszustände zuweisen?
  7. Welche Hilfsoperatoren bestimmen die Wirkungsweise des LOGIC-Blockes?
  8. Welcher Block dient der Abfrage von Zuständen von Modellelementen der Klassen Speicher, Einrichtungen und Logikschalter?
  9. Wie kann man den GATE-Block für Verzögerungen des Laufs von Transaktionen einsetzen? Wie kann man eingetretene Transaktionen damit verzweigen?
  10. Welche logischen Bedingungen kann man mit GATE bezüglich des Zustandes von Einrichtungen abfragen?
  11. Wie kann man mit GATE Zustände von Speichern abfragen?
  12. Wie fragt man mit dem GATE-Block nach der Stellung Logikschalter?
  13. Beschreiben Sie die Wirkung eines GATE-Blockes, der direkter Nachfolger eines GENERATE-Blockes ist!
  14. Wie kann man erreichen, dass eine Transaktion einen Vergleich zweier numerischer Werte veranlasst?
  15. Wann wird eine Transaktion durch einen TEST-Block aufgehalten?
  16. Wie kann man den TEST-Block benutzen, um einen Strom von Transaktionen zu verzweigen?
  17. Nennen Sie wenigstens drei Möglichkeiten zur Spezifikation der Wirkung von TRANSFER durch seinen ersten Operanden!
  18. Wie kann man einen unbedingten Sprung von Transaktionen veranlassen?
  19. Wie kann man ausdrücken, dass eine Transaktion mit der Wahrscheinlichkeit von 1/4 zum folgenden Block und mit der Wahrscheinlichkeit von 3/4 zu einem Block mit dem Namen AAA bewegt werden soll?
  20. Beschreiben Sie die Wirkung des Operanden BOTH eines TRANSFER-Blockes!
  21. Erklären Sie die Funktion eines TRANSFER-Blockes mit dem Operanden ALL!
SAHome previous next up Englishsmaller fonts Top Line
Last Modified Fri 05-27-11 06:54 GMT Valid CSS!

Comments please to:pelosim@yahoo.com