**Diskreetne sündmuspõhine simulatsioon** modelleerib süsteemi tööd kui lõplikku sündmuste jada ajas. Iga sündmus toimub kindlal ajahetkel ning tähistab süsteemi oleku muutust. Tavaliselt kasutatakse aja arvestamiseks sündmuspõhist ajakulgu, sest võib arvestada, et järjestikuste sündmuste vahel süsteemis muutusi ei toimu ning seetõttu võib simulatsiooni aeg automaatselt järgmise sündmuse toimumise juurde hüpata.

Lisaks sündmuspõhisele ajakulgemisele on olemas alternatiivne lähenemine, mida nimetatakse astmelist ajakulgu, kus aeg on jagatud väikesteks ühikuteks ning süsteemi olekut uuendatakse vastavalt sündmustele, mis selles ajaühikus juhtuvad. Kuna iga ajahetke ei ole vaja simuleerida, siis sündmuspõhise ajakulgemisega simulatsioon on tavaliselt palju kiirem kui vastav astmelise ajakulgemisega simulatsioon.

Mõlemad diskreetse sündmuspõhise simulatsiooni vormid vastanduvad pidevsimulatsiooniga, kus süsteemi oleku muutusi jälgitakse pidevalt aja kulgedes, tavaliselt diferentsiaalvõrranditel põhinevate arvutusute põhjal .

Näide
-----

Üks hea viis, kuidas seletada diskreetse sündmuspõhise simulatsiooni toimimist, on modelleerida järjekorda, näiteks kui kliendid saabuvad restorani ning ootavad teenindamist. Sel juhul süsteemi olemid oleks klientide järjekord ja teenindajad. Süsteemi sündmused oleks kliendi saabumine, kliendi teenindamine ja kliendi lahkumine. Süsteemi olekud, mida need sündmused muudavad, oleks näiteks klientide arv järjekorras ja teenindaja staatus (hõivatud või vaba). Muutujad, millest süsteemi töö sõltub, on näiteks kui palju teenindamisele aega kulub ning kui kaua aega kliendid restoranis viibivad.

Mudel
-----

Simuleeritava süsteemi mudel koosneb mitmetest komponentidest.

### Olek

Süsteemi olekud on muutujad, mis hoiavad vajalikku infot süsteemi uurimiseks. Süsteemi olekud võivad aja jooksul muutuda sündmuste toimumisel.

### Aeg

Simulatsioon peab sündmuste toimimiseks arvestama aja kulgu, kas siis sündmuspõhiselt või astmeliselt.

### Sündmused

Mudelis hoitakse vähemalt ühte sündmuste järjendit. Selles järjendis on eelseisvad sündmused, mida põhjustasid eelnevad sündmused ning mida ennast pole jõutud veel simuleerida. Sündmust kirjeldab aeg, millal ta juhtub ning tüüp, mille põhjal jooksutatakse vastavat koodi, mis sündmust simuleerib.

Kui sündmused toimuvad hetkeliselt, siis tegevused, mis kestavad pikemat aega modelleeritakse sündmuste järjekorrana. Mõned sündmused võivad kesta ka intervallina, sel juhul on sündmuse juures ära märgitud algus- ja lõppaeg.

Sündmuste järjend on tavaliselt prioriteet-järjekord, mis on sorteeritud sündmuste algusaja põhjal. Seetõttu on alati teada, mis on järgmine sündmus ning süsteemi aeg võib otse hüpata vastavalt järgmise sündmuseni.

Tavaliselt lisatakse sündmuste järjendisse uusi sündmusi dünaamiliselt vastavalt simulatsiooni kulgemisele. Simulatsiooni käivitamiseks on üldiselt algsed sündmused varem ette määratud.

### Juhusliku arvu generaator

Simulatsioonil on üldiselt vaja genereerida erinevaid juhuslikke muutujaid, vastavalt võimalikkudele sündmustele. 

### Statistika

Simulatsioon kogub andmeid süsteemi toimimise kohta, mis on määratud vastavalt uurimisprobleemile. Restorani näitel oleks see näiteks keskmiste ooteaegade uurimiseks, mida saaks ära kasutada töögraafikute koostamisel. Simulatsioonis saadakse andmeid korduva simulatsiooni jooksutamisel saadud keskmiste tulemuste põhjal.

### Lõppolek

Simulatsiooni lõppemiseks peab otsustama, millal simulatsiooni töö lõpetada. Tavaliselt on selleks lihtsalt kas ajaline limiit või sündmuste arvu limiit.

Simulaatori loogika
-------------------

Simulaatori töö näeb välja umbes selline:

### Algus

* Väärtusta lõppolek vääraks
* Väärtusta süsteemi oleku muutujad
* Väärtusta süsteemi algaeg
* Lisa algsündmused sündmuste järjendisse

### Töö

* Määra süsteemi ajaks järgmise sündmuse algusaeg
* Simuleeri järgmine sündmus ning eemalda see sündmuste järjendist
* Uuenda kogutud andmeid
* Jooksuta tsüklit kuni lõppoleku saabumiseni

### Lõpp

* Genereeri simulatsiooni aruanne

Kasutusalad
-----------

Sellist simulatsiooni võib kasutada igas valdkonnas, kus on vaja mingit tegevust optimeerida. Selleks võib olla näiteks tootmise kitsaskohtade leidmine, töögraafikute optimeerimine vastavalt nõudlusele, arvutivõrgu testimine või mängudes tulemuse maksimeerimine.

Viited
------

1. ↑  Allen M. Spencer A. Gibson A. 2015. Health Services and Delivery Research, volume 3, issue 20. Right cot, right place, right time: improving the design and organisation of neonatal care networks – a computer simulation study (vaadatud 02.12.2019).
2. ↑  Robinson, Stewart 2004. Simulation – The Practice of Model Development and Use. Hoboken, New Jersey: Wiley.
3. ↑  Matloff, Norm 2008. Introduction to Discrete-Event Simulation and the SimPy Language (vaadatud 02.12.2019).
4. ↑  Duivesteijn, Wouter 2006. Continuous Simulation (arhiveeritud 09.06.2011).
5. ↑  Newell, A. Simon, H. A. Adelman, I. Hermann, C. F. Simulation (vaadatud 02.12.2019).
6. ↑  Jones, Douglas W. 1986. Implementations of Time. Proceedings of the 18th Winter Simulation Conference (vaadatud 02.12.2019).