230 likes | 381 Views
Jazyk DSI. Simulační objekty. Aktivity Fronty Pooly Vyhybky Jméno objektu: max 20 znaků, začíná písmenem, obsahuje jen písmena a číslice, odlišné od klíčových slov. Popis entity (poolu). e ntity < jmeno > ; entity < jmeno > attrib < jmeno >,… : typ ; < jmeno >,… : typ ; end;
E N D
Simulační objekty • Aktivity • Fronty • Pooly • Vyhybky • Jméno objektu: max 20 znaků, začíná písmenem, obsahuje jen písmena a číslice, odlišné od klíčových slov
Popis entity (poolu) entity<jmeno> ; entity <jmeno> attrib <jmeno>,… : typ; <jmeno>,… : typ; end; Typy atributů: int, real, bool, str (max 20 znaků)
Příkladpopisuentit entity Zakaznik; entity Prodavac attrib jmeno:str:20; cislo:int; obedval: bool; snidal, svacil: bool:5; end;
Popis aktivity activity<jmeno>channels<cislo> load [<cislo><jmeno entity> from <fronta|pool>]* [compute <prikazjayzka Pascal> ::] after <vyraztypu Real> :: eject [<jmeno entity> to <fronta|vyhybka|pool>] end;
Poznámky k popisu aktivity • channels 0 znamená neomezený počet kanálů obsluhy. • Je-li uvedena část compute, provede se daný výpočet na začátku práce aktivity • Klauzulí after může být i více
Příklad popisu aktivity Activity PlaceniUPokladny channels 3 load 1 Prodavac from Prodavaci 1 Zakaznik from qZak 1 Kosik from qKosiky compute Prodavac^.unava:=Prodavac^.unava+1 after Prodavac^.unava+4 eject Kosik to qKosiky after Prodavac^.unava+5 eject Zakaznik to pool,Prodavac to Prodavaci end;
Popisfronty queue<jmeno> of <jmeno entity> <rezim> [signal to <aktivita>,<aktivita,…] • Frontové režimy • Fifo • Lifo • Random • Prior <atribut> (čím menší hodnota, tím dříve)
Klauzule signal to • Je-li uvedena, předávají se signály následujícím simulačním objektům v uvedeném pořadí. • Předání signálu ovlivňuje pořadí spouštění aktivit. • Není-li uvedena, je předávání signálů náhodné
Popis vyhýbky Switch<jmeno> for <entita> [case <logickyvyraz> :: <fronta|vyhybka|pool>]* otherwise <fronta|vyhybka|pool>
Vyhýbka • Podmínky se vyhodnocují v pořadí shora dolů • Část otherwise je povinná (i když občas ze sémantického hlediska nemůže nastat) • Někdy je vhodné před vyhýbku zařadit aktivní prvek (aktivitu) s krátkou, nebo nulovou dobou trvání a v její části compute provést rozhodovací algoritmus
Segmenty jazyka Pascal declarations<deklaracetypu a promennych>:: on start <prikaz> :: on write <prikaz>::
Část declarations • Umožňuje definovat globální proměnné použitelné ve všech simulačních objektech • Umožňuje definovat vlastní procedury a funkce (například generátor pseudonáhodných čísel s nějakým nestandardním rozložením)
Část on start • Popíše činnosti, které se mají provést na začátku simulace systému
Část on write • Popíše činnosti, které se mají provést ihned po spuštění řídícího příkazu write (například lze naprogramovat výpis vlastních složitějších statistik) • Výstupní protokol je definován jako textový soubor s jménem FOU.
Generování pseudonáhodných čísel • Random – rovnoměrné rozdělení od 0 do 1 • Uniform(a,b) – rovnoměrné rozdělení od a do b • NegExp(strhodnota) – exponenciální rozdělení • Normal(strhodnota,rozptyl) – normální • intUniform(i,j) – celočíselné rovnoměrné rozdělení od i do j
Standardní funkce • Time – modelový čas • contents (q) – počet entit ve frontě • BusyChannels(a) – počet obsazených kanálů v aktivitě • hasFreeChannels(a) – má aktivita volný kanál? (logická hodnota)
Počáteční stav front (Příkaz v inicializačním souboru) queue<fronta> <pocet> queue <fronta> [entity <atribut> <hodnota> <atribut> <hodnota> … //]* end
Inicializacegenerátorů náhodných čísel • radomize<cislo> • randomize time • Není-li uvedeno, inicializuje se generátor hodnotou určenou ze systémového času, ta je zapsána do výstupního protokolu
Řízení simulace • step • steps<pocetkroku> • next <delkacasovehointervalu> • till <casprerusenisimulace>
Ladicí informace • debug on • Debugoff • Do protokolu se zapisuje velmi podrobný a velmi dlouhý výpis o činnosti systému
Výpis stavu systému • show – výpis na obrazovku • write – zápis do protokolu (soubor *.out)
Řízení simulace • menu – vyvolá interaktivní menu • file – předá řízení inicializačnímu souboru • quit – ukončení simulace • Klávesa Esc – přerušení simulace • Pokud soubor *.ini neexistuje, nebo v něm není další vykonatelný příkaz, předá se řízení interaktivnímu menu.