En överblick. Pseudo-parallell simulering. Snabbköpsexemplet, forts. Två olika sätt att modellera och simulera. Schedulering

Relevanta dokument
Händelsestyrd simulering. Inledning. Exempel

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.

Trådar. Aktiva objekt

Tung bakgrundsaktivitet t.ex. Aktiva objekt t.ex. Animering, simulering. DD2385 Programutvecklingsteknik Några bilder till föreläsning 9 6/5 2013

Tentamen i Introduktion till programmering

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Fö relä sning 2, Kö system 2015

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Tentamen i Programmeringsteknik I

Fö relä sning 1, Kö system vä ren 2014

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Länkade listor, stackar och köer

Extend för Dummies Teknologer

Del A (obligatorisk för alla)

Föreläsning 8: Exempel och problemlösning

Att skriva till och läsa från terminalfönstret

Fö relä sning 1, Kö system 2015

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Grundläggande datalogi - Övning 2

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Chapter 4: Writing Classes/ Att skriva egna klasser.

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Ordlistor, filhantering och ut på webben. Linda Mannila

Språket Python - Del 2 Grundkurs i programmering med Python

Övning 1 - Abstrakta datatyper

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Redovisning av inlämningsuppgifter

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

Abstrakta datatyper Laboration 2 GruDat, DD1344

Objektorienterad Programkonstruktion. Föreläsning jan 2017

Tentamen i Grundläggande Programvaruutveckling, TDA548

PARALLELL OCH SEKVENTIELL DATABEHANDLING. Innehåll

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen i EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas.

Arbeta med databas. Översikt. Lektion 1: Arbeta med Entity Data Models. Arbeta med Entity Data Models. LINQ (Language Integrated Query).

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Programmering II (ID1019) :00-12:00

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Programmering grundkurs

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

C++ Slumptalsfunktioner + switch-satsen

Föreläsning 5-6 Innehåll

Föreläsning 3-4 Innehåll

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Simulering av ett Multi-skill callcenter Med varierande genomsnittlig betjäningstid beroende på agenters kunskapsnivå

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Lektion 2: Sökagenter. Robin Keskisärkkä

Systemanalys, Modellbyggnad och simulering, 3p Molekylär Bioteknik

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Kunna dra slutsatser om t ex ett systems betjäningstider och antalet köplatser genom att tolka diagram.

Föreläsning Datastrukturer (DAT036)

SIMULINK. En kort introduktion till. Polplacerad regulator sid 8 Appendix Symboler/block sid 10. Institutionen för Tillämpad Fysik och elektronik

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Övningsuppgifter kapitel 8

Iteration while-satsen

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Objektorienterad programmering

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Programmering grundkurs

Namn Stil Dokumentation Objekt-orienterad programmering OBS OBS OBS OBS OBS OBS OBS OBS

Typkonvertering. Java versus C

Objektorienterad Programkonstruktion. Föreläsning jan 2016

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

Stokastisk geometri. Lennart Råde. Chalmers Tekniska Högskola och Göteborgs Universitet

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036)

Mer om klasser och objekt

[] Arrayer = Indexerad variabel

729G04 Programmering och diskret matematik. Python 3: Loopar

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Performance QoS Köteori. Jens A Andersson (Maria Kihl)

Föreläsning 1. NDAB02 Statistik; teori och tillämpning i biologi

Föreläsning 3. Stack

Institutionen för datavetenskap, DAT060, Laboration 2 2 För denna enkla simulerings skull kommer handen att representeras som ett par tal μ värdet på

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Föreläsning 8 Programmeringsteknik och Matlab DD1312. Klassmetod. Egen modul

Länkade strukturer. (del 2)

Föreläsning 6. NDAB01 Statistik; teori och tillämpning i biologi

Obligatorisk uppgift: Simulering av köer i ett trafiksystem

Tentamen FYTA11 Javaprogrammering

Planering Programmering grundkurs HI1024 HT 2014

Föreläsning 2 Programmeringsteknik och C DD1316

Transkript:

En överblick Pseudo-parallell simulering Kjartan Halvorsen Systemteknik Inst för IT Uppsala Universitet På föreläsningen Simulering pseudo-parallell simulering SimPy Implementering av snabbköpsexemplet Inlämningsuppgift Introduktion, hjälptider -4-6 Två olika sätt att modellera och simulera Vi skiljer mellan Händelsestyrd simulering Beskriv alla händelser och konsekvenser av dessa. Pseudo-parallell simulering Beskriv erna som ingår i modellen, och hur dessa interagerar. Processerna påverkar varandra händelser leder till följdhändelser. Pseudo-parallell simulering Schedulering Huvudprogram Modellen är parallell, men i simuleringen exekveras endast en åt gången. Detta styrs m.h.a. en lista med tidpunkter för när en ska exekveras, samt vart i en exekveringen ska ta vid. Initiera modeller eventlist time @ modell modell modell Simulera Slut Model

Processtillstånd Processtillstånd, forts Processerna kan befinna sig i olika tillstånd aktiv Processen står först i händelselistan och exekverar. Det kan endast finnas en aktiv samtidigt i simuleringen. passiv Processen exekverar inte och finns inte med i händelselistan. suspenderad Processen exekverar inte, men finns med i händelselistan. terminerad Processen är avslutad, och kan inte aktiveras igen. Byte av tillstånd Processen som aktiveras flyttas in (oftast först) i händelselistan. En kan inte aktivera sig själv. Den aktiva en passiverar sig själv gem att ge upp (temporärt) exekveringen utan att sättas upp på händelselistan. hold Processen sätts upp på händelselistan för att fortsätta exekveringen länger fram. terminera Processen har löpt klart. Snabbköpsexemplet, igen Vi beskriver varje med flödesscheman enter store (is d) ( ) queue empty? remove first from queue serve Kassa shop enter queue idle? leave (is d) Kund initiate, load data wait random time ) closing time? create and new Kundgenerator generator generator) Huvudprogram () simulate generator print results Main program

Simulera för hand, igen Snabbköpsexemplet, facit Givet följande slumptal Tid mellan ankomster.4,.9,.8, Tid att handla.3,.8,. Betjäningstid.6,.,.4 Simulera snabbköpssystemet för hand. Ställ upp händelselistan för de första sekunderna. Tid Process @ Kommentar. Kassa Blir passiv direkt. Kundgenerator Väntar, åter aktiv:.4.4 Kundgenerator Väntar, åter aktiv: 3.3.4 Kund Handlar, väntar, åter aktiv: 4.7 3.3 Kundgenerator Väntar, åter aktiv: 6. 3.3 Kund Handlar, väntar, åter aktiv: 5. 4.7 Kund In i kö, aktivera Kassa, passiv 4.7 Kassa ar betj, väntar, klar: 6.3 5. Kund In i kö, passiv 6. Kundgenerator Väntar, åter aktiv:? 6. Kund 3 Handlar, väntar, åter aktiv: 8. 6.3 Kassa Betj klar, aktivera K, betj K klar: 8.5 6.3 Kund Lämnar butiken SimPy Processtillstånd Processtillstånd, SimPy, forts. Antag två objekt: c = (name= " Kund " ) reg = (name= " Kassa " ) Byte av tillstånd i SimPy (c,c.goshopping()) Metoden goshopping i kund-objektet kommer exekveras. Denna metod omtalas som Process Execution Method (PEM) i SimPy-dokumentationen. Byte av tillstånd i SimPy I en PEM: yield, self Exekveringen av PEM stoppas, och kommer återupptas vid obestämt tidpunkt. Argumenten och self returneras från PEM. hold I en PEM: yield hold, self,.34 Exekveringen av PEM stoppas, men kommer återupptas när simuleringstiden har löpt ytterligare.34 tidsenheter. Argumenten hold, self och flyttalet.34 returneras. Snabbköpsexemplet, igen Vi beskriver varje med flödesscheman (is d) ( ) queue empty? remove first from queue serve def serve ( s e l f ) : while : s e l f. i d l e = # Väntande kunder? while ( Q!= [ ] ) : # Nä sta kund ur kön c = Q. pop ( ) # B e t j äna. t = Rnd. expovariate ( srate ) # Tilbaka. A k t i v e r a kund r e a c t i v a t e ( c ) # Kön tom. Ta paus s e l f. i d l e = y i e l d, s e l f enter store shop enter queue idle? leave (is d) def goshopping ( s e l f ) : # K o l l a s i m u l e r i n g s t i d e n # v i d ankomst a r r i v e = w ( ) # Handla. t = Rnd. rmalvariate ( 3,. ) # Och sedan i n i kö Q. append ( s e l f ) # A k t i v e r a kassan om passiv i f reg. i s I d l e ( ) : r e a c t i v a t e ( reg ) # Vänta i p a s s i v t l äge y i e l d, s e l f # T i l b a k s e f t e r b e t j äning # Tiden i butiken wait = w ( ) a r r i v e

wait random time closing time? create and new () generator def generate ( s e l f ) : i = while : # Vänta t = Rnd. expovariate ( arate ) i f (w ( ) > closet ) : break # A k t i v e r a ny kund. i += c = ( name = \ " Kund%d "%(i, ) ) a c t i v a t e ( c, c. goshopping ( ) ) initiate, load data generator simulate print results Main program ) generator) # I n i t i e r a s i m u l a t o r n i n i t i a l i z e ( ) # Skapa och a k t i v e r a erna reg = (name= " Kassa " ) a c t i v a t e ( reg, reg. serve ( ) ) cg = Generator ( ) a c t i v a t e ( cg, cg. generate ( ) ) # Simulera t i d s e n h e t e r simulate ( u n t i l =) # S k r i v ut r e s u l t a t Simulera med SimPy Givet följande slumptal Tid mellan ankomster.4,.9,.8, Tid att handla.3,.8,. Betjäningstid.6,.,.4 Simulera snabbköpssystemet. Ta fram händelselistan för de första sekunderna. Observera kölängd och väntetider i simuleringen Monitor-objekt är väldigt smidiga för att göra observationer under simuleringens gång, t.ex: class G: qmonitor = Monitor ( ) ; waitmonitor = Monitor ( ) Q = [ ] class ( Process ) def goshopping ( s e l f ) : a r r i v e = w ( ) y i e l d hold, s e l f, shoppingtime G. Q. append ( s e l f ) # A k t u e l l kö l ängd G. qmonitor. observe ( len (G. Q ) ) y i e l d, s e l f # Tid i butiken wait = w ( ) a r r i v e G. waitmonitor. observe ( wait ) Snabbköpet, simuleringen from SimPy.SimulationTrace import istället för from SimPy.Simulation import ger a c t i v a t e <Kassa > at time : p r i o r : False a c t i v a t e <Kundgenerator > at time : p r i o r : False < Kassa > hold < Kundgenerator > delay :.4.4 a c t i v a t e <Kund > at time :.4 p r i o r : False.4 hold < Kundgenerator > delay :.9.4 hold < Kund > delay :.3 3.3 a c t i v a t e <Kund > at time : 3.3 p r i o r : False 3.3 hold < Kundgenerator > delay :.8 3.3 hold < Kund > delay :.8 4.7 r e a c t i v a t e <Kassa > time : 4.7 p r i o r : False 4.7 < Kund > 4.7 hold < Kassa > delay :.6 5. < Kund > 6. a c t i v a t e <Kund3 > at time : 6. p r i o r : False 6. <Kundgenerator > terminated 6. hold < Kund3 > delay :. 6.3 r e a c t i v a t e <Kund > time : 6.3 p r i o r : False 6.3 hold < Kassa > delay :. 6.3 <Kund > terminated 8. < Kund3 > 8.5 r e a c t i v a t e <Kund > time : 8.5 p r i o r : False 8.5 hold < Kassa > delay :.4 8.5 <Kund > terminated 9.9 r e a c t i v a t e <Kund3 > time : 9.9 p r i o r : False 9.9 < Kassa > 9.9 <Kund3 > terminated Observera kölängd och väntetider i simuleringen, forts. Monitor-objekten är i princip en lista av observationer [ t,y]. qmon.count() returnerar antal observationer. qmon.total() summan av alla observationer. qmon.mean() = qmon.total()/ qmon.count(). qmon.timeaverage() beräknar ett viktat medelvärde, beroende på tiden mellan varje observation. qmon.timevariance() Viktat beräkning av variansen.

a/stoppa simuleringen Hitta SimPy dokumentation Simuleringen startas med anropet SimPy.Simulation.simulate(until=4) Simuleringen tar slut när det första av följande inträffar Simuleringstiden når sluttiden (i det här fallet 4) Händelselistan töms Anropet SimPy.Simulation.stopSimulation() exekveras Dokumentation för SimPy: http://simpy.sourceforge.net/simpydocs/index.html Se även http://simpy.sourceforge.net/simpy_overview.htm som ger en snabb överblick. Inlämningsuppgift Nästa lektion Deadline Måndag --8 kl 5. Hjälp Mondag -- 7-9 i 3 (Mojtaba) Onsdag --3 7-9 i 3 (Mojtaba) Att läsa inför föreläsningen Simuleringens statistiska metoder, Kap 3, s 45-53. Queueing, Kap 4 s 59-8. På föreläsningen Sanlikhetsfördelninger Ankomst- och betjäningstider Köteori prestandamått, analys av steady-state Statistik Konfidensintervall Pseudo-slumptal Deterministisk serie tal med slumptalsegenskaper