SYSTÉMOVÁ TŘÍDA SIMULATION Třída SIMULATION je třetí systémovou třídou, která obsahuje prostředky pro vytváření diskrétních simulačních modelů. Je podtřídou.

Slides:



Advertisements
Podobné prezentace
GENEROVÁNÍ PSEUDONÁHODNÝCH ČÍSEL
Advertisements

Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Projektové řízení Modul č.1.
Programovací jazyk C++
Třída SIMSET je druhou standardní systémovou třídou, která obsahuje prostředky pro práci se spojovými seznamy. KRUHOVÉ SPOJOVÉ SEZNAMY Spojový seznam –
Pascal - příklady.
Přednáška č. 3 Normalizace dat, Datová a funkční analýza
1 Vnitřní řazení s využitím dynamických struktur Tvorba spojového seznamu je vcelku triviální záležitostí: a)Vytvořím prázdný seznam příkazem LIST:=nil.
10. Dynamické datové struktury
Databázové systémy Přednáška č. 3 Proces návrhu databáze.
Operační systémy. OPERAČNÍ SYSTÉMY pomoc operátorovi, podpora vlastností reálného času, víceuživatelských a více úlohových systémů.
ALGO – Algoritmizace 1. cvičení
Algoritmizace a programování Podprogramy v Delphi - 10
Doporučená literatura: *HUŠEK, R., LAUBER, J.: Simulační modely.. SNTL/Alfa Praha,1987. * NEUSCH L, S. A KOLEKTIV: Modelovanie a simulacia.. SNTL Praha,
C# pro začátečníky Mgr. Jaromír Osčádal
If-else, do-while, switch, operátory
Principy překladačů Běhová podpora Jakub Yaghob. Běhová podpora Statická podpora jazyka Překladač Interface na knihovny Hlavičkové soubory Dynamická podpora.
Principy překladačů Mezikód Jakub Yaghob.
Materiály k přednášce Úvod do programování Ondřej Čepek.
Algoritmizace a programování Podmíněné a cyklické příkazy- 08
Informatika I 3. přednáška
Procedury a funkce Základní charakteristika a použití v programu.
Seminář – Základy programování
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
13AMP 6. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled Synchronizace procesů Synchronizace procesů Producent-Konzument Producent-Konzument.
SIMULACE MANAŽERSKÝCH ROZHODOVACÍCH PROCESŮ Úvodní část.
Informatika I 2. přednáška
Algoritmy a programovací techniky
Modelování a simulace MAS_02
Simulační modely a programové vybavení. Vývoj simulačních programů  Původně pouze strojový kód –Příliš dlouhé, náročné na programátora, obtížné hledání.
Počítače a programování 1
JavaScript Podmínky, cykly a pole.
Cvičení.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
5. Procedury a funkce Procedura je samostatně odladěný algoritmus, v programu může být volána vícekrát. Dvojí terminologie - rozlišujeme procedury a funkce.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Dokumentace informačního systému
STROMY Datová struktura sestávající z uzlů
VYTVOŘENÍ TŘÍDY KOMPLEXNÍHO ČÍSLA Vytvořte třídu proměnné, která bude prezentovat komplexní číslo. Zadávat se budou dvě složky, reálná a imaginární. Dále.
10. Dynamické proměnné Dynamická proměnná se nezavádí deklarací proměnných, ale vzniká za běhu programu provedením speciálního příkazu. Nemá přidělen žádný.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
3. konzultace (5 hodin) Studijní materiály najdete na adrese:
BINÁRNÍ STROM Vytvořte program, který bude vytvářet "binární strom". Každý prvek bude definován z klávesnice svým obsahem a dvěma dalšími proměnnými, které.
Distribuované algoritmy - přehled Přednášky z Distribuovaných systémů Ing. Jiří Ledvina, CSc.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
C-Sim verze 5.0. Charakteristika Softwarový nástroj pro simulaci v diskrétním čase Použitá metodou paralelních procesů Navržen podle vzoru jazyka SIMULA.
Programovací jazyk C# 4. část - cykly.
Inf Cykly ve vývojových diagramech
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Programovací jazyk C++
C# konzole – Podíl dvou čísel, podmínka IF
Linux - skripty Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
ZAL – 3. cvičení 2016.
1. ročník oboru Mechanik opravář motorových vozidel
Vytváření dokumentace algoritmů
Operační systémy 9. Spolupráce mezi procesy
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
Databázové systémy a SQL
© Copyright Radim Štefan
Dynamické proměnné (1) Proměnné, jejichž počet a (nebo) velikost pa-měti využívané těmito proměnnými se v prů-běhu programu mění Dynamické proměnné lze.
Oblast platnosti identifikátoru (1)
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
PROJEKTOVÉ ŘÍZENÍ V NEZISKOVÝCH ORGANIZACÍCH
C# přehled vlastností.
Přednáška 9 Triggery.
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Transkript prezentace:

SYSTÉMOVÁ TŘÍDA SIMULATION Třída SIMULATION je třetí systémovou třídou, která obsahuje prostředky pro vytváření diskrétních simulačních modelů. Je podtřídou třídy SIMSET. Deklarace systémové třídy SIMULATION : Simset class Simulation; begin link class process; …; ref(process) procedure current; …; ref(head) SQS; link class EVENTNOTICE; …; ref(EVENTNOTICE) procedure FIRSTEV; …; real procedure time; …;

SIMULACE DISKRÉTNÍCH SYSTÉMŮ procedure hold …; procedure passivate; …; procedure wait …; procedure cancel …; procedure ACTIVATE …; procedure accum …; process class MAINPROGRAM; …; ref(MAINPROGRAM) main; SQS :- new head; main :- new MAINPROGRAM; main.EVENT :- new EVENTNOTICE(0,main) main.EVENT.into(SQS) end Simulation

SIMULACE DISKRÉTNÍCH SYSTÉMŮ Operační část třídy SIMULATION obsahuje akce, které je třeba provést před zahájením vlastního simulačního výpočtu. Musí se provést inicializace řídicí struktury kalendáře událostí. vytvoří se spojový seznam realizující kalendář událostí exemplář třídy MAINPROGRAM, zpřístupněn proměnnou main Proces main je pak naplánován k provedení v čase nula. Kalendář událostí tak na začátku vždy obsahuje jediný plán – právě plán procesu main. Simulační výpočet V operační části podtřídy třídy SIMULATION nebo jejího prefixovaného bloku musíme nejprve vytvořit potřebný exemplář simulačních procesů a naplánovat je pomocí prostředků pro aktivaci procesů. Pro rozběh simulačního výpočtu je možné potlačit (pasivací nebo suspendováním) plán procesu main (tím přestane být aktivní koprogram hlavního prefixovaného bloku). Simulační výpočet se odehrává na principu kvaziparalelního výpočtu, je ukončen v okamžiku, jestliže je ukončen dynamický blok exempláře třídy SIMULATION - tedy proces main.

SIMULACE DISKRÉTNÍCH SYSTÉMŮ Kalendář událostí Posloupnost časových okamžiků, v nichž se diskrétně chápaný dynamický systém mění, a posloupnost jim odpovídajících událostí, není vždy dána na začátku výpočtu. Jednou z úloh modelujícího simulačního programu je tuto posloupnost během simulace vytvářet. V prostředcích sdružených v systémové třídě SIMULATION se používá metoda zvaná „ časové plánování událostí “. V každém okamžiku výpočtu modelujícího programu existuje neprázdná množina tak zvaných plánů událostí – záznamů typu, kde u – programová událost (její algoritmus) t – hodnota času Aby bylo možné v simulačním programu provádět dynamické plánování událostí, musí simulační program obsahovat nějakou informační strukturu, která bude uchovávat plány jednotlivých událostí, bude je na základě požadavků měnit a bude v jednotlivých etapách výpočtu určovat událost s minimálním časem plánu. Takovou řídicí informační strukturu nazýváme simulační kalendář nebo kalendář událostí.

SIMULACE DISKRÉTNÍCH SYSTÉMŮ Sdružování událostí do procesu Při přípravě simulačního programu nejprve provedeme dekompozici dějů v modelovaném systému na jednotlivé události. Mnohé události jsou takového charakteru, že je lze logicky mezi sebou vázat. Tímto pak můžeme zjednodušit zápis simulačního programu tím, že budeme popisovat samostatnými syntaktickými konstrukcemi celé skupiny událostí (nikoli jednotlivé typy událostí), které jsou mezi sebou logicky vázány. Takovou skupinu budeme nazývat simulační proces. Proces se pak od události liší tím, že není celý prováděn v jednom okamžiku simulačního času. Akce procesu sestávají ze skupin akcí, které jsou odděleny tzv. příkazy potlačení procesu. Procesy jsou plánovány kalendářem událostí. Plány simulačního kalendáře se odvolávají na jednotlivé exempláře procesů. Podle vztahu k simulačnímu kalendáři se každý exemplář procesu (momentálně existuje v programu) nachází v jednom z následujících stavů aktivní stavukončený stav suspendovaný stavpasivní stav

SIMULACE DISKRÉTNÍCH SYSTÉMŮ Ke konstrukci kalendáře událostí jsou použity prostředky ke konstrukci spojových seznamů (třída SIMSET). Na blokové úrovni operační části třídy SIMULATION je deklarována hlava spojového seznamu ref (head) SQS; (SeQuencing Set), který je v operační části třídy SIMULATION inicializován a obsahuje položky zaznamenávající čas plánu a identifikující plánovaný proces. odkaz na exemplář procesu

SIMULACE DISKRÉTNÍCH SYSTÉMŮ Třída EVENTNOTICE Je uživateli nepřístupná. Je prototypem exemplářů, které jsou zařazeny ve spojovém seznamu SQS a které tvoří položky simulačního kalendáře. Deklarace lokální třídy EVENTNOTICE : link class EVENTNOTICE(EVTIME, PROC); real EVTIME;ref(process)PROC; begin ref(EVENTNOTICE) procedure suc; suc :- if SUC in EVENTNOTICE then SUC else none; ref(EVENTNOTICE) procedure pred; pred :- PRED; procedure RANK(BEFORE); Boolean BEFORE; begin ref(EVENTNOTICE) P; P :- SQS.last;

SIMULACE DISKRÉTNÍCH SYSTÉMŮ for P :- P while P.EVTIME gt EVTIME do P :- P.pred; if BEFORE then begin for P :- P while P.EVTIME eq EVTIME do P :- P.pred; end; follow(P) end; Parametr PROC exempláře třídy EVENTNOTICE odkazuje na exemplář třídy process, kterého se daná položka kalendáře událostí týká. Parametr EVTIME obsahuje hodnotu časového plánu. Exempláře třídy EVENTNOTICE jsou zařazeny v seznamu SQS vzestupně uspořádány podle hodnot atributů EVTIME. Procedura RANK slouží k tomuto uspořádání.

SIMULACE DISKRÉTNÍCH SYSTÉMŮ Deklarace procedury FIRSTEV ref(EVENTNOTICE) procedure FIRSTEV; FIRSTEV :- SQS.first; Procedura FIRSTEV vydává první plán v kalendáři, tj.plán procesu, který je právě v aktivním stavu Deklarace procedury current ref(process) procedure current ; current :- FIRSTEV.PROC; Procedura current vydává odkaz na právě aktivní exemplář simulačního procesu. Deklarace procedury time real procedure time; time :- FIRSTEV.EVTIME; Simulární čas není ve třídě SIMULATION realizována samostatnou reálnou proměnnou. Za hodnotu sim.času se považuje hodnota parametru EVTIME prvého plánu v sim. kalendáři SQS.

SIMULACE DISKRÉTNÍCH SYSTÉMŮ Třída process Třída process, která definuje vlastnosti a slouží k realizaci simulačních procesů. Exempláře třídy process představují exempláře simulačních procesů. V prototypu třídy process jsou shrnuty pouze základní vlastnosti simulačních procesů. Specifické vlastnosti konkrétních simulačních procesů definuje uživatel v deklaraci specifické podtřídy třídy process. Pomocí exemplářů třídy process jsou modelovány různé požadavky řazené v simulovaných systémech do front a zásobníků. Třída process je prefixována třídou link, tak je toto možné realizovat.

SIMULACE DISKRÉTNÍCH SYSTÉMŮ Deklarace třídy process: link class process; begin ref(EVENTNOTICE) EVENT; Boolean TERMINATED; Boolean procedure idle; idle := EVENT == none; Boolean procedure terminated; terminated := TERMINATED; real procedure evtime; if idle then ERROR else evtime := EVENT.EVTIME; ref(process) procedure nextev;

SIMULACE DISKRÉTNÍCH SYSTÉMŮ nextev :- if idle then none else if EVENT.suc == none then none else EVENT.suc.PROC; datach; inner; TERMINATED := true; passivate; ERROR end; Atribut EVENT odkazuje na exemplář třídy EVENTNOTICE, kterým je daný exemplář třídy process plánován v simulačním kalendáři.

SIMULACE DISKRÉTNÍCH SYSTÉMŮ Atribut TERMINATED, nabývá hodnoty true, když je ukončena uživatelská operační část daného exempláře třídy process. Procedura evtime vydá hodnotu času plánu jeho aktivace, v případě, že exemplář třídy process je ve stavu aktivním nebo suspendovaném. V případě, když je exemplář třídy process ve stavu pasivním nebo ukončeném, vede volání jeho procedury evtime k chybě při výpočtu. Procedura nextev vydá odkaz na exemplář třídy process, jehož provedení je naplánováno právě pro provedení daného exempláře, pro exemplář třídy ve stavu aktivním nebo suspendovaném. Je-li ve stavu pasivním nebo ukončeném nebo je-li plán jeho provedení poslední položkou kalendáře událostí, vydá jeho procedura nextev referenční konstantu none.

SIMULACE DISKRÉTNÍCH SYSTÉMŮ Prostředky pro potlačení procesu Standartní prostředky jsou následující čtyři procedury: Procedure hold – je-li procedura volána s kladným parametrem, způsobí provedení posunu (přeplánování) právě aktivního procesu v kalendáři událostí o hodnotu parametru. Je-li volaná s nekladným parametrem, způsobí takové volání přesun plánu provedení dosud aktivního procesu za všechny plány zařazené v kalendáři událostí se stejným časem. plán dosud aktivního procesu akce hold(t) plán nově aktivního procesu časová osa

SIMULACE DISKRÉTNÍCH SYSTÉMŮ Procedura passivate – změní stav dosud aktivního exempláře třídy process na pasivní tj. vyřadí z kanceláře událostí jeho plán aktivace, který byl dosud na prvním místě seznamu SQS. plán nově aktivního procesu plán dosud aktivního procesu akce passivate časová osa

SIMULACE DISKRÉTNÍCH SYSTÉMŮ Procedura wait – rozšiřuje činnost procedury passivate. Před vlastním provedením procedury passivate se dosud aktivní exemplář třídy process zařadí na konec cyklického spojového seznamu, jehož identifikace je dána skutečným parametrem procedury wait. Procedura cancel – ruší plán libovolného procesu. Je-li procedura cancel použita se skutečným parametrem, který odkazuje na právě aktivní exemplář třídy process, je její volání totožné s voláním procedury passivate. Jinak odstraní volání procedury cancel z kalendáře plán aktivace exempláře třídy process, který je dán jejím skutečným parametrem.

SIMULACE DISKRÉTNÍCH SYSTÉMŮ Prostředky pro aktivaci procesu Procedura ACTIVATE – provádí vlastní tvorbu exemplářů třídy EVENNOTICE a jejich zařazování do kalendáře událostí SQS. K jejímu volání slouží několik speciálních příkazů. Obecný syntaktický tvar těchto příkazů: AP nebo APD kde A – aktivátor, P – je jednoduchý referenční výraz označující exemplář třídy process, kterého se aktivace týká a D – je určení doby aktivace, které může chybět Aktivátory: activate x reaktivate Časové určení doby aktivace: at Tdelay T at T prior delay T prior Událostní určení doby: after F before F T – jednoduchý aritmetický výraz, F – jednoduchý referenční výraz

SIMULACE DISKRÉTNÍCH SYSTÉMŮ Schematická činnost aktivačních příkazů 1 – activate P 5 – activate P dealy b 2 – activate P at a prior 6 – activate P before R 3 – activate P at a 7 – activate P after R 4 – activate P delay b prior dosud pasivní proces P suspendovaný proces R časová osa

SIMULACE DISKRÉTNÍCH SYSTÉMŮ Schematická činnost reaktivačních příkazů 1 – reactivate P 5 – reactivate P dealy b 2 – reactivate P at a prior 6 – reactivate P before R 3 – reactivate P at a 7 – reactivate P after R 4 – reactivate P delay b prior suspendovaný proces R časová osa suspendovaný proces P

SIMULACE DISKRÉTNÍCH SYSTÉMŮ Třída MAINPROGRAM Pro účely plánování v kalendáři událostí je ve třídě SIMULATION reprezentován hlavní prefixovaný blok pomocí exempláře speciální podtřídy třídy process, jehož operační část probíhá v nekonečném cyklu, ve kterém je iterován jediný příkaz - volání procedury detach předávající řízení hlavnímu prefixovanému bloku. Deklarace třídy MAINPROGRAM process class MAINPROGRAM; begin m : detach; go to m end; Před vlastním zahájením uživatelského simulačního výpočtu je vytvořen jeden exemplář třídy MAINPROGRAM, který je dostupný pomocí referenční proměnné main.

SIMULACE DISKRÉTNÍCH SYSTÉMŮ koprogram hlavního prefixovaného bloku reaktivační bod koprogram procesu main předávání řízení výpočtu koprogram samotného procesu

SIMULACE DISKRÉTNÍCH SYSTÉMŮ Tento exemplář může být běžně plánován pomocí prostředků pro aktivaci a potlačení procesu a vždy, když je mu řídicí strukturou simulačního kalendáře předáno řízení, provede akci procedury detach – tedy předá řízení výpočtu hlavnímu prefixovanému bloku. Koprogram hlavního bloku bude aktivní právě tehdy, když plán provádění exempláře main bude první na časové ose simulačního kalendáře. Procedura accum provede výpočet integrálu podle času.