powerpoint - 10-diskretesimulationssw.jku.at/general/staff/hp/simtech_ss04/folien/10-diskrete... ·...

17
Diskrete Simulation !"#"$% "& ’ ( ) Diskrete Simulation Einführung Diskrete Simulation * !"#"$% "& ’ ( ) Inhalt Prinzip der diskreten Simulation Modellierung mit Ereignissen Verarbeitungsprozesse und Betriebsmittel DEVS – Modelle Diskreter Simulationsalgorithmus Abbildung von diskreten Modellen in AnyLogic

Upload: hoangthuy

Post on 23-Jul-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

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

Dis

kre

te S

imu

lati

on

����������������� ������������������� ��������� ,+�������������� �!�"#� �"$%��"�&

�������'������( ������)

AnyLogic Modellbeispiel

Generator, Sink, gekoppeltes Modell