Peter Lorenz English bigger fonts Simulation und Animation

4.3. Warteschlangen und Speicher

Das in 4.1. vorgestellte Modell eines Bedienungssystems (Joe's Barbershop) ist aus methodischen Gründen extrem einfach: Es kommt mit zwei Klassen von Modellelementen (Transaktionen und Einrichtungen) und nur fünf verschiedenen Blöcken aus. Mit diesem Einführungsmodell gibt es noch keine Antwort auf die folgenden Fragen:
Wie lang wird die Warteschlange im Mittel und maximal?
Wie lang müssen die Kunden im Durchschnitt warten?
Wieviele Kunden können ohne zu warten sofort nach ihrem Eintreffen bedient werden?

Mit den bisher eingeführten Modellelementklassen und Anweisungen ist es nicht möglich, das Modell so zu modifizieren, dass es die folgende neue Situation berücksichtigt:
Joe arbeitet nicht länger allein. Er beschäftigt zwei Gehilfen.

Zur Beantwortung dieser Fragen und zur Einführung der neuen Situation in das Modell müssen neue Klassen von Modellelementen und neue Blöcke eingeführt werden:

Warteschlangen
oder Queues dienen der statistischen Erfassung von Wartezeiten eintretender Transaktionen und der Berechnung von Attributen, die auf das Warten bezogen sind: Mittlere und maximale Länge der Warteschlange, Anzahl der ohne Warten durchlaufenden Transaktionen und einige andere.
Als Beispiel dient ein Modell von Joe's Barbershop mit zwei Warteschlangen
Speicher
oder Storages benutzt man für Modelle mit mehreren, parallel arbeitenden Bedienern, Bedienungsstationen oder -kanälen. Ein mehrkanaliges Bedienungssystem kann mehrere Forderungen gleichzeitig bedienen. Ein Speicher hat ein definiertes Fassungsvermögen, seine Kapazität. Wenn sie erreicht ist, müssen eintreffende Transaktionen warten, bis Platz frei wird.
Als Beispiel dient ein Modell eines Salons mit zwei Friseuren.

WarteschlangenTop

Funktion
Blöcke
Standardattribute
Joe's Barbershop mit zwei Warteschlangen
Resultate: Joe's Barbershop mit zwei Warteschlangen

Funktion von WarteschlangenTop

Warteschlangen oder Queues dienen der Erfassung statistischer Daten über Verzögerungs-, Warte- oder Blockierzeiten von Transaktionen. Sie bilden wie die Einrichtungen eine Klasse statischer, passiver, permanenter Modellelemente.
Sie dienen ausschließlich statistischen Zwecken und haben keinen Einfluß auf den Ablauf der Prozesse und die Folge der Ereignisse im Modell. Sie sind durch eine Nummer identifizierbar und können darüber hinaus einen Namen tragen.
Transaktionen, die eine Warteschlange betreten, müssen diese auch wieder verlassen, bevor sie (z.B. durch TERMINATE) vernichtet werden.
Wenn eine Transaktion eine Warteschlange betritt (QUEUE) oder verläßt (DEPART), wird die Zeitdifferenz zwischen dem aktuellen Wert der Simulationsuhr und ihrem Wert zum Zeitpunkt des letzten Ein- oder Austritts aus der Schlange berechnet. Das Simulationssystem aktualisiert dann automatisch solche statistischen Werte wie die mittlere Länge der Warteschlange, den maximalen Inhalt und die mittlere Verweilzeit von Transaktionen in der Schlange.
Beliebig viele Transaktionen dürfen gleichzeitig eine Schlange belegen. Jede Transaktion darf gleichzeitig mehreren (maximal 6) Warteschlangen angehören. Transaktionen betreten eine Warteschlange in dem Moment, wo sie einen QUEUE-Block erreichen. Sie verlassen sie mit dem Erreichen des DEPART-Blockes.
Die Steueranweisung QTABLE, die später in Verbindung mit der Einführung von Tabellen vorzustellen sein wird, veranlaßt die Sammlung einer Wartezeitstatistik in Gestalt einer Häufigkeitstafel.

Blöcke für WarteschlangenTop

QUEUE
veranlaßt jede eintreffende Transaktion dazu, die Warteschlange zu betreten, deren Name oder Nummer als erster Operand (Operand A) angegeben ist. Im Normalfall wächst die aktuelle Länge der Warteschlange beim Betreten des QUEUE-Blockes um 1. Wenn aber ein zweiter Operand angegeben ist, bestimmt dessen Wert den Längenzuwachs der Warteschlange.
OperandInhalt
A Nummer oder Name der Schlange
B Anzahl der Einheiten, um die der Inhalt der Warteschlange zu erhöhen ist, wenn eine Transaktion den Block betritt
leer: 1
DEPART
veranlaßt die eintretende Transaktion, die Warteschlange zu verlassen.
Operand Inhalt
A Nummer oder Name der Warteschlange
B Anzahl der Einheiten, um die der Inhalt der Warteschlange zu verringern ist, wenn eine Transaktion den Block betritt
leer: 1

Numerische Standardattribute von WarteschlangenTop

NSA Bedeutung
Qj Aktueller Inhalt (Länge)
QAj Mittlerer Inhalt
QCj Gesamtzahl der Eintritte
QMj Maximaler Inhalt
QTj Mittlere Verweildauer aller eingetretenen Einheiten
QXj Mittlere Verweildauer aller echten Warteeinheiten
QZj Anzahl der ohne Warten durchgelaufenen Einheiten
j bezeichnet in der obenstehenden Tabelle einen Identifikator eines statischen Objektes. Für Identifikatoren, die auf ein bestimmtes Modellelement seiner Klasse (hier: Warteschlangen) verweisen, gibt es die folgenden drei Darstellungsformen:
  1. xpr : numerischer Ausdruck (z.B. Konstante)
  2. $ name
  3. (name)
Beispiele Numerischer Standardattribute für Schlangen
Q3 Aktueller Inhalt (Anzahl der Einheiten) der Warteschlange mit der Nummer 3
QC$SALON Anzahl der in die Schlange mit dem Namen SALON eingetretenen Einheiten
QM(WAIT) Maximaler Inhalt der Warteschlange mit dem Namen WAIT

Joe's Barbershop mit zwei WarteschlangenTop


Die Resultate der Abarbeitung des obigen Programms sind durch den Programmstart direkt erhältlich. Sie werden hier noch einmal auszugsweise als konstanter Text wiedergegeben. Der Auszug aus dem LIS-File beschränkt sich auf die Warteschlangenstatistik.
SLX-Modell

Resultate: Joe's Barbershop mit zwei Warteschlangen Top


   QUEUE   MAXIMUM    AVERAGE     TOTAL      ZERO   PERCENT    AVERAGE    $AVERAGE   
          CONTENTS   CONTENTS    ENTRIES   ENTRIES   ZEROS    TIME/UNIT  TIME/UNIT   
  SALOON         2      0.942       101         0               16.600      16.600   
 WAITJOE         1      0.062       101        60     59.4       1.101       2.712
  
Wie man sieht, enthält die GPSS/H-Standardausgabe eine Reihe von statistischen Werten, die in vielen Anwendungsfällen ausreichen. Wenn man weitere Informationen benötigt, kann man mit Hilfe der QTABLE-Anweisung ein Histogramm der Wartezeiten erzeugen.

Speicher Top

Funktion von Speichern
Steueranweisungen und Blöcke
Standardattribute
Joe's Salon mit zwei Friseuren
Zuordnung von Modellelementen zu realen Objekten
Resultate zum Modell: Salon mit 2 Friseuren
Joe's Salon mit Mittagspause und Ladenschluß

Funktion von SpeichernTop

Speicher oder Storages werden benutzt, um mehrkanalige Bedienungssysteme zu modellieren. Damit sind Bedienungssysteme gemeint, die zur selben Zeit mehr als eine Forderung bedienen können. Sie eignen sich ebenso zur Nachbildung von Vorratsbehältern für Güter aller Art, in denen ein- und ausgelagert werden kann.
Speicher haben eine Kapazität, deren Größe man definieren kann. Sie stellt den maximalen Inhalt dar. Der minimale Inhalt ist Null.
Wenn man die Speicherkapazität nicht definiert, wird sie als unendlich (praktisch 2^31) angenommen.
Sie sind durch eine Nummer identifizierbar und können darüber hinaus einen Namen tragen. Sie gehören zu den passiven, permanenten, statischen, speziellen Modellelementen.
Beispiele für die Nutzung von Speichern in GPSS-Modellen sind
Transaktionen werden daran gehindert, etwas im Speicher einzulagern, wenn dort zu wenig oder gar kein Platz mehr vorhanden ist.
Transaktionen können andererseits aus dem Speicher etwas entnehmen, solange genügend Inhalt vorhanden ist.

Steueranweisungen und BlöckeTop

STORAGE
ist eine Steueranweisung, mit der man die Kapazität eines oder mehrerer Speicher definieren kann. Zwei Formate sind möglich:
sname STORAGE capacity
 STORAGE Storage(s),capacity[Storage(s),capacity] ...
Im ersten Format spezifiziert die Marke sname den Namen oder die Nummer eines Speichers. capacity bezeichnet eine Konstante, deren Wert die Kapazität des Speichers festlegt. Das ist die Anzahl der Einheiten, die er maximal zu fassen vermag. In diesem Format kann man mit einer Anweisung nur eine Speicherkapazität festlegen.
Beispiele für STORAGE-Anweisungen im ersten Format
 
   SAM     STORAGE   30
 
   3       STORAGE   100
Das zweite Format der STORAGE-Anweisung erlaubt die Definition von mehr als einer Speicherkapazität in einer Anweisung.
Sj steht hier für den Speicher mit dem Identifikator j .
S2 bezeichnet den Speicher mit der Nummer 2.
S(name) und S$name
sind gleichbedeutende Bezeichnungen für einen durch seinen Namen identifizierten Speicher.
Sj-Sk mit j < k
bezeichnet alle Speicher mit den Nummern j, j+1, ..., k.
S(SAM)-S(JOE)
kann man schreiben, wenn man die interne Numerierung kennt und genau weiß, welche Speichernummern zwischen den Nummern der Speicher SAM und JOE liegen.
Das folgende Beispiel zeigt die Definition mehrerer Speicherkapazitäten durch eine einzige STORAGE-Anweisung:
STORAGE S1,10/S2-S4,20/S(SAM)-S(JOE),1000
BSTORAGE
ist ein Block, der es Transaktionen erlaubt, die Speicherkapazität dynamisch, d.h. während der Phase der Blockabarbeitung, festzulegen oder zu modifizieren.
BSTORAGE stimmt in seinen Operanden und seiner Funktion im übrigen mit der STORAGE-Steueranweisung überein.
Für Speicher, deren Kapazität undefiniert bleibt, wird als Default-Wert Unendlich (de facto 2^31) angenommen.

Sind Einrichtungen gleich Speichern der Kapazität 1?
Nein. Das sind die Hauptunterschiede:

Wenn eine Transaktion eine Einrichtung belegt, muß sie diese auch wieder verlassen. Wenn sie später vernichtet werden soll, gilt eine noch bestehende Einrichtungszugehörigkeit als Modellfehler. Wenn eine Transaktion einen ENTER-Block betritt, entsteht keine Bindung an den Speicher. Eine andere Transaktion, welche nie ENTER betreten hat, kann den Speicher mittels LEAVE entlasten.
Für jede Einrichtung besteht die Möglichkeit der Verdrängung einer gerade in ihr befindlichen Transaktion durch eine andere Transaktion. Für Speicher gibt es kein Verdrängungs- oder Vorrangbelegungskonzept.
ENTER
ist ein Block, der die Belastung oder Füllung eines Speichers beschreibt. Eine ankommende Transaktion darf ihn nur dann betreten, wenn genügend Platz im Speicher vorhanden ist, um eine oder mehrere Einheiten aufzunehmen. Sonst muß sie warten, bis genügend Platz frei ist. Der Block hat maximal zwei Operanden:
Operand Inhalt
A Nummer oder Name des Speichers
B Anzahl der in den Speicher aufzunehmenden Einheiten pro Eintritt einer Transaktion
leer:1
LEAVE
ist das Gegenstück zu ENTER: Wenn eine Transaktion den LEAVE-Block betritt, werden dem Speicher eine oder mehrere Einheiten entnommen.
Operand Inhalt
ANummer oder Name des Speichers
B Anzahl der Einheiten, die aus dem Speicher entfernt werden, wenn eine Transaktion den Block betritt
leer: 1
SUNAVAIL
ist ein Block, bei dessen Betreten eine Transaktion veranlaßt, dass ein Speicher unverfügbar (Not Available) wird. Die nächste Transaktion, die den Speicher beladen will, muß vor ENTER warten, bis der Speicher wieder verfügbar ist. SUNAVAIL beeinflußt den LEAVE-Block nicht: die Entlastung des Speichers ist auch weiterhin möglich.
Operand Inhalt
ANummer oder Name des zu sperrenden Speichers
SAVAIL
ist das Gegenstück zu SUNAVAIL: die ihn betretende Transaktion veranlaßt, dass ein zuvor gesperrter Speicher wieder freigegeben wird, so dass ein auf ihn bezogener ENTER-Block wieder betreten werden darf.
Operand Inhalt
A Nummer oder Name des Speichers, der wieder verfügbar gemacht werden soll

Numerische und Logische Standardattribute von SpeichernTop

Rj j
SjAktueller Inhalt (Kapazität = S+R)
SAjMittlerer Inhalt
SCjGesamtzahl der Einheiten, die den Speicher betreten haben
SEjWahr, wenn der Speicher leer ist
SFjWahr, wenn der Speicher voll ist
SMjMaximaler Inhalt
SNEjWahr, wenn der Speicher nicht leer ist
SNFjWahr, wenn der Speicher nicht voll ist
SNVj Wahr, wenn der Speicher nicht verfügbar ist
SPUjAnteil der Zeit der Nichtverfügbarkeit an der gesamten Simulationsdauer in Promille
SPVj Anteil der Zeit der Verfügbarkeit an der gesamten Simulationsdauer in Promille
SRjMittlere Auslastung in Promille
SRUjMittlere Auslastung während der Zeit der Unverfügbarkeit in Promille
SRVjMittlere Auslastung während der Zeit der Verfügbarkeit in Promille
STjMittlere Verweildauer einer Einheit im Speicher
SUAjMittlere Zeitdauer der Perioden der Unverfügbarkeit
SUNjAnzahl der Perioden der Unverfügbarkeit
SUTjGesamtdauer der Unverfügbarkeit
SVjWahr, wenn der Speicher verfügbar ist
Beispiele Numerischer Standardattribute für SpeicherTop
S4Aktueller Inhalt (Anzahl der Einheiten) des Speichers mit der Nummer 4
SNV$SHOPWahr, wenn der Speicher mit dem Namen SHOP nicht verfügbar ist
SA(BUNKER) Mittlerer Inhalt des Speichers mit dem Namen BUNKER

Joe's Salon mit zwei FriseurenTop



SLX

Eine der Neuigkeiten in diesem Programm besteht darin, dass die Blöcke ENTER CHAIRS und LEAVE CHAIRS je zweimal auftreten. Hier wird folgendes sichtbar: Zwei verschiedene Ströme von Transaktionen dürfen durchaus auf dieselbe Ressource, im Beispiel auf den Speicher CHAIRS zugreifen. Die später zu behandelnde Interne Steuerung sichert, dass beide Ströme nach dem FIFO-Prinzip in eine Kette wartender Transaktionen eingereiht werden, so dass derjenige Kunde/ diejenige Kundin zuerst einen Stuhl erhält, der/die zuerst angekommen ist.
Auch der Zutritt zur Schlange WAITAREA kommt in beiden Strömen vor.
Übrigens ist es ziemlich einfach, das Modell so einzurichten, dass wartende Herren wartenden Damen den Vortritt lassen: Man gibt den Damen bei ihrer Generierung durch GENERATE eine höhere Priorität. Den Rest regelt die Interne Steuerung.
Ein weiteres Problem ist anzumerken: Es soll hier nur mit einer Frage angedeutet werden: Kann es vorkommen, dass ein männlicher Kunde wartet und JOE gleichzeitig ebenfalls auf einen Kunden wartet? Antwort und Lösung des Problems erfolgen im nächsten Abschnitt.

Zuordnung von Modellelementen zu realen Objekten Top

In einer tabellarischen Übersicht soll dargestellt werden, welche Modellelementklassen ausgewählt worden sind, um reale Objekte abzubilden.

Reales Objekt Name Modellelementklasse
Kunde-Transaktion
Kunden, die auf einen freien Stuhl warten WAITAREA Warteschlange
Fünf Stühle für wartende Kunden CHAIRSSpeicher mit der Kapazität 5
Joe JOE Einrichtung
Zwei Damenfriseusen HAIRDRS Speicher mit der Kapazität 2

Dem Leser wird empfohlen, über die Zweckmäßigkeit der gewählten Zuordnung nachzudenken. Wozu benötigt man die Warteschlange für Warten auf freie Stühle?

Die Resultate der Abarbeitung des obigen Programms sind durch den Programmstart direkt erhältlich. Sie werden hier noch einmal auszugsweise als konstanter Text wiedergegeben.

Resultate zum Modell: Salon mit 2 FriseurenTop


RELATIVE CLOCK: 480.0000   ABSOLUTE CLOCK: 480.0000

BLOCK CURRENT     TOTAL  BLOCK CURRENT     TOTAL  BLOCK CURRENT     TOTAL  
1                    25  11                   37  21                    1 
2                    25  12                   37  22                    1 
3                    25  13                   37 
4                    25  14                   37 
5                    25  15                   37 
6                    25  16                   37 
7                    25  17                   37 
8           1        25  18                   37 
9                    24  19                   37 
10                   24  20                   37 


          --AVG-UTIL-DURING--                                                               
FACILITY  TOTAL  AVAIL  UNAVL     ENTRIES    AVERAGE   CURRENT  PERCENT  SEIZING  PREEMPTING
           TIME   TIME   TIME               TIME/XACT   STATUS   AVAIL     XACT      XACT   
     JOE  0.788                        25      15.125    AVAIL               62 


          --AVG-UTIL-DURING--                                                                                          
 STORAGE  TOTAL  AVAIL  UNAVL     ENTRIES    AVERAGE   CURRENT  PERCENT    CAPACITY     AVERAGE     CURRENT     MAXIMUM
           TIME   TIME   TIME               TIME/UNIT   STATUS   AVAIL                 CONTENTS    CONTENTS    CONTENTS
  CHAIRS  0.431                        62      16.665    AVAIL   100.0            5       2.153           0           5
 HAIRDRS  0.943                        37      24.458    AVAIL   100.0            2       1.885           0           2



   QUEUE     MAXIMUM      AVERAGE       TOTAL        ZERO     PERCENT      AVERAGE      $AVERAGE     QTABLE     CURRENT
            CONTENTS     CONTENTS      ENTRIES     ENTRIES     ZEROS      TIME/UNIT    TIME/UNIT     NUMBER    CONTENTS
WAITAREA           1        0.012          62          60       96.8         0.091         2.811                      0

Nun ist es auch möglich, die mit der Einführung des obigen Modellbeispiels gestellte Frage zu beantworten: Im Tagesverlauf ist es tatsächlich zweimal vorgekommen, dass Kunden auf einen freien Stuhl warten mußten. Insgesamt sind 62 Einheiten eingetreten; davon brauchten 60 nicht zu warten.
Die Standardausgabe gibt Aufschluß über den zum Schluß des Simulationslaufes erreichten Stand. Wie man den Speicherinhalten und dem Zustand der Einrichtung entnimmt, ist nach 8 Stunden folgender Stand eingetreten:
JOE hat gerade einen Kunden auf dem Stuhl. Er war zu 78.8% ausgelastet.
Seine beiden Mitarbeiterinnen sind momentan nicht beschäftigt. Ihre durchschnittliche Auslastung beträgt 94.3%. Klar ist, dass diese an einem Tag beobachteten Werte zufällig sind und dass ein neuer Lauf mit anderen Zufallszahlen andere Resultate hervorbringt.
Wie man Serien von Zufallsexperimenten veranlaßt und steuert, wird im Abschnitt 5.6 beschrieben.

Joe's Salon mit Mittagspause und LadenschlußTop

In den bisher vorgestellten Beispielen sind die Blöcke SAVAIL und SUNAVAIL nicht benutzt worden. Das folgende Beispiel soll veranschaulichen, wie man vorgehen kann, um in den durch den Transaktionsfluß bestimmten Ablauf eines Bedienungsprozesses einzugreifen und diesen Prozeß durch die Vorgabe einer Pausen- und einer Ladenschlußzeit zu steuern.


SLX

Das obige Modell hat einige Ungereimtheiten. Ist es wirklich sinnvoll, die Simulation genau eine Stunde nach Ladenschluß abzubrechen? Sollte man nicht lieber warten, bis der letzte Kunde bedient ist? Ist es richtig, anzunehmen, dass auch während der Mittagspause ankommende Kunden auf den Stuehlen Platz nehmen und darauf warten, dass die Friseure ihre Arbeit wieder aufnehmen?
Im nächsten Abschnitt sollen die Voraussetzungen dafür geschaffen werden, derartige Ungereimtheiten zu beseitigen.

KontrollfragenTop

  1. Sind Warteschlangen statische oder dynamische, temporäre oder permanente, allgemeine oder spezielle, passive oder aktive Modellelemente?
  2. Wie beeinflussen Warteschlangen den Ablauf eines Simulationsmodells?
  3. Wie sind Warteschlangen identifizierbar?
  4. Beschreiben Sie das Zusammenwirken von Transaktionen und Warteschlangen!
  5. Welche Anweisungen sind mit Warteschlangen verbunden?
  6. Beschreiben Sie die Funktion des QUEUE-Blockes!
  7. Beschreiben Sie die Funktion des DEPART-Blockes!
  8. Geben Sie drei Beispiele für Numerische Standardattribute von Warteschlangen an!
  9. Sind Speicher statische oder dynamische, temporäre oder permanente, allgemeine oder spezielle, passive oder aktive Modellelemente?
  10. Hat das Betreten eines Speichers Einfluß auf den Ablauf der Ereignisse im Modell?
  11. Wie werden Speicher identifiziert?
  12. Wie kann man Speicherkapazitäten definieren?
  13. Beschreiben Sie das Zusammenwirken von Speichern und Transaktionen!
  14. Welche Blöcke sind mit Speichern verbunden?
  15. Vergleichen Sie Einrichtungen und Speicher!
  16. Beschreiben Sie die Funktionen der Blöcke ENTER und LEAVE!
  17. Beschreiben Sie die Funktion der Blöcke SAVAIL und SUNAVAIL!
  18. Kann eine Transaktion einen LEAVE-Block eines nicht verfügbaren Speichers betreten?
  19. Geben Sie drei Numerische Standardattribute von Speichern an!
  20. Geben Sie drei Logische Standardattribute von Speichern an!
SAHome previous next up Englishbigger fonts Top Line
Last Modified Fri 05-27-11 06:54 GMT Valid CSS!

Comments please to:pelosim@yahoo.com