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