Simulointi Tapahtumapohjainen
Diskreettiaikainen simulointi 1 Tarkastellaan systeemejä, joissa on äärellisen monta komponenttia. Jokaisella komponentilla äärellisen monta tilaa. Komponentit vaikuttavat toistensa tiloihin tapahtumien välityksellä. Tapahtuma on aina sidottu tiettyyn ajan hetkeen (ts. sillä ei ole kestoa).
Diskreettiaikainen simulointi 2 Tapahtuma voi muuttaa tiloja, generoida muita tapahtumia (samalle ajanhetkelle tai tulevaisuuteen). Tyypillisiä rakennekomponentteja laiteresurssit (vapaa/varattu) työntekijät (vapaa/varattu) raaka-aineet (saatavuus/määrä) tuotteet (aihion saatavuus/valmistumisvaihe) Tapahtumia toimenpiteiden alut/loput
Pesu-esimerkki Autopesulassa rakenneosia Pesuasema (vapaa/varattu) Jonotustila (M käytettävissä olevaa tilayksikköä) Asiakkaat (pesemätön/pesty auto) Tapahtumia Asiakkaan saapuminen/lähteminen Pesun alku/loppu Jonoon liittyminen/poistuminen Osa tapahtumista esiintyy aina yhdessä
Simuloinnin osatoiminnot 1 Simulointiohjelmiston hallittava 5 toimintoa Mallin rakenteen määrittely Systeemin osat -> tilamuuttujat Osien looginen riippuvuus -> vuokaavio Tapahtumien logiikka -> koodi Satunnaisprosessit Halutun jakauman mukaiset satunnaisluvut Tilastollinen tietojenkeruu ja raportointi Luottamusvälit, visualisointi, analyysi
Simuloinnin osatoiminnot 2 Ajan hallinta kellon edistäminen Simuloinnin kokonaishallinta Simuloinnin aloitus/lopetus Tapahtumien lisäys/poisto Oikean tapahtuman aktivointi Kokeiden hallittu toisto
Simuloinnin osatoiminnot 3 Osa simuloinnin toiminnoista on yhteisiä kaikille malleille ja tapauksille Ajan hallinta Satunnaisprosessit Tietojen keruu ja raportointi Osa sisältää malli- ja koeriippuvia osia Mallin rakenne ja logiikka Simulointikokeen kulku ja toisto
Simuloinnin paradigmat Kolme tarkastelukulmaa simulointiin Tapahtumapohjainen Lähtökohtana samaan aikaan sidotut tilan muutokset Prosessipohjainen Samaan osasysteemiin liittyvien tapahtumien elinkaari. Aktiviteettipohjainen Osasysteemin resursseja sitovat aikaa vievät toiminnot Johtavat erilaisiin malli- ja ohjelmarakenteisiin Sopivat erilaisiin mallitustilanteisiin
Tapahtumalähtöinen simulointi Keskeisinä tapahtumarutiinit Yksi rutiini per tapahtumatyyppi Sisältävät mallin logiikan Tapahtumarutiini voi muuttaa tilasuureita ja luoda uusia tapahtumailmoituksia. Tapahtumien järjestelijä kirjaa tapahtumailmoituksia (aika, tapahtuma) Yksi rutiini kerrallaan aktivoidaan.
Prosessi/oliopohjainen s. Osaprosessit olioina, joilla omat tilamuuttujat ja tapahtumarutiinit. Kaikki resurssiin liittyvä toiminta yhdessä paikassa. Erilliset metodit toisten olioiden ja järjestelijän kanssa kommunikointiin. Ei erillisiä ilmoituksia. Useampi prosessi käynnissä yhtä aikaa (korutiinit, säikeistys).
Aktiviteettipohjainen s. Logiikka aktiviteettirutiineissa Rutiini liittyy aina johonkin resurssiin Kaksi rajapintaa Aktivointi (jos ehdot toteutuvat, varaa resurssin ja kiinnittää lopetusajan) Passivointi: vapauttaa resurssin annettuna aikana Kaikki aktiviteetit käydään systemaattisesti läpi Jos ehdot toteutuvat, aktivoidaan. Jos yksikään rutiini ei aktivoidu, kasvatetaan aikaa seuraavaan lopetushetkeen.
Tapahtumapohjainen s. Vanhin lähestymistapa Logiikka yksi kerrallaan suoritettavissa rutiineissa Helppo toteuttaa millä tahansa proseduraalisella kielellä Logiikka fragmentoituu helposti Peräkkäiset tai toisiinsa liittyvät tapahtumat eri rutiineissa
Taphtumap. pesuesim. Minimissään kaksi eri tapahtumaa (tulo ja lähtö (vrt. johdanto) Molemmat voivat varata pesuaseman ja generoida lähtötapahtuman Potentiaalinen ylläpidettävyysongelma Jako 4 atomaariseen tapahtumaan Tulo (generoi asiakkaan) Alku (varaa resurssin ja käynnistää palvelun) Loppu (vapauttaa resurssin, lopettaa palvelun) Lähtö (poistaa asiakkaan)
Pesu 2 Tulo Alku Jos jonossa on tilaa Luo uusi asiakas ja aseta jonoon Luo uusi Alku-tapahtuma Luo uusi tulotapahtuma (ja uusi tuloaika) Jos palvelu vapaa ja jonossa asiakas Ota jonosta asiakas Varaa palvelu Luo Loppu-tapahtuma (uusi palvelun kesto)
Pesu 3 Loppu Lähtö Vapauta palvelu Luo Lähtö-tapahtuma Luo Alku-tapahtuma Kerää asiakkaan tiedot (jos on) Poista asiakas
Pesu Tulo Alku Loppu Lähtö
Pesu - toteutus 4 tapahtumarutiinia (aliohjelmaa) Tapahtumia varten TapahtumaTyyppi (Tulo, Alku, Loppu, Lähtö) Kirjanpitoon TapahtumaIlmoitus(Aika, Tapahtuma) Tapahtumalista hallinnoi TapahtumaIlmoituksia Metodit SeuraavaTapahtuma LisääTapahtuma (Aika, Tapahtuma) (PoistaTapahtuma) Jono Koostuu Asiakas instansseista Metodit Lisää, Ota, Pituus Palvelee Alku-tapahtumaa Lähtö tarvitsee teknisen jonon
Pesu - pääohjelma Alustukset T=0; LisääTapahtuma(TuloAikaJakauma(),Tulo); While (T< TMax) \\ tms lopetusehto Ilmoitus=SeuraavaTapahtuma(); T=Ilmoitus.Aika; Tyyppi=Ilmoitus.Tapahtuma; CASE Tyyppi of \\ kutsutaan a.o. tapahtumarutiinia END CASE End While
Tulo Tulo_Tapahtuma() Asiakas_Tyyppi_Osoitin :: Auto { LisääTapahtuma(Tulo_Aika_Jakauma(),Tulo); If Jono.Pituus() < M then Auto= Luo_Asiakas(); Jono.Lisää(Auto) LisääTapahtuma(0.,Alku) EndIf }
Alku Alku_Tapahtuma() Asiakas_Tyyppi_Osoitin :: Auto { If(Asema.Vapaa() and Jono.Pituus()>0) then Endif } Auto=Jono.Ota(); Asema.Varaa(Auto); LisääTapahtuma(Palvelu_Aika_Jakauma(),Loppu)
Loppu Loppu_Tapahtuma() Asiakas_Tyyppi_Osoitin :: Auto { Auto= Asema.Vapauta() Lähtö.Varaa(Auto) \\ Muuten asiakas hukkuu LisääTapahtuma(0.,Lähtö) LisääTapahtuma(0.,Alku) }
Lähtö Lähtö_Tapahtuma() Asiakas_Tyyppi_Osoitin :: Auto { Auto=Lähtö.Vapauta() // Kerää statiikkaa Poista_Asiakas(Auto) } // Varaa ja Vapauta tarvitaan välittämään asiakastieto, koska jonoa ei ole.
Huomioita Erilaiset jonotusstrategiat voi piilottaa Jonon sisään. Useamman palvelun, reitityksen, asiakasvirran jne huomiointi edellyttää tapahtumien monistamista tai parametrisointia. Käytännössä palvelusta ja sen jonosta on hyvä tehdä kokonaisuus, johon asiakas reititetään.
Konttisatamat - toteutus Keskeiset tapahtumat Laiva i saapuu satamaan j Laiva i sataman j jonoon hetkellä t Laivan purku/lastaus alkaa laiturilla Laiva i pois jonosta, laituri k varatuksi, päättymistapahtuma hetkelle t2
Konttisatamat - toteutus Keskeiset tapahtumat Laivan purku/lastaus päättyy Laituri k vapautuu hetkellä t3 Laiva lähtee matkalle seuraavaan satamaan Laivan i saapuminen satamaan j hetkellä t4
Konttisatamat kysymyksiä? Keskeiset tapahtumat Laiva i saapuu satamaan j Laiva i sataman j jonoon hetkellä t Mitä tietoa välitetään tapahtumailmoituksessa, mitä muuten (ja miten) Laivan purku/lastaus alkaa laiturilla Laiva i pois jonosta, laituri k varatuksi, päättymistapahtuma hetkelle t1 Tarvitaanko viittausta yksittäiseen laituriin k, mihin tieto laivasta i
Konttisatamat kysymyksiä? Keskeiset tapahtumat Laivan purku/lastaus päättyy Laituri k vapautuu hetkellä t3 Missä tieto laiturista, laivasta Laiva lähtee matkalle seuraavaan satamaan Laivan i saapuminen satamaan j hetkellä t4 Kuka tietää j :n arvon laivalle i