Peter Lorenz English smaller fonts Simulation und Animation

3.6. Funktionen

Funktionen sind im GPSS etwas anderes, als in den meisten Programmiersprachen. Unter einer Funktion versteht man im GPSS/H - ganz wie in der Mathematik, eine Zuordnungsvorschrift, die jedem Element x einer Menge X (Definitionsbereich oder Menge der Werte einer unabhängigen Veränderlichen) genau ein Element y einer anderen Menge Y (Wertebereich oder Menge der Werte einer abhängigen Veränderlichen) zuordnet. Diese Zuordnung ist eindeutig. Aber sie braucht nicht umkehrbar eindeutig zu sein. Wie in der elementaren Mengenlehre definiert man Definitionen als Wertetabellen.
Eine Besonderheit gewisser Funktionen liegt darin, dass die Funktionswerte durch Interpolation berechnet werden oder dass die Funktionswerte sich aus dem Wert von Ausdrücken berechnen, in denen Standardattribute vorkommen dürfen. Ein spezieller Funktionstyp ordnet vom Nutzer gewählten Namen von Instanzen angegebener Modellelementklassen automatisch Nummern zu und gibt dem Nutzer die Möglichkeit einer relativen Indizierung ausgewählter Instanzen. Das braucht man für große Modelle, die in Teilmodelle oder Module zerlegt werden. Dabei sollten absolute Zuordnungen von Nummern und Namen grundsätzlich vermieden werden.

3.6.1 Die FUNCTION-Anweisung Top Line

FUNCTION ist eine Steueranweisung, welche reellen Argumentwerten in eindeutiger Weise Funktionswerte zuordnet und dieses durch eine Wertetafel beschreibt. Ihre Syntaxdarstellung lautet

label FUNCTION argument, ftyp npaare[,meclass,...]
X(1),Y(1)/X(2),Y(2)/.../X(n),Y(n)

Codierung von Funktionstypen
C Stetig mit numerischen Werten
D Diskret mit numerischen Werten
L Listenfunktion mit numerischen Werten
E Diskret mit Attributwerten
M Listenfunktion mit Attributwerten
S Objekt- oder Symbolfunktion
(Funktion vom Typ S)
argument
spezifiziert die unabhängige Variable oder das Argument der Funktion. Das Argument kann ein beliebiger reellwertiger Ausdruck sein. Die einzige Einschränkung in GPSS/H ist, dass dieser Ausdruck nicht direkt oder indirekt auf die gerade zu definierende Funktion zugreifen darf. Rekursionen dieser Art sind im GPSS/H nicht erlaubt und rekursive Berechnungen werden als Laufzeitfehler behandelt.

ftyp npaare
umfaßt zwei Teile, die lückenlos aneinanderzuketten sind:
  • ein Zeichen ftyp, das den Funktionstyp entsprechend der nebenstehenden Tabelle spezifiziert, und
  • eine Integerzahl npaare, welche die Anzahl der geordneten Paare angibt, welche in der nächsten Zeile, der sogenannten Funktionsfolgezeile, enthalten sind.
meclass
ist nur für Funktionen vom Typ S anzugeben. Hier werden Symbole für Klassen von Modellelementen angeführt, die in den Wirkungsbereich der Funktion einzubeziehen sind. Die Codierung erfolgt nach der bei Einführung der EQU-Anweisung angegebenen Tabelle. Wenn mehrere Typen verwendet werden, müssen die einzelnen Typbezeichner durch Kommas voneinander getrennt sein.

Einer FUNCTION-Anweisung müssen eine oder mehrere Funktionsfolgeanweisungen oder Function follower statements folgen, welche Folgen geordneter Paare zur Berechnung der Funktion enthalten. Diese Anweisungen werden gewöhnlich im freien Format codiert, wobei jedes (X(i),Y(i)) - Paar vom nächsten durch das Zeichen / getrennt ist.

Funktionsfolgeanweisungen können auch im festen Format codiert werden, wobei für jeden X(i)- und Y(i)-Wert sechs Spalten verwendet werden mit maximal sechs geordneten Paaren pro Anweisung. GPSS/H unterscheidet Funktionsfolgeanweisungen im festen Format von denen im freien Format, indem es die ersten 20 Spalten untersucht. Falls ein Komma gefunden wird, dann ist es das freie Format, ansonsten das feste Format.

x-Werte von Funktionen können numerische Konstanten oder Symbole sein. Falls Symbole verwendet werden, muß ihnen mit Hilfe der Anweisungen SYN oder EQU vorher ein Wert zugewiesen worden sein.
Bei Funktionen der Typen L und M können die x-Werte weggelassen werden. Falls vorhanden, müssen sie sich in streng aufsteigender Reihenfolge befinden.

y-Werte von Funktionen können für alle außer den S-Funktionen entweder numerisch oder symbolisch angegeben werden. Bei S-Funktionen (Objekt - Funktionen) müssen die y-Werte symbolisch angegeben werden. Funktionen vom Typ E und M (attributiert) gestatten die Verwendung von Ausdrücken als y-Werte.

Symbole, die in Funktionen vom Typ S benutzt werden, besitzen Objekttypen, die in der FUNCTION-Anweisung vom Typ S spezifiziert werden. Bei allen Funktionstypen außer dem S-Typ werden Symbole, die als y-Werte dienen, als absolute Symbole behandelt, d.h. für solche Symbole wird kein Objekttyp vorausgesetzt.

Aktuelle Funktionswerte liefert das Standardattribut FNj. Hier steht j für die Nummer oder den Namen der Funktion, der als label der FUNCTION-Anweisung angegeben wurde.

3.6.2 Stetige numerische Funktionen

Die Berechnung einer Funktion vom Typ C erfolgt folgendermaßen:

  1. Der Wert des Arguments der Funktion wird berechnet und wenn notwendig in den Typ Gleitkomma umgewandelt.
  2. Die geordneten Paare (X,Y), welche die Funktion definieren, werden in aufsteigender Reihenfolge durchsucht.
    • Falls der Wert des Arguments kleiner oder gleich X(1) ist, beträgt der Rückgabewert für die Funktion Y(1).
    • Falls der Wert der unabhängigen Variablen größer oder gleich als X(n) ist, wobei es n geordnete Paare in der Funktion gibt, wird der Wert Y(n) zurückgegeben.
    • Liegt der Wert der unabhängigen Variablen zwischen X(i) und X(i+1) für ein beliebiges i, wird der Funktionswert berechnet als lineare Interpolation zwischen den Punkten (X(i),Y(i)) und (X(i+1),Y(i+1)).

Das ist die erzeugte Resultattabelle:

  X          FN(CLINE)      FN(DLINE)
 -1.0           2.0              2.0
 -0.5           2.0              2.0
  0.0           2.0              2.0
  0.5           2.1              3.0
  1.0           2.2              3.0
  1.5           2.3              3.0
  2.0           2.4              3.0
  2.5           2.5              3.0
  3.0           2.6              3.0
  3.5           2.7              3.0
  4.0           2.8              3.0
  4.5           2.9              3.0
  5.0           3.0              3.0
  5.5           3.0              3.0
  6.0           3.0              3.0

3.6.3 Diskrete numerische Funktionen

Eine Funktion vom Typ D wird wie folgt berechnet:

  1. Das Argument der Funktion wird berechnet und wenn notwendig in den Typ Gleitkomma umgewandelt.
  2. Falls der Wert des Arguments kleiner oder gleich X(1) ist, beträgt der Funktionswert Y(1). Falls der Wert des Arguments größer als X(n) ist, wobei es n geordnete Paare in der Funktion gibt, wird der Wert Y(n) zurückgegeben.
  3. Liegt der Wert des Arguments zwischen X(1) und X(N), wird das kleinste i gesucht, so dass X(i) größer oder gleich dem Wert der unabhängigen Variablen ist. Der Rückgabewert der Funktion ist Y(i).

Das obenstehende Programmbeispiel enthält bereits eine Funktion vom Typ D. Im folgenden Beispiel wird gezeigt, wie man diese Funktionen benutzen kann, um Zufallszahlen mit gegebener empirischer Verteilung zu erzeugen. (Die Grundlage dieses Verfahrens ist die Nutzung der Umkehrfunktion der Verteilungsfunktion. Das Verfahren wird im Abschnitt 3.8. auch anhand einer Skizze genauer erklärt.) Modelliert werden sollen Kundengruppen, die in einem Supermarkt eintreffen. Es gebe eine Statistik, wonach, die Kunden

Im folgenden Programmbeispiel wird eine Folge von Zufallszahlen aus der Menge {1, 2, 3, 4} erzeugt, die mit den angegebenen Wahrscheinlichkeiten auftreten. Die Funktion DDIS benutzt das Argument FRN1: ein Standardattribut, das bei jedem Aufruf eine Zufallszahl aus dem Intervall (0, 1) liefert.

Wenn man dieses Programm aufruft, sieht man deutlich die Dominanz des Auftretens der Werte 1 und 2 und die geringe Anzahl auftretender Werte 3 und 4.

3.6.4 Numerische Listenfunktionen Return

Der Wert einer Funktion vom Typ L wird wie folgt berechnet:

  1. Das Argument der Funktion wird berechnet und, wenn notwendig, in den Typ Integer umgewandelt.
  2. Der Wert des Arguments wird direkt als Index (i) verwendet. Der Rückgabewert der Funktion ist Y(i). Falls der Wert des Arguments kleiner als 1 oder größer als die Anzahl der Wertepaare in der FUNCTION-Folgeanweisung ist, wird ein Laufzeitfehler angezeigt.

Bei Funktionen vom Typ L dürfen die X-Werte weggelassen werden, da sie ignoriert werden. Die Kommas jedoch, welche die X-Werte von den Y-Werten trennen, müssen immer angegeben werden.

Wenn das Argument des obigen Beispiels die unzulässigen Werte 4 annimmt, wird der Programmlauf mit einer Fehlermeldung abgebrochen. Vorher wird aber die Wertetafel der Funktion für die Argumentwerte 1, 2 und 3 erzeugt und ausgegeben.

In verkürzter Form kann man die obenstehende Listenfunktion auch wie folgt definieren:

NLF FUNCTION &I,L3,20/,70/,444

3.6.5 Diskrete attributierte Funktionen Top Line

Bei einer Funktion vom Typ E kann jeder Y(i) -Wert ein einzelner Term eines Ausdrucks oder ein geklammerter Ausdruck sein. Der Wert einer solchen Funktion wird wie folgt berechnet:

  1. Das Argument der Funktion wird berechnet und, wenn notwendig, in den Typ Gleitkomma umgewandelt.
  2. Die X(i)-Werte der Funktion werden auf die gleiche Weise durchsucht wie bei Funktionen vom Typ D, wobei der passende Y(i)-Wert ausgewählt wird. Der Unterschied ist, dass eine Funktion vom Typ E gestattet, dass der Y(i)-Wert ein Ausdruck ist, während er bei einer Funktion vom Typ D eine Konstante sein muß.

Experimentieren Sie mit diesem Programm durch Variation der Werte von &I und vergleichen Sie die Resultate.

3.6.6 Attributierte Listenfunktionen Top Line

Bei einer Funktion vom Typ M kann jeder Y(i)-Wert der Funktion ein einzelner Term eines Ausdruckes oder ein geklammerter Ausdruck sein. Der Funktionswert wird wie folgt berechnet:

  1. Der Argumentwert der Funktion wird berechnet und, wenn notwendig, in den Typ integer umgewandelt.
  2. Der Wert des Arguments wird direkt als Index (i) zur Auswahl eines Y(i)-Ausdruckes verwendet, welcher den Rückgabewert der Funktion darstellt. Falls der Wert der unabhängigen Variablen kleiner als 1 oder größer als die Anzahl der in der Funktion definierten Punkte ist, wird ein Laufzeitfehler angezeigt und die Ausführung abgebrochen.

Bei Funktionen vom Typ M dürfen die X-Werte weggelassen werden, da sie ignoriert werden.

Die Kommas jedoch, welche die X-Werte von den Y-Werten trennen, müssen immer angegeben sein.

3.6.7. Objektfunktionen Top Line

Bei Funktionen vom Typ S müssen die Y(i) - Werte Symbole sein. Jedes dieser Symbole repräsentiert ein Objekt aus einer oder mehreren Modellelementklassen. Diese Klasse bzw. Klassen werden in der FUNCTION-Anweisung angegeben. Jedem als Y(i) - Wert verwendeten Symbol wird vom Compiler ein eigener Wert zugewiesen.

Die Regeln, nach denen dies geschieht, sind im Abschnitt 3.3 des Kapitels 3 beschrieben worden. Der Wert einer Funktion vom Typ S wird auf die gleiche Weise wie der einer Funktion vom Typ D berechnet.

Funktionen vom Typ S werden besonders nützlich, wenn man große Modelle zu schaffen hat, die aus Teilmodellen bestehen. Mit Funktionen vom Typ S kann man für Serien von Instanzen von Modellelementklassen relative Nummern oder Indizes vergeben. So kann man das fehlende Array-Konzept im GPSS/H überbrücken.

Kontrollfragen über Funktionen

  1. Wie wird das Argument einer Funktion definiert und welche Form darf es haben?
  2. Welche Typen von Funktionen kennen Sie?
  3. Erklären Sie Funktionen vom Typ C! Wie erfolgt die Zuordnung von Funktionswerten zu Argumentwerten?
  4. Erklären Sie Funktionen vom Typ D! Wie erfolgt die Zuordnung von Funktionswerten zu Argumentwerten?
  5. Wozu dienen Funktionen vom Typ S? Vergleichen Sie mit der EQU-Anweisung!
  6. Wie kann man eine Zufallsgröße, die dem Resultat beim Würfeln (1, . . . , 6) entspricht, durch eine GPSS/H-Funktion ausdrücken?
  7. Nutzen Sie eine Funktion vom Typ C, um eine Gleichverteilung im Intervall (2, 5) zu definieren!
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