Tom´aˇs Holan, sim.txt, Verse: 13. dubna 2006.
Diskr´ etn´ı simulace Mˇejme n´ asleduj´ıc´ı u ´lohu: ´ Uloha 1: V mˇestˇe A leˇz´ı hromada 1000 tun p´ısku. Zjistˇete, za jak dlouho lze pˇrev´ezt vˇsechen p´ısek do mˇesta B vzd´alen´eho 60 km, pokud m´ame k disposici n´ akladn´ı automobil s n´ asleduj´ıc´ımi parametry: - nosnost: 10 tun - rychlost: 60 km/hod - doba nakl´ ad´ an´ı: 1 hodina - doba vykl´ ad´ an´ı: 6 minut. Neuvaˇzujeme ˇz´ adn´e pˇrest´avky v pr´aci, ani na odpoˇcinek ani na doplˇ nov´an´ı pohonn´ ych hmot. ´ Ulohy, jako je tato, m˚ uˇzeme ˇreˇsit jednoduch´ ym v´ ypoˇctem. Podˇelen´ım mnoˇzstv´ı p´ısku a nosnosti automobilu zjist´ıme, ˇze automobil mus´ı jet stokr´at z mˇesta A do mˇesta B, k tomu stokr´at nakl´adat a vykl´adat a devades´atdevˇet-kr´at jet z mˇesta B zp´ atky do mˇesta A. To d´av´a ˇcas 100x(1+1+0,1)+99x1 = 210+99 = 309 hodin. ´ ´ Uloha 2: ...se liˇs´ı od Ulohy 1. t´ım, ˇze m´ame dva automobily, jejich parametry ´ jsou stejn´e jako parametry automobilu z Ulohy 1. Nakl´adat i vykl´adat mohou oba souˇcasnˇe. ´ Ulohu 2 m˚ uˇzeme tak´e ˇreˇsit v´ ypoˇctem. Protoˇze oba automobily budou vˇsechny ˇcinnosti vykon´ avat soubˇeˇznˇe, staˇc´ı poˇc´ıtat s jedn´ım automobilem o dvojn´asobn´e nosnosti: 50x(1+1+0,1)+49x1 = 105+49 = 154 hodin. ´ ´ Uloha 3: ...je tak´e modifikac´ı Ulohy 1, ale automobily jsou r˚ uzn´e a pˇri nakl´ad´an´ı mus´ı ˇcekat, aˇz bude voln´ y nakladaˇc, nakl´adat tedy m˚ uˇze vˇzdy nejv´ yˇse jeden automobil. Pokud k nakladaˇci pˇrijede ve stejn´ y okamˇzik v´ıce automobil˚ u (tˇreba hned na zaˇc´ atku), m´ a pˇrednost automobil s niˇzˇs´ım ˇc´ıslem. Parametry automobil˚ u jsou: Automobil 1: - nosnost: 10 tun - rychlost: 60 km/hod - doba nakl´ ad´ an´ı: 1 hodina - doba vykl´ ad´ an´ı: 6 minut. Automobil 2: - nosnost: 10 tun - rychlost: 90 km/hod - doba nakl´ ad´ an´ı: 1 hodina - doba vykl´ ad´ an´ı: 6 minut.
Automobil 3: - nosnost: 20 tun - rychlost: 60 km/hod - doba nakl´ ad´ an´ı: 2 hodiny - doba vykl´ ad´ an´ı: 10 minut. Nˇekter´e u ´lohy uˇz jsou pˇr´ıliˇs sloˇzit´e na to, abychom mohli dosadit do vzoreˇcku a dostat v´ ysledek. V t´eto u ´loze doba, za jakou automobil naloˇz´ı, odveze, vyloˇz´ı a vr´ at´ı se, bude z´ aviset i na tom, zda pˇri nakl´ad´an´ı bude muset ˇcekat na jin´e auto. Kdybychom tuto u ´lohu museli vyˇreˇsit, nakonec n´am nezbude nic jin´eho, neˇz si vz´ıt aut´ıˇcka, kus pap´ıru a zaˇc´ıt postupnˇe napodobovat – modelovat – pˇrepravu p´ısku. Chceme-li pˇredpovˇedˇet, jak dopadne nebo jak by dopadala urˇcit´a ˇcinnost ve skuteˇcn´em svˇetˇe, vytvoˇr´ıme si model, pozorov´an´ım modelu zjist´ıme v´ ysledek a ten se pokus´ıme pˇren´est zp´ atky do skuteˇcn´eho svˇeta. Model je vˇzdycky urˇcit´ ym zjednoduˇsen´ım. V naˇsem modelu napˇr´ıklad v˚ ubec neuvaˇzujeme poruchy ani ostatn´ı provoz na silnic´ıch. Simulace je zp˚ usob, jak modelovat dˇeje. Poˇcet a poloha automobil˚ u, mnoˇzstv´ı p´ısku a dalˇs´ı parametry modeluj´ı urˇcit´ y stav svˇeta. Simulace modeluje pˇrechody mezi tˇemito stavy, napˇr´ıklad kdyˇz se auto vyloˇz´ı, stoupne mnoˇzstv´ı p´ısku v c´ılov´em mˇestˇe. Diskr´etn´ı simulace se odliˇsuje od simulace spojit´e. Pokud simulujeme tˇreba voln´ y p´ ad, let letadla nebo pˇrist´an´ı na Mˇes´ıci, pˇrepoˇc´ıt´av´a se stav modelu v pravideln´ ych kroc´ıch - takˇze urˇcitˇe ne spojitˇe. Pˇresto takovou simulaci nenazveme diskr´etn´ı. Proˇc? Pˇredstavte si, ˇze simulujete ˇzivot na odlehl´e ˇzelezniˇcn´ı zast´ avce. Minutu za minutou, hodinu za hodinou, pˇrednosta (jen z pohledu modelu!) sed´ı a kouk´ a na hodiny. Kdyˇz se pˇribl´ıˇz´ı stanoven´ y ˇcas, nasad´ı si ˇcepici, vyjde pˇred stanici, zasalutuje proj´ıˇzdˇej´ıc´ımu vlaku a potom vejde do kancel´aˇre, sund´ a ˇcepici a zase kouk´ a na hodiny, minutu za minutou, hodinu za hodinou. Tak vypad´ a spojit´ a simulace. V pˇr´ıpadˇe diskr´etn´ı simulace pˇrednosta pot´e, co vlak odjel, vejde do stanice, podle j´ızdn´ıho ˇr´adu si nastav´ı bud´ık - a usne. Diskr´etn´ı simulace prob´ıh´ a v nepravidlen´ ych ˇcasov´ ych skoc´ıch a simuluje jen ty okamˇziky, kdy se nˇeco dˇeje. Na zaˇc´ atku naˇs´ı simulace budou vˇsechna auta ve mˇestˇe A. Prvn´ı auto m˚ uˇze zaˇc´ıt hned nakl´ adat a v´ıme, ˇze nejbliˇzˇs´ı hodinu nebude dˇelat nic jin´eho. Dalˇs´ı auta zat´ım mus´ı ˇcekat. Aˇz auto ˇc´ıslo 1 ukonˇc´ı nakl´ad´an´ı, vyd´a se na cestu do mˇesta B a ve stejn´ y okamˇzik m˚ uˇze zaˇc´ıt nakl´adat auto ˇc´ıslo 2. Abychom zkr´ atili z´ apis, d´ale m´ısto ”V X hodin automobil Y dˇel´a ˇcinnost Z” budeme ps´ at jen ony parametry X, Y a Z: 0:00 0:00 0:00 1:00 1:00 2:00
1 2 3 1 2 1
zaˇ c´ ın´ a nakl´ adat se stav´ ı do fronty u nakl´ ad´ an´ ı se stav´ ı do fronty u nakl´ ad´ an´ ı je naloˇ zen, vyj´ ıˇ zd´ ı do B zaˇ c´ ın´ a nakl´ adat dojel do B, zaˇ c´ ın´ a vykl´ adat
2:00 2:00 2:06 3:00 3:06 3:06 4:00 4:00
2 3 1 2 1 2 3 1
je naloˇ zen, vyj´ ıˇ zd´ ı do B zaˇ c´ ın´ a nakl´ adat je vyloˇ zen, vyj´ ıˇ zd´ ı do A dojel do B, zaˇ c´ ın´ a vykl´ adat dojel do A, stav´ ı se do fronty u nakl´ ad´ an´ ı je vyloˇ zen, vyj´ ıˇ zd´ ı do A je naloˇ zen, vyj´ ıˇ zd´ ı do B zaˇ c´ ın´ a nakl´ adat
Takov´emu seznamu ˇr´ık´ ame simulaˇcn´ı kalend´aˇr. Jeho poloˇzky obsahuj´ı u ´daje o jednotliv´ ych ud´ alostech – KDY nastanou, KDO na nˇe bude reagovat a CO (jak´ a ud´ alost) se stane. Souˇc´ ast´ı simulaˇcn´ıho modelu je i promˇenn´a, kter´a modeluje ˇcas. T´eto promˇenn´e se ˇr´ık´ a simulaˇcn´ı ˇcas.
Jak naprogramovat diskr´ etn´ı simulaci Programy prov´ adˇej´ıc´ı simulaci vypadaj´ı vˇsechny podobnˇe:
* Vytvoˇ r poˇ c´ ateˇ cn´ ı stav modelu, vˇ cetnˇ e inicializace proces˚ u, simulaˇ cn´ ıho kalend´ aˇ re a simu * Dokud nen´ ı konec, opakuj: * vyber z kalend´ aˇ re ud´ alost s nejniˇ zˇ s´ ım ˇ casem * nastav jej´ ı ˇ cas jako simulaˇ cn´ ı ˇ cas * zapracuj tuto ud´ alost Podm´ınka dokud nen´ ı konec v naˇsem pˇr´ıkladu bude znamenat ,,tak dlouho, neˇz bude vˇsechen p´ısek pˇrevezen do mˇesta B”. To, ˇc´ım se jednotliv´e modely od sebe liˇs´ı, tedy spoˇc´ıv´a nˇekde jinde. Pˇri n´avrhu simulaˇcn´ıho modelu potˇrebujeme zodpovˇedˇet ot´azky, jak´e objekty (procesy) budou v modelu figurovat, jak´e ud´ alosti budou zpracov´avat a co vˇse bude zahrnovat zpracov´ an´ı t´e kter´e ud´ alosti (zmˇenu ve stavu modelu, napl´anov´an´ı ud´alost´ı atd.). V naˇsem pˇr´ıkladu vystaˇc´ıme s procesem Automobil. Ud´alosti, kter´e se ho t´ ykaj´ı budou zaˇc´ atek simulace (udStart), zaˇc´atek nakl´ad´an´ı (udNakl´ adej), zaˇc´ atek cesty z A do B (udJedAB), zaˇc´atek vykl´ad´an´ı (udVykladej) a zaˇc´atek cesty z B do A (udJedBA). type TUdalost = (udStart, udNakladej, udJedAB, udVykladej, udJedBA ); Automobily budou representov´any pomoc´ı objekt˚ u typu TAutomobil type TAutomobil = object rychlost: real; nosnost: integer;
{ v km/hod }
doba_nakladky: real; { doba_vykladky: real; { {--------------------} naklad: integer; { procedure ZpracujUdalost( end;
v hodinach } v hodinach } v tunach } U: TUdalost );
Frontu automobil˚ u ˇcekaj´ıc´ıch na nakl´ad´an´ı budeme reprezentovat jen jednou promˇennou KdyLzeNakladat ud´avaj´ıc´ı, kdy m˚ uˇze zaˇc´ıt nakl´ad´an´ı pˇr´ıˇst´ıho automobilu. Kaˇzd´ y automobil pˇri pˇr´ıjezdu porovn´a tento ˇcas s aktu´aln´ım simulaˇcn´ım ˇcasem, pokud je uveden´a hodnota menˇs´ı, znamen´a to, ˇze fronta je jiˇz pr´ azdn´ a, jinak je tam ˇcas, kdy automobil opravdu zaˇcne nakl´adat. Zpracov´ an´ı jednotliv´ ych ud´alost´ı obstar´av´a n´asleduj´ıc´ı procedura: procedure TAutomobil.ZpracujUdalost( U: TUdalost ); var t: real; begin case U of udStart, udNakladej: begin if KdyLzeNakladat < Cas then t := Cas else t := KdyLzeNakladat; KdyLzeNakladat := t+DobaNakladky; Naplanuj( @Self, t + DobaNakladky, udJedAB ); end; udJedAB: begin if PisekVA < nosnost then naklad := PisekVA else naklad := nosnost; PisekVA := PisekVA - naklad; Naplanuj( @Self, Cas + vzdalenost / rychlost, udVykladej ); end; udVykladej: begin Naplanuj( @Self, Cas + DobaVykladky, udJedBA ); end; udJedBA: begin PisekVB := PisekVB + naklad if PisekVB = PisekCelkem then KONEC := TRUE else Naplanuj( @Self, Cas + vzdalenost / rychlost, udNakladej ); end; end { case } end;
Postˇ reh: Kdyˇz se d´ıv´ ame na zpracov´an´ı jednotliv´ ych ud´alost´ı, m˚ uˇzeme si vˇsimnout, ˇze ud´ alost udStart je zbyteˇcn´a, protoˇze bychom ji mohli slouˇcit s ud´alost´ı udNakladej. Ud´ alost udVykladej je tak´e zbyteˇcn´a, staˇcilo by pˇri zpracov´an´ı ud´ alosti udJedAB hned napl´anovat ud´alost udJedBA. Pokud ale nem´ame zvl´ aˇstn´ı poˇzadavky na rychlost v´ ypoˇctu simulace, nech´ame model radˇeji v tomto stavu, kdy je pˇrehlednˇejˇs´ı a pˇr´ıstupnˇejˇs´ı pˇr´ıpadn´ ym zmˇen´am. Upozornˇ en´ı: Moˇzn´ a n´ as v tuto chv´ıli napadne, ˇze kdyˇz se ve stejn´ y okamˇzik sejdou u nakl´ ad´ an´ı dva automobily, mohli bychom dˇr´ıve naloˇzit ten rychlejˇs´ı nebo ten, kter´ y bude dˇr´ıve naloˇzen nebo... ale pozor! ´ Ulohou simulaˇcn´ıho programu nen´ı optimalizovat!
Diskr´etn´ı simulace je jen prostˇredek, kter´ y m´a odpovˇedˇet na ot´azku ,,jak by za urˇcit´eho nastaven´ı podm´ınek a parametr˚ u prob´ıhala urˇcit´ a ˇcinnost?”. A tato simulace potom m˚ uˇze b´ yt souˇc´ast´ı jin´eho programu, kter´ y zkouˇs´ı r˚ uzn´e zmˇeny nastaven´ı, pravidel, parametr˚ u a pomoc´ı diskr´etn´ı simulace zjiˇst’uje, zda by tyto zmˇeny byly k lepˇs´ımu nebo k horˇs´ımu. Ukaˇzme si jeˇstˇe n´ avrh vˇetˇs´ıho modelu. ´ Uloha 4: Obchodn´ı d˚ um m´a nˇekolik oddˇelen´ı v nˇekolika patrech mezi nimiˇz jezd´ı v´ ytah. Vstupem programu jsou: parametry v´ ytahu: - nosnost - doba nastoupen´ı jednoho ˇclovˇeka - doba vystoupen´ı jednoho ˇclovˇeka - doba pˇrejezdu mezi dvˇema patry seznam oddˇelen´ı s parametry: - ˇc´ıslo oddˇelen´ı - patro - doba obsluhy jednoho z´akazn´ıka seznam z´ akazn´ık˚ usu ´daji: - ˇcas pˇr´ıchodu - seznam oddˇelen´ı, v nichˇz chce nakoupit - trpˇelivost Program m´ a spoˇc´ıtat, kdy odejde posledn´ı z´akazn´ık, ale jakmile budeme prov´ adˇet simulaci, m˚ uˇzeme spoˇc´ıtat i jin´e u ´daje, napˇr´ıklad kolik ˇcasu str´av´ı z´ akazn´ıci ve front´ ach u oddˇelen´ı nebo u v´ ytahu, jak moc je vyuˇzit´ y v´ ytah, kolikr´ at z´ akazn´ık˚ um doˇsla trpˇelivost atd. Z´ akazn´ık proch´ az´ı oddˇelen´ı v poˇrad´ı podle sv´eho seznamu, nem˚ uˇze-li b´ yt hned obslouˇzen, ˇrad´ı se do fronty, ale pokud nezaˇcne b´ yt obsluhov´an dˇr´ıve, neˇz vyprˇs´ı jeho trpˇelivost, zaˇrad´ı si toto oddˇelen´ı na konec sv´eho seznamu a z fronty odejde, s v´ yjimkou pˇr´ıpadu, kdy se jedn´a o jeho posledn´ı dosud nenavˇst´ıven´e
oddˇelen´ı. U v´ ytah˚ u se z´ akazn´ıc´ı ˇrad´ı do front a nastupuj´ı, pouze kdyˇz v´ ytah jede v jejich smˇeru. V´ ytah se ˇr´ıd´ı algoritmem v´ ytahu, tj. pokud m´a nˇejak´ y poˇzadavek (na nastoupen´ı nebo na dopravu jiˇz vezen´eho pasaˇz´era) ve smˇeru, j´ımˇz pr´avˇe jede, nemˇen´ı smˇer j´ızdy. Pokud pr´ azdn´ y v´ ytah nem´a ˇz´adn´ y poˇzadavek, zastav´ı se. Pokud stoj´ıc´ı v´ ytah obdrˇz´ı ve stejn´em ˇcase dva poˇzadavky v r˚ uzn´ ych smˇerech, upˇrednostn´ı smˇer nahoru. V´ yˇse uveden´e podm´ınky ud´avaj´ı pravidla svˇeta, kter´ y chceme modelovat i jemnost modelu. Pokud jsme nezapomnˇeli specifikovat jeˇstˇe nejak´e ,,pravidlo”, jak´ ykoliv program modeluj´ıc´ı takto zadan´ y obchodn´ı d˚ um by pˇri stejn´ ych vstupn´ıch datech mˇel vydat stejn´ y v´ ysledek. Pˇresto vˇsak m´ame urˇcitou volnost v tom, jak vytvoˇr´ıme poˇc´ıtaˇcov´ y model. Napˇr´ıklad u minul´e u ´lohy jsme fronty u nakl´ ad´ an´ı p´ısku modelovali pomoc´ı jedn´e promˇenn´e, v jin´em modelu bychom mohli ˇcekaj´ıc´ı automobily ˇradit do spojov´eho seznamu.
N´ avrh simulaˇ cn´ıho modelu Uvaˇzov´ an´ı nad poˇc´ıtaˇcov´ ym modelem bychom mˇeli zah´ajit ot´azkou, ,,jak´e procesy budou v modelu figurovat?”. V naˇsem n´avrhu to budou procesy Z´ akazn´ık, Oddˇ elen´ı a V´ ytah. Mohli bychom doj´ıt k tomu, ˇze by n´am staˇcily pouze dva procesy (schv´alnˇe, kter´e?), ale z˚ ustaˇ nme u tˇechto tˇr´ı - opˇet z d˚ uvodu vˇetˇs´ı pˇrehlednosti a otevˇrenosti k pˇr´ıpadn´ ym zmˇen´ am. D´ ale bychom mˇeli urˇcit seznam ud´alost´ı, udˇelejme pˇredt´ım ale jeden mezikrok, kter´ y n´ am n´ avrh modelu usnadn´ı - ujasnˇeme si u kaˇzd´eho procesu - v jak´ ych stavech se m˚ uˇze nach´azet - co/kdo z˚ usobuje pˇrechody mezi tˇemito stavy - jak´e akce je potˇreba prov´est pˇri pˇrechodu mezi stavy. ˇ Sikovn´ ym n´ astrojem pro uvaˇzov´an´ı nad tˇemito ot´azkami jsou stavov´e diagramy. U nˇekter´ ych pˇrechod˚ u m´ame na v´ ybˇer, kter´ y proces zajist´ı tu ˇci onu zmˇenu v promˇenn´ ych modelu. Kreslen´ı diagram˚ u je zp˚ usob, kter´ y n´am dovoluje jednak vidˇet stavy, pˇrechody i akce v´ıce proces˚ u najednou a jednak snadno dˇelat zmˇeny (nen´ı nad tuˇzku a pap´ır!). V´ ysledn´ y diagram m˚ uˇze vypadat tˇreba takto: Z diagram˚ u potom m˚ uˇzeme odvodit seznam ud´alost´ı a v´ yˇcet toho, co je tˇreba prov´est pˇri jejich zpracov´ an´ı: Ud´ alosti: Z´ akazn´ ık: udStart, udTrpˇ elivost, udObslouˇ zen Oddˇ elen´ ı: udStart V´ ytah: udStart Obsluha ud´ alost´ ı:
Obr´ azek 1. Stavov´ y diagram procesu Z´ akazn´ık
Z´ akazn´ ık: udStart: - pokud je seznam n´ akup˚ u pr´ azdn´ y - pokud je v pˇ r´ ızem´ ı => konec (uˇ z nic nedˇ elat ani se nepl´ anovat) - jinak - zaˇ rad´ ı se do fronty u v´ ytahu pro j´ ızdu do pˇ r´ ızem´ ı *) podrobnˇ eji d´ ale - jinak - pokud je prvn´ ı n´ akup v seznamu n´ akup˚ u v tomto patˇ re - zaˇ rad´ ı se do fronty u oddˇ elen´ ı podle pˇ r´ ıˇ st´ ıho n´ akupu *) podrobnˇ eji d´ ale - pokud se nejedn´ a o posledn´ ı oddˇ elen´ ı v seznamu, napl´ anuje si udTrpˇ elivost na ˇ CAS+trpelivost - jinak nic nepl´ anuje - jinak - zaˇ rad´ ı se do fronty u v´ ytahu pro j´ ızdu do patra podle patra pˇ r´ ıˇ st´ ıho n´ akupu **) podrobnˇ eji d´ ale udObslouˇ zen: - vyˇ rad´ ı prvn´ ı n´ akup ze seznamu - pokraˇ cuje ud´ alost´ ı udStart (bud’ vol´ an´ ı nebo napl´ anovat na ˇ CAS+0) udTrpˇ elivost: - vyˇ rad´ ı se z fronty u oddˇ elen´ ı - pˇ resune prvn´ ı poloˇ zku seznamu na konec seznamu
- pokraˇ cuje ud´ alost´ ı udStart (bud’ vol´ an´ ı nebo napl´ anovat na ˇ CAS+0) Oddˇ elen´ ı: udStart: - pokud je fronta z´ akazn´ ık˚ u pr´ azdn´ a - nastav´ ı SPIM na TRUE - jinak - nastav´ ı SPIM na FALSE - prvn´ ıho z´ akazn´ ıka ve frontˇ e - vyˇ rad´ ı z fronty - zruˇ s´ ı mu napl´ anovanou udTrpˇ elivost - napl´ anuje mu odObslouˇ zen na ˇ CAS+doba_obsluhy - napl´ anuje si udStart na ˇ CAS+doba_obsluhy V´ ytah: udStart: - pokud je seznam pasaˇ z´ er˚ u nepr´ azdn´ y { nebudeme mˇ enit smˇ er } - pokud chce nˇ ekdo vystoupit v tomto patˇ re - pro prvn´ ıho z pasaˇ z´ er˚ u, kteˇ r´ ı chtˇ ej´ ı vystupovat v tomto patˇ re: - vyˇ rad´ ı z fronty pasaˇ z´ er˚ u - nastav´ ı mu Patro na Patro v´ ytahu - napl´ anuje mu udStart na ˇ CAS+doba_v´ ystupu - napl´ anuje si udStart na ˇ CAS+doba_v´ ystupu (- konec zpracov´ an´ ı ud´ alosti) - jinak { jedeme d´ al } <> - jinak { v´ ytah JE pr´ azdn´ y }
- pokud je nˇ ejak´ y poˇ zadavek ve smˇ eru j´ ızdy -> NASTUP - jinak - pokud je poˇ zadavek v opaˇ cn´ em smˇ eru - zmˇ en´ ı Smˇ er v´ ytahu -> NASTUP - jinak - nastav SPIM na TRUE { Smˇ er := 0 } *) Pˇrid´ an´ı do fronty u Oddˇ elen´ı - metoda tˇr´ıdy TOddˇ elen´ı, pˇrid´a do fronty a pokud SPIM=TRUE, napl´anuje udStart na CAS+0 **) Pˇrid´ an´ı do fronty u Vytahu - metoda tˇr´ıdy TVytah, pˇrid´a do fronty podle patra a smˇeru j´ızdy a pokud SPIM=TRUE, napl´anuje udStart na CAS+0 Takto popsan´ y simulaˇcn´ı model uˇz postaˇcuje k tomu, abychom napsali simulaˇcn´ı program, v podstatˇe v jak´emkoliv jazyku a naopak - takov´ yto popis je pˇrehlednˇejˇs´ı, neˇz zdrojov´ y k´od programu. T´ımto popisem tedy m˚ uˇze pr´ace na n´ avrhu implementace modelu skonˇcit. Pozn´ amka: Vid´ıme, ˇze proces V´ ytah pˇri vˇsech sv´ ych stavech vystaˇc´ı s jedinou ud´ alost´ı, stav procesu lze jednoznaˇcnˇe urˇcit podle promˇenn´ ych urˇcuj´ıc´ı aktu´aln´ı patro a smˇer j´ızdy, seznamu pasaˇz´er˚ u a seznam˚ u z´akazn´ık˚ u ˇcekaj´ıc´ıch na v´ ytah v jednotliv´ ych patrech a smˇerech. Podobnˇe Oddˇ elen´ı. Pokud bychom chtˇeli poˇc´ıtat s budouc´ım obohacen´ım modelu, pˇridali bychom zˇrejmˇe ud´alosti udKonecObluhy u Oddˇ elen´ı a ud´alosti udVystoupil, udNastoupil, udPˇ r´ıjezd u V´ ytahu. V takhle zadan´e u ´loze vˇsak vystaˇc´ıme s jedinou ud´alost´ı.