Upload
hoangthuy
View
215
Download
0
Embed Size (px)
Citation preview
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� ��������������� �!�"#� �"$%��"�&
�������'������( ������)
Diskrete Simulation
Einführung
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� *�������������� �!�"#� �"$%��"�&
�������'������( ������)
Inhalt
• Prinzip der diskreten Simulation
– Modellierung mit Ereignissen
– Verarbeitungsprozesse und Betriebsmittel
• DEVS – Modelle
• Diskreter Simulationsalgorithmus
• Abbildung von diskreten Modellen in AnyLogic
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� +�������������� �!�"#� �"$%��"�&
�������'������( ������)
• Reduzierung des Verhaltens auf die wesentlichen Ereignisse
• Modellierung der Änderungen an Ereigniszeitpunkten
• Modellierung der Zeitspannen zwischen den Ereignissen
S
T
s
1
Zeitspanne ?
s2
diskreteZustands-änderung
Beispiele:
• Abfahrt - Ankunft
• Bestellung - Lieferung
• Schicken - Empfangen
• von einem zum nächstenSchwellwert
• Input - Output
• Beginn - Ende Tätigkeit
Ereignisorientierte Modellierung
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� ,�������������� �!�"#� �"$%��"�&
�������'������( ������)
Beispiel: Simulation von Gatterschaltungen
• Bei der Simulation von Gatterlogik (Logiksimulation) werden die Schaltvorgänge auf diskrete Werte und Ereignisse abstrahiert.
• Dabei werden in den Gattern „Gatterlaufzeiten“ berücksichtigt, die die zeitliche Verzögerung der Signale in den Gattern darstellen.
• Eventuell werden auch Leitungslaufzeiten berücksichtigt
&
0 1 2 3 4 5 6 78
0 1 2 3 4 5 6 78
0 1 2 3 4 5 6 78
0 1 2 3 4 5 6 78
Verzögerung durch Leitungslaufzeit
Verzögerung durch Gatterlaufzeit
+
0 1 2 3 4 5 6 78
0 1 2 3 4 5 6 78
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� -�������������� �!�"#� �"$%��"�&
�������'������( ������)
Zeitspannen
• Wesentlich ist die Modellierung der Zeitspannen zwischen den Ereignissen
– Abstraktion der Aktivitäten / Tätigkeiten auf die Zeitspannen von Anfang und Ende
• Möglichkeiten der Modellierung von Zeitspannen
– deterministisch: exakte Zeitspanne wird durch eine „Formel“ bestimmt
– stochastisch: Zeitspanne wird zufällig nach einer bestimmten Zufallsverteilung bestimmt
� siehe stochastische Simulation
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� .�������������� �!�"#� �"$%��"�&
�������'������( ������)
Prinzip der diskreten Simulation
• parallele Entitäten
• mit durch Ereignisse begrenzten Aktivitäten
• Ereignisse zu unterschiedlichen, beliebigen Zeitpunkten
• Abarbeitung der Ereignisse in zeitlicher Ordnung
• Simulation „springt“ von Ereignis zu Ereignis
����������
������
���������������
�����������
����������
����� ������
���������
�����
�������������
����� ����
������
����������������
������
���������
�����
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� /�������������� �!�"#� �"$%��"�&
�������'������( ������)
Prinzip der diskreten Simulation
• Aufgrund der aktuellen Zustände lassen sich die Zeitpunkte, wann die nächsten Ereignisse auftreten, bestimmen
• Zustandsänderungen passieren nur bei Ereignissen
• Zu jedem Zeitpunkt gibt es ein nächstes Ereignis, bis dahin passiert nichts (keine Zustandsänderungen, keine neuen Ereignisse)
• Dieses nächste Ereignis wird durchgeführt:
– entsprechende Zustandsänderungen werden gemacht
– eingeplante aber hinfällige Ereignisse werden gelöscht
– neue Ereignisse werden eingeplant
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� 0�������������� �!�"#� �"$%��"�&
�������'������( ������)
Anwendungen der diskreten Simulation
Diskrete Prozeßsimulation: Leistungsanalyse von Systemen– Fertigungssysteme– Transportsysteme– Verkehrssysteme– Computersysteme (Rechnerarchitektur)– Kommunikationssysteme– LAN– Betriebliche Abläufe– Lagerbestandshaltung– ...
Aber auch allgemein Verhaltensanalyse– Hardwareentwurf (Logik)– ereignisorientiertes Simulation von kontinuierlichem Verhalten – ...
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� �1�������������� �!�"#� �"$%��"�&
�������'������( ������)
Diskrete Prozesssimulation
Systemen gesehen als
– Betriebsmittel (Resourcen)
– Verarbeitung von Elementen unter Verwendung von Betriebsmittel
Untersuchung von Systemen bezüglich Leistung:
– Durchsatz
– Umlaufzeiten
– Wartezeiten
– Bearbeitungszeiten
– Auslastung/Belegung der einzelnen Komponenten
– Engpässe
– erforderliche Größe der Pufferplätze, Warteschlangen, Lager
– Verhalten bei Ausnahmefällen, Ausfällen, Fehlverhalten
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� �-�������������� �!�"#� �"$%��"�&
�������'������( ������)
DEVS - Discrete Event Specified System
DEVS = < X, S, Y, δint, δext, ta, λ >
X: Menge der Eingabeereignisse
Y: Menge der Ausgabeereignisse
S: die Menge der Zustände
δext: Q x X → S externe Übergangsfunktion
mit Q = { (s,e) | s ∈S und 0 � e � ta(s)
ta: S → R+∪{0, ∞} Zeitfortschrittsfunktion assoziiert mit jedem Zustand
eine Zeitspanne, die dieser Zustand von sich aus
bestehen bleibt bevor ein interner Zustandsübergang
ausgelöst wird.
δint: S → S interne Übergangsfunktion (zeitgetriggerte Ereignisse)
λ: S → Y Ausgabefunktion
Formalismus für ereignisorientierte Systeme analog den Automaten und Differentialsystemen
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� �.�������������� �!�"#� �"$%��"�&
�������'������( ������)
Verhalten eines DEVS–Modells
2 Ereignisse
• interne Ereignisse (zeitlich eingeplante Ereignisse, Zeitereignisse)
– War das System zu einem Zeitpunkt t für ta(s) Zeiteinheiten im Zustand s (die seit dem letzten Ereignis vergangene Zeit e ist gleich ta(s) ), so tritt ein internes Ereignis auf, d.h.
– es wird das System in den Zustand s’ = δint(s) übergeführt,
– die Ausgabe λ(s) gemacht und
– die vergangene Zeit e wird auf 0 gesetzt
• externe Ereignisse (Eingabeereignisse)
– War das System zu einem Zeitpunkt t für e ≤ ta(s) Zeiteinheiten im Zustand s und tritt ein Eingabeereignis x auf,
– so wird das System in den Zustand s’ = δext(s,e,x) übergeführt und
– die vergangene Zeit e wird auf 0 gesetzt.
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� �/�������������� �!�"#� �"$%��"�&
�������'������( ������)
Single Server Bespiel: Einfache
Bedienstation
Beispielproblem: Schalter mit einem Schalterbeamten
folgende Fragen:
- durchschnittliche Länge der Warteschlange
- durchschnittliche Wartezeit- Durchsatz- Auslastung des Beamten
SingleServer: Ankunft - Warten - Verarbeitung
�������������������������������������������������������� ����
������������ �� ������� ������� ������� ����� ��������������������
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� �2�������������� �!�"#� �"$%��"�&
�������'������( ������)
Zeit Ereignis eingeplanteFolgeereignisse
0 Ankunft a, Beginn der Bedienung a 5: Ende der Bedienung a
5 Ende Bedienung a
7 Ankunft b, Beginn der Bedienung b 12: Ende der Bedienung b
9 Ankunft c, Einreihen in Warteschlange c
12 Ende Bedienung bBeginn der Bedienung c 17: Ende der Bedienung c
... ....
Single Server: Simulation
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� �0�������������� �!�"#� �"$%��"�&
�������'������( ������)
a
in
phase
b c
busy
idle
out
a b c
queue
( )
(a)
( )
(b)
(b c)
(c)
( )
SingleServer: Verhalten
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� *1�������������� �!�"#� �"$%��"�&
�������'������( ������)
SingleServer: DEVS-Modell
SingleServer = (X, Y, S, δext, δint, λ, ta)X = { in | in ∈ {a, b, c, ... } }Y = { out | out ∈ {a, b, c, ... }}S = {(timeLeft, phase, queue) |
timeLeft ∈ ℜ+0∞ , phase ∈ {idle, busy}, queue ∈ {a, b, c, ... }*}
δext (((timeLeft, phase, queue), e, in)queue = queue.insert(in) case (phase)
idle: phase = busytimeLeft = 10
busy: phase = busytimeLeft = timeLeft - e // continue with the current job
δint,λ ((timeLeft , phase, queue))out = queue.getFirst() // output is the first in the queuequeue = queue.removeFirst()if queue.isEmpty()
then phase = idletimeLeft = ∞ // no jobs to process, hence passivate
else timeLeft = 10 // begin to service next job
ta ((timeLeft, phase, queue))return( timeLeft ) // the time advance specified by timeLeft
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� *��������������� �!�"#� �"$%��"�&
�������'������( ������)
in / queue.insert(in); timeLeft = timeLeft – e;
timeLeft [queue.size() == 1] / out.send(queue.getFirst(); queue.removeFirst();
in / queue.insert(in); timeLeft = SERVICE_TIME
idle
busy
timeLeft [ ! queue.size > 1 ] / out.send(queue.getFirst(); queue.removeFirst(); timeLeft = SERVICE_TIME
Single Server: Blockdiagram und Statechart-Modell
�������������������������������������������������������� ����
������������ �� ������� ������� ������� ����� ��������������������
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� *.�������������� �!�"#� �"$%��"�&
�������'������( ������)
Generator: Erzeugen von Elementen
Generator = <Y, S, δint, λ, ta>
Y = {out out ∈ Jobs}S = {(timeLeft, nrGenerated) timeLeft ∈ ℜ+0∞, jobId ∈ {a, b, c, ...}} }
δint ,λ ((timeLeft, phase, queue, IA_TIME))out = jobIdjobId == next jobId nrGenerated=+1timeLeft = IA_TIME
ta ((timeLeft, phase, queue)) return( timeLeft )
• aktives DEVS
• ohne Eingabe
• Generierung von ereignisorientierten Trajektorien ���������
���
������ ���������� ����
�������
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� */�������������� �!�"#� �"$%��"�&
�������'������( ������)
Sink: Aufnahme von Elementen
• passiv
• nur externe Eingaben
• Berechnung des Durchsatzes
Sink = <X, S, δext>
X = {in in ∈ Jobs}
S = {(thruput, number, totalTime) thruput ∈ ℜ, number ∈ N, totalTime ∈ ℜ}
δext ((thruput, number, totalTime), e, in)number = number + 1totalElapsedTime = totalTime + ethruput = number / totalTime
ta ((timeLeft, phase, queue)) = ∞
s0 = (0, 0, 0) // Anfangszustand
����
������� ����� �������
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� *2�������������� �!�"#� �"$%��"�&
�������'������( ������)
DEVS-Netzwerke (DEVN oder gekoppelte DEVS)
DEVN = < X, Y, D, EIC, EOC, IC, Select >
X ist die Menge der Eingabewerte
Y ist die Menge der Ausgabewerte
D ist die Menge der Komponenten
EIC ist die externe Eingabekopplung
EOC ist die externe Ausgabekopplung
IC ist die interne Kopplung
Select : 2D → D ist die Konfliktlösefunktion (tie breaking function)
wobei
– Elemente d ∈ D sind atomare oder gekoppelte DEVS Modelle
– EIC ist die Menge der Kopplungen von Eingabeports des gekoppelten DEVS zu Eingabeports von Komponenten
– EOC ist die Menge der Kopplungen von Ausgabeports von Komponenten zu Ausgabeports des Netzwerks
– IC ist die Menge der Kopplungen zwischen den Komponenten, d.h. Kopplungen von Ausgabeports von Komponenten zu Eingabeports von Komponenten.
– Die Funktion Select wählt bei Gleichzeitigkeit von nächsten internen Ereignissen eine Komponente aus
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� *0�������������� �!�"#� �"$%��"�&
�������'������( ������)
Beispiel eines DEVS Netzwerks
in out
SingleServer
JobGe
nerator
Thru
put
in
in
out
out
Env
Env-SingleServer
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� +1�������������� �!�"#� �"$%��"�&
�������'������( ������)
Beispiel eines DEVS Netzwerks: Mengenschreibweise
Env = < X, Y, D, EIC, EOC, IC, Select >
X = {in | in ∈ {a, b, c, ... }}
Y = {out | out ∈ {a, b, c, ... }}D = {Generator, Thruput}
EIC = {(Env.in, Thruput.in}
EOC = {(Generator.out, Env.out)}
IC = { }
Select : { } → { }{Generator} → {Generator}{Thruput} → {Thruput}{Generator, Thruput} → {Generator}
Env-SingleServer = < X, Y, D, EIC, EOC, IC, Select>
X = { }
Y = { }
D = {SingleServer, Env}
EIC = {}
EOC = {}
IC = {(Env.out, SingleServer.in), (SingleServer.out, Env.in)}
Select = (SingleServer, Env)
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� +��������������� �!�"#� �"$%��"�&
�������'������( ������)
Simulationsalgorithmus für diskrete Systeme (allgemein)
Datenstrukturen
– Modell mit Zuständen und Zustandverhalten bei Ereignissen
– Simulationszeit
– Ereignisliste: Liste von eingeplanten Ereignissen nach Zeitpunkt sortiert
Simulationsschleife
do
Gehe zu Ereignis mit minimaler Ereigniszeit (*)
Setze Simulationszeit auf diese Ereigniszeit
Führe Ereignis durch, d.h.
führe alle Zustandsänderungen durch
plane neue Ereignisse ein bzw. lösche nicht mehr gültige Ereignisse
until Ende der Simulation
(*) bei mehreren Ereignissen mit gleicher nächster Zeit entscheide nach einer vorgegeben Priorität
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� +*�������������� �!�"#� �"$%��"�&
�������'������( ������)
Simulationsalgorithmus für DEVS Modelle
n Komponenten
DEVSd = < Xd, Sd, Yd, δint,d, δext,di, tad, λd >mit
tnd = t + tad(sd) ist der nächste Zeitpunkt für internes Ereignis bei d
Simulationsschleife
� ��� �������� ��������� � ����!��������� ����������� "�#����$��������������� #��%� �������#%���������������&�#%�������#��'��δ������(#��)� �������������*���������&���� ����#�+����λ�� (#��)� �"�����#&����λ(#�),����������� ��&�����������!����������"
#�'������(#�-��-�.�)� ���������"��.������*���������&���#-���.���+���������/����(#�) ������� "�#��#����&�#�����!���������"���
��������/�����(#��)0�) ������� "�#��#����&�#�����!��������� ����������� �� ����������
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� ++�������������� �!�"#� �"$%��"�&
�������'������( ������)
Implementierung von Ereignislisten
• Anforderungen :
– schneller Zugriff auf das minimale Element
– schnelles Löschen und sortiertes Einfügen von Elementen
• Varianten:
– lineare Liste
– Heap
– AVL-Bäume
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� +,�������������� �!�"#� �"$%��"�&
�������'������( ������)
Binärer Baum organisiert nach der
Heap-Bedingung: Ein Vaterknoten ist immer kleiner als seine Söhne
Sortieren des Baums:
Ein Knoten wird durch Sickern nach oben oder unten richtig einsortiert
→ Sickern durch Vertauschen von Vater- und Sohnknoten
Ein Knoten sickert nach oben, wenn sein Vater größer als er selbst ist
Ein Knoten sickert nach unten, wenn sein kleinerer Sohn kleiner als er selbst ist.
Komplexität:
Zugriff auf das kleinste Element: Zugriff auf die Wurzel (Komplexität O(1))
Löschen des ersten Elements: Ersetzen des ersten durch das letzte Element und eventuell sickern nach unten (Komplexität O(ld n))
Einfügen eines neuen Knotens: Einfügen an die letzte Stelle und eventuell sickern nach oben (Komplexität O(ld n))
Neu Einsortieren eines eingefügten Knotens: Sickern nach oben oder unten (Komplexität O(ld n))
Heap für Ereignislisten
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� +.�������������� �!�"#� �"$%��"�&
�������'������( ������)
Diskrete Simulation in AnyLogic
AnyLogic bietet für die diskrete Simulation
• Statecharts mit
– Port und dynamic events
– Time Events
– Change Events
• Timers
• Ports und Message-Kommunikation
– inklusive Queue bei Ports
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� +/�������������� �!�"#� �"$%��"�&
�������'������( ������)
AnyLogic Statecharts: Zeitereignis
• Zeitspanne bis Transition triggern soll
– konstanter Wert, Bsp.: 2.56
– jeder Ausdruck, welcher einen numerischen Wert liefert,
insbesondere Zufallsverteilungen, welche eine zufällige Zeitspanne liefern sollBsp.: ���������� ���� ���
Trigger:
myDistrExponent.get()Trigger: 2.56
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� +2�������������� �!�"#� �"$%��"�&
�������'������( ������)
AnyLogic Timers
Es gibt:
– Chart oder Static timers:
• werden im Strukturdiagramm angelegt
• sind statisch
• werden mit � ������ ������ ������ ����� immer wieder gestartet und mit � � �� � �� � �� � � angehalten
Timers sind Objekte die Ereignisse in der Zeit auslösen und bei Auslösen Ihre Expiry action ausführen.
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� +0�������������� �!�"#� �"$%��"�&
�������'������( ������)
AnyLogic Timers (2)
– Dynamic Timers
• werden abgeleitet von ���������� ����������� ����������� ����������� �
• Verhalten:
– werden dynamisch mit Zeitspanne erzeugt,
– laufen ab,
– führen ihre Expiry action aus und
– werden dann zerstört
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� ,1�������������� �!�"#� �"$%��"�&
�������'������( ������)
AnyLogic Timers (3): Beispiel Delay
� ���-Baustein mit � ������ ������
– nimmt ein Objekt auf und
– gibt es verzögert am Ausgabeport ������������ aus
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� ,��������������� �!�"#� �"$%��"�&
�������'������( ������)
Ereigniscode in AnyLogic
• Bei Zustandsübergängen in Statecharts bei ������������������������
• Bei Timers bei ���������������� ������������������������
• Bei den Ports in den Code-Teilen
���� � �� ����������� � �� ����������� � �� ����������� � �� �������
���� ������������� ������������� ������������� ���������
Achtung: dieser Action-Codes müssen immer mit
� �������� ��� �������� ��� �������� ��� �������� ��
abschließen, wenn die Message weiter behandelt werden soll !!!!
Dis
kre
te S
imu
lati
on
����������������� ������������������� ��������� ,*�������������� �!�"#� �"$%��"�&
�������'������( ������)
AnyLogic Beispielmodell
SingleServer