ppt-Datei

Werbung
Projekt Simulation: Einführung
Simulation in a Nutshell
- Teil 2  Simulation und Modellbildung
 Klassifikation von Simulationsmethoden
 Zeitsynchrone Simulation: ein Beispiel
 Ereignisgesteuerte Simulation - eine Fallstudie
 Analyse und Interpretation von Simulationsläufen
Literatur: Pagé, B.: Diskrete Simulation, Springer Verlag, 1991
Vorlesungsfolien Informatik 2, F. Mattern, TH Darmstadt, 1997
hs / fub - AWSys/Sim1
Beispiel: Telefonischer Fahrkartenvertrieb
Fragen über Fragen:
- wie viele Verkäufer?
- Wie lange dauert es, bis ein Kunde bedient ist?
- Werden alle in "etwa" der gleichen Zeit bedient?
- Wie viel Anrufe kommen "in der Zeiteinheit" an? Was heißt das??
- Genauer: wie groß ist der Abstand zwischen zwei Anrufen?
- Wie lange wartet eine Kunde, bevor er aufgibt und auflegt?
- Wie viele Kunden können sich maximal in der Warteschleife aufhalten?
hs / fub - AWSys/Sim2
Eine Anwendung
Beispiel Reisebüro: Telefonische Fahrkartenreservierung
Systemspezifikation:
1. 5 Angestellte nehmen Buchungen entgegen.
2. 18 Telefonleitungen (d. h. max. 13 Anrufer warten).
3. “Bitte warten” wenn alle Angestellten belegt.
4. Angest. wird frei --> am längsten wartenden bedienen (FIFO).
5. Wartebereitschaft der Kunden im Mittel 4 Min. (normalverteilt).
6. Endgültiger Verzicht eines Kunden, wenn keine
Leitung frei oder Wartezeit überschritten.
7. Zwischenankunftszeiten exponentialverteilt (20 Sek.).
8. Bedienzeit exponentialverteilt (mit Mittel 1 Min.
bei einfacher Fahrt, 2 Min. bei Rückfahrkarte).
9. Wahrscheinlichkeit für Rückfahrkarte = 0.75.
hs / fub - AWSys/Sim3
Zufallszahlen
Im richtigen Leben hat man es oft mit Zufallszahlen (Zufallsgrößen) zu tun:
- die Zahl beim Würfeln
- die Wartezeit beim Bäcker (zwischen 7 und 8)
- die Zeit zwischen zwei Anrufen beim Kartenservice
....
...
...
Der Abstand zwischen zwei Anrufen ist eine zufällige Größe.
Man nennt X eine Zufallsvariable, wenn sie die Werte einer
Zufallsgröße annimmt.
Die Variable X = "Abstand zwischen zwei Anrufen“ ist eine
Zufallsvariable.
hs / fub - AWSys/Sim4
Verteilungsfunktion
Zufallsfallsvariable X :
Die Funktion F(x) = P(X < x) Wahrscheinlichkeit dafür, dass X < x
heißt Verteilungsfunktion.
Wahrscheinlichkeit,
dass die Zeit
zwischen 2 Anrufen
"bis zu 4 Minuten"
beträgt
Exponentialverteilung
Mittelwert l = 0.33 min
hs / fub - AWSys/Sim5
Dichtefunktion
Wahrscheinlichkeit,dass
Abstand zwischen zwei
Anrufen zwischen
2 und 4 Minuten liegt .
Exponentialverteilung
Mittelwert l = 0.33 min
Aus der Dichtefunktion f(x) läßt sich ablesen, mit welcher Wahrscheinlichkeit
die Zufallsvariable Werte zwischen a und b annimmt, denn die
Verteilungsfunktion F(x) ist definiert:
x
F(x) =  f(t) dt
-
hs / fub - AWSys/Sim6
Fragen?
1. Wie weiß man, welche Verteilung eine Zufallsvariable hat?
Weiß man normalerweise anfangs nicht!
- analysiere kumulative Häufigkeiten (empirische Verteilung)
- bestimme daraus empirische Verteilung
- oder teste Vermutung, dass Daten
in bestimmter allgemeiner Weise
(normal, exponentiell,...)
verteilt sind und
teste diese Hypothese
(mit statistischen Testverfahren)
- oder es ist bekannt, dass gewisse Prozesse sich
nach gewissen Verteilungen zufällig verhalten (z.B. normalverteilt).
Dann müssen "nur noch" die Parameter bestimmt werden, besonders
Mittelwert und Varianz.
hs / fub - AWSys/Sim7
Fragen?
2. Wie erzeugt man Zufallszahlen?
Erzeugung wichtig, da "echter Zufall" im Rechner nicht existiert.
Denkbar: Tabellen echter Zufallszahlen. Nicht handlich...
Vorteil von Pseudozufallszahlen: Reproduzierbarkeit
Gleichverteilte Zufallszahlen? Andere Verteilungsfunktion?
Gleichverteilung F(x) = x
1
1
Dichte: f(x) = 1
(zwischen 0 und 1)
0
1
(zwischen 0 und 1
zwischen a und b:
1/(b-a))
0
1
Kongruenzenverfahren:
z i+1 = (a * z i ) mod p, p große Primzahl
Liefert Zufallszahlen zwischen 0 und p-1, Normierung auf 0<= z < 1
Im Simulationsprojekt: Java Klasse zur Erzeugung von Zufallszahlen benutzen.
hs / fub - AWSys/Sim8
Zufallszahlen
Erzeugen anderer Verteilungen aus gleichverteilten Zufallszahlen
(eine von mehreren Möglichkeiten)
Z.B. Exponentialverteilung aus Gleichverteilung
Idee: Verteilungsfunktion F(x) bildet eine (0,1) gleichverteilte Größe
auf F(x) ab.
Umkehrfunktion x = F-1(y),
z.B. x = -1/l * ln (1-y)
(0,1)-gleichverteilter
Y-Wert liefert F(x)verteilten x-Wert
hs / fub - AWSys/Sim9
Zufällige Größen im Beispiel
• Zwischenankunftszeit der Anrufe

• Dauer eines Kartenverkaufs an einen Kunden (Bediendauer)
exponentialverteilt (einfache Fahrt: Mittelwert 1 min, Rückfahrt: 2 min
• Art der Aufträge (mit unterschiedlicher Bediendauer !)
diskrete Verteilung (nur endlich viele mögliche Werte):
p = 0,25: einfache Fahrt, p = 0,75 = Rückfahrkarte
• Geduld–am–Ende – Zeit: Wann legt der Kunde auf, bevor
er bedient wird?
Normalverteilt, Mittelwert = 4 Min
hs / fub - AWSys/Sim10
Ereignisgesteuerte Simulation
Ereignisse und Aktivitäten
Aktivität
A2
Aktivität 3
Akti. 4
Aktivitäten können überlappen (Anruf und Kartenverkauf)
Ereignisse entsprechen nicht in allen Fällen Anfang und Ende
einer Aktivität.
- Anfang / Ende verschiedener Ereignisse können zusammenfallen:
"Ende Warten = Beginn Bedienung"
- Ereignis ohne Dauer: "Geduld am Ende"
hs / fub - AWSys/Sim11
Modellentwurf „Kartenverkauf“
Zustand des Modells (" als Schnappschuß"):
- Status (frei / beschäftigt) jedes Angestellten
- Anzahl der freien Leitungen
Genügt hier nicht die Anzahl?
- Menge der wartenden Anrufer
Braucht man die Identität
oder nur die Anzahl ?
- Anruf --> Beginn Bedienung / Warten
- Ende Warten (freie Bediener / abgelaufene
Geduld)
Ereignistypen
Ereignistypen ?
- Ende Bedienung
Zustandsübergänge
Aus Sicht eines
individuellen
Kunden
hs / fub - AWSys/Sim12
Ereignisgesteuerte Simulation
hs / fub - AWSys/Sim13
Ereignisgesteuerte Simulation
Ereigniszeit statt synchroner Ticks
Nur ein Bediener!
K1 AR,Beg.
Bedienung
9.00
K2 AR,Beg.
Warten
9.02
K3 AR,Beg.
Warten
9.03
K3 Gibt auf
9.07
K3 Ende
Bedienung
9.06
K1 Ende
Bedienung
9.05
K2 Gibt auf
9.04
K4 AR
9.05
Wert der Zufallsvariable "Zwischenankunftszeit"
Erzeugung der Events
K1 AR Beg.
Bedienung
9.00
K1 Ende
Bedienung
9.05
K2 AR Beg.
Warten
9.02
K2 Gibt auf
9.04
K3 AR Beg.
Warten
9.03
Bei Benden des
Wartens erzeugt
K3 Bedien-EndeEvent
K3 Gibt auf
9.07
K4 AR
9.05
K3 Ende
Bedienung
9.06
hs / fub - AWSys/Sim14
Modellierung
Welche Ereignisse (Ereignistypen)?
Ist nicht auch
• neuer Kunde kommt; versucht zu wählen! Bedienanfang
ein Ereignis?
• Ende der Geduld; nur wenn in Warteschleife
• Bedienende; Kunde verlässt das System
Welche Zustände?
• # freie Bediener
• Schlange der wartenden Kunden
• # freier Leitungen
Wartende Kunden
sind keine Ereignisse
Welche Ergebnisdaten?
• Wartezeit pro Benutzer
• Anteil der abspringenden Kunden
• mittlere Warteschlangenlänge
• mittlere Auslastung von Leitungen / Bedienern
•.....
hs / fub - AWSys/Sim15
Der Zyklus der Simulation
Hier muß ein erstes
Ereignis erzeugt
werden, damit
es los geht. Ggf. auch
ein letztes!
Initialisieren
N
Gibt es noch
ein Ereignis
Y
Ende der Simulation,
Gesamtstatistik
Ende: „das letztes Ereigns“
bearbeitet oder Uhr > Sim.zeit
Uhr =
Zeit des nächsten
Ereignisses
Ereignis aus Ereignisliste entnehmen
Zustandsänderung
gemäß Ereignisroutine
Hier passiert was:
Zustand verändern,
neue Ereignisse erzeugen.
Ggf. StatistikAusgabe
Es wird also immer das
jüngste Ereignis
bearbeitet. Dabei fallen
ggf. neue Ereignisse an.
hs / fub - AWSys/Sim16
Die Ereignisroutinen
Kundenanruf
Nächsten Kundenanruf vormerken
alle Leitungen
besetzt?
Auszuführen bei Eintritt des
Ereignisses
abgewieseneKd++
Trick: erhält die Simulation am
Leben. Hat das mit Kausalität
zu tun? Kundenanruf ursächlich
für nächsten Kundenanruf??
freiLeitungen --;
Sachbearbeiter
frei?
Kundensatz erzeugen, in Kundenwarteschlange
bediener--;
Bedienroutine
ausführen
Hier wird auch das Endeereignis erzeugt!
GeduldEndeEreignis
vormerken
hs / fub - AWSys/Sim17
Die Ereignisroutinen (2)
Bedienende
freieLeitungen++;
Ja
KdWarteschlange
leer?
Kunden aus KdWarteschlange entnehmen,
Kdsatz löschen
Bedienroutine
ausführen
bedienert++;
GeduldEnde
Lösche
Kundensatz
freieLeitungen++;
hs / fub - AWSys/Sim18
Bedienung
Bedienroutine
GeduldEndeereignis
löschen
ggf. Statistikdaten schreiben
u. Ausgaben
Beachte: es gibt zwei Arten
von Objekten in der ereignisgesteuerten Simulation:
- Ereignisse: im wesentlichen
intern, treiben die Simulation
- nach der Realität modellierte
Dinge, wie Warteschlange mit
Kunden
Bedienende-Ereignis
einplanen
hs / fub - AWSys/Sim19
Der ereignisgesteuerte Simulator schematisch
Uhr (Simulationszeit)
springt zum jeweils
nächsten Ereignis,
17
23
25
12
Zustand
Programmcode
Ereignisroutinen: ändern
den Zustand, einschl.
Erzeugung ggf. zukünftiger
Ereignisse.
Ereignisrepräsentation:
prinzipiell ausreichend
- Zeit
- Ereignistyp
hs / fub - AWSys/Sim20
Die Kunst des (ereignisorientierten) Modellierens
Aktivitäten so in Ereignisketten auflösen, dass
warum Bsp. nicht
zeitgesteuert??
• Realität adäquat vom Modell widergespiegelt wird
• Wechselwirkungen zwischen Aktivitäten auf die Ereignisse
beschränkt sind
• Ereignisse sich korrekt einplanen
• Ereignisroutinen die Zustandsveränderungen richtig wiedergeben.
Entscheidende Frage:
wie gut spiegelt das Simulationssystem die Realität wider?
• Modell adäquat?
• entsprechen die angesetzten Wahrscheinlichkeitsverteilungen
den wahren Verhältnissen?
• Sind die Ergebnisse (statistisch) vertrauenswürdig?
hs / fub - AWSys/Sim21
Planung und Analyse von Experimenten
Zielgröße(n) festlegen:
- Was soll untersucht werden?
Hypothesen formulieren (zu jedem Experiment gehört Hypothese!)
- Wovon hängen Zielgrößenwerte ab?
- In welcher Größenordnung
Fixieren der Parameter für das Untersuchungsziel
Beispiel:
- Wie lassen sich die Wartezeiten so verkürzen, dass nur noch
jeder die 10 % der wartenden Kunden abspringt?
- Hypothese: mehr Personal
- Ziel: Aussage, wieviele Kunden prozentual abspringen,
wenn nur statt n n+1, n+2, ... Mitarbeiter eingesetzt werden?
- Zielgröße: Kundenabsprung als Funktion von Anzahl eingesetzter MA
Wichtig: Welches Vertrauen kann man in Ergebnisse haben? -> Statistik
hs / fub - AWSys/Sim22
Einschwingphase
Zufallsvariable (Zielgröße)
xt
Und was ist hiermit?
Verkehrsimulation: Rush hour?
t
Einschwingvorgang
a) Heuristische Verfahren:
- Augenmaß
- Max / Min-Test: in Folge x0, x1, ...xi, x i+1,... prüfen, ob xi Max oder Min der xj, i<j
wenn nein: diese Restfolge mit erstem Glied xi+1 nehmen.
b) Statistische Testverfahren
hs / fub - AWSys/Sim23
Schätzgenauigkeit der Ergebnisse
Abstraktes Simulationsproblem:
- Gesucht die Verteilungsfunktion F(X) einer Zufallsvariable des
Modells (z.B. Anzahl der Kunden in der Warteschleife)
- Oft ausreichend: Erwartungswert der unabhängigen Zufallsvariablen
schätzen
E [X ] = m =  x f(x) dx
- x1,x2,...xn sei Ausgang eines Experiments (z.B. die gemessenen Längen
der Warteschlange zu n Zeitpunkten)
- Mittelwert ist erwartungstreuer Schätzwert für echten Mittelwert m :
x = (1/n)
S xi
i=1..n
, d.h
lim ( (1/n)
S xi ) = m
n ->  i=1..n
- reicht aber nicht für genauere Aussagen. Beispiel...
hs / fub - AWSys/Sim24
Schätzgenauigkeit
Beispiel aus der Literatur:
Für Bedien- / Wartesystem mit exponentialverteilter Zwischenankunftsund Bedienzeit lässt sich Mittelwert analytisch errechnen (M/M/1-Bediensystem)
Erwartungswert für Warteschlangenlänge bei bestimmten Parametern:
m = 4,86
Aber X = 3,2 bei Stichprobe von n = 1000
Wie bestimmt man m ?
X ist selbst eine Zufallsvariable mit dem Mittelwert E(X) = m
Abschätzen, mit welcher Wahrscheinlichkeit der wahre Mittelwert m in
einem Intervall [x – cn , x + cn ] liegt.
hs / fub - AWSys/Sim25
Schätzgenauigkeit der Simulationswerte
„Mit Wahrscheinlichkeit 0.95
findet man den wahren Wert
der Anrufer , die aufgeben, iin
diesem Intervall
t
Mit welcher Wahrscheinlichkeit (Konfidenzniveau) befindet sich
der wahre Wert m in einem gegebenen Intervall (Konfidenzintervall)
- Typische Aufgabe der Statistik, nicht simulationsspezifisch.
hs / fub - AWSys/Sim26
Konfidenzintervall
Tatsächlicher, unbekannter Mittelwert
Experiment 1
x-cn
x+cn
x
Experiment 2
x-cn
x
x+cn
Experiment n
x-cn
x
x+cn
hs / fub - AWSys/Sim27
Schätzen der Lage des Mittelwerts
Es gilt : der wahre Mittelwert liegt bei genügend großem n
mit von z abhängiger Wahrscheinlichkeit im Intervall:
[ x - z* s/( n) , x + z * s/( n)]
wenn die unbekannte Verteilung die Varianz s hat.
Also cn = z* s/( n)
z = 1,96 : Wahrscheinlichkeit beträgt 0,95, dass m im Intervall.
Wie groß ist Streuung s ??
Schätzen!
hs / fub - AWSys/Sim28
Varianz schätzen
Schätzer für Varianz :
Varianz:
Var(X) = E[(X-E(X))2] = s2 =  (x – m)2 f(x) dx
Var(X1+X2+...Xn) = Var(X1) + Var(X2) + ... + Var(Xn)
für unabhängige Xi
Wenn s2 Varianz der Xi, dann s(X) = s /  n
Schätzwert dafür : s 2 = 1/(n-1) S (x i - x ) 2
Standardabweichung: s ~ s =  s2
Damit : Mittelwert m liegt mit 95%iger Wahrscheinlichkeit im Intervall
[ x - 1,96* s/( n) , x + 1,96 * s/( n)]
(*)
Wichtige Voraussetzung: die X sind unabhängig! Anzahl Versuche groß !
n >= 30
hs / fub - AWSys/Sim29
Vorgehen
• Unabhängige Simulationsläufe, die die interessierenden Größen jeweils
zu einem neuen Stichprobenwert zusammenfassen.
• Mit den n unabhängigen Simulationsläufen Konfidenzintervall für E(X) mit (*)
bestimmen.
• Verfahren funktioniert nur bei unabhängigen Versuchen
• n >= 30
• Sehr aufwendig, da die die gesamte Simulation wiederholt werden muß.
• Es gibt statistische Verfahren mit geringerem Aufwand
hs / fub - AWSys/Sim30
Beispiel
Experiment i
gemessener Mittelwert x
1
2
3
4
5
6
7
8
9
10
x = 5.96
s = 1.19
1.96* s/( n) = 0.74
x  0.74 = [5.22, 6.7]
5,9
6.4
6.0
6.0
4.7
8.6
4.0
6.4
5.7
5.9
Tatsächlicher Mittelwert m
Liegt mit Wahrscheinlichkeit
0,95 im Intervall [5.22, 6.7]
hs / fub - AWSys/Sim31
Validierung
... ist schwierig!
Klassifikation der Validierungsschritte stammt
von Pagé (s. Literatur)
• Stimmt das konzeptuelle Modell mit Realität überein?
- Experten befragen,
- Verifikation der Verteilungsannahmen durch Analyse von echten Daten
•Modellverifikation
Tut das System das, was es soll?
- Prinzipien der Entwicklung großer Programme beachten,
- Plausibilitätsprüfungen
• Operationale Verifikation
Stimmen das dynamisch Modellverhalten mit der Realität überein?
(für Prognosemodelle offenbar besonders schwer. 20 Jahre warten??)
- Vergleich mit historischen Daten
- Vergleich von Verteilungen von echten und von Modelldaten
(statistische Testverfahren)
- unabhängiges Modell erstellen, rechnen und vergleichen
hs / fub - AWSys/Sim32
Herunterladen