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) entity ; entity attrib,… : typ;,… : typ; end; Typy atributů: int, real, bool, str (max 20 znaků)
Příklad popisu entit entity Zakaznik; entity Prodavac attrib jmeno:str:20; cislo:int; obedval: bool; snidal, svacil: bool:5; end;
Popis aktivity activity channels load [ from ]* [compute ::] after :: eject [ to ] 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;
Popis fronty queue of [signal to,<aktivita,…] Frontové režimy – Fifo – Lifo – Random – Prior (čí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 for [case :: ]* otherwise
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 :: on start :: on write ::
Čá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 [entity … //]* end
Inicializace generátorů náhodných čísel radomize 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 next till
Ladicí informace debug on Debug off 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.