Demonstrační cvičení IMS #1. Diskrétní modelování Petriho sítě a SIMLIB/C++

Podobné dokumenty
Modelování a simulace - spojité modelování

Úvod do simulace - 1

Simulační software Witness. Ing. Michal Dorda, Ph.D.

Kendallova klasifikace

Úvod do programování - Java. Cvičení č.4

Úvod do systémů hromadné obsluhy. charakteristika SHO: systém, který poskytuje obsluhu určitého typu

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

4EK201 Matematické modelování. 8. Modely hromadné obsluhy

Algoritmizace diskrétních. Ing. Michal Dorda, Ph.D.

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Dynamické datové struktury IV.

Úvod do programovacích jazyků (Java)

Úvod do simulace - 1

Exponenciální modely hromadné obsluhy

4EK311 Operační výzkum. 8. Modely hromadné obsluhy

SIMULACE SPOLEHLIVOSTI SYSTÉMŮ HROMADNÉ OBSLUHY. Michal Dorda. VŠB - TU Ostrava, Fakulta strojní, Institut dopravy

Vrstva přístupu k médiu (MAC) a/b/g/n

Okruh 3: SHO Výrobní linka

Dynamické datové struktury III.

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Teorie hromadné obsluhy

MODELOVÁNÍ UZAVŘENÝCH OBSLUŽNÝCH LOGISTICKÝCH SYSTÉMŮ PETRIHO SÍTĚMI

Konstruktory a destruktory

KGG/STG Statistika pro geografy

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

Pro kontrolu správného formátu hodnoty N použijeme metodu try-catch.

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT

Západočeská univerzita v Plzni

Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu

NÁHODNÉ VELIČINY JAK SE NÁHODNÁ ČÍSLA PŘEVEDOU NA HODNOTY NÁHODNÝCH VELIČIN?

Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů.

1. Téma 12 - Textové soubory a výjimky

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

ALG 14. Vícedimenzionální data. Řazení vícedimenzionálních dat. Experimentální porovnání řadících algoritmů na vícedimenzionálních datech

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Více o konstruktorech a destruktorech

IRAE 07/08 Přednáška č. 7. Začátek (head)

1. Téma 03 - Rozhodování

Programování v C++ 1, 1. cvičení

Abstraktní datové typy

Šablony, kontejnery a iterátory

Poslední nenulová číslice faktoriálu

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Počítačová simulace logistických procesů II 10. přednáška Simulační experimentování

Metodický list k didaktickému materiálu

Reliance. Komunikační driver Johnson Controls verze 1.5.4

Teorie front. Systém hromadné obsluhy

Šablony, kontejnery a iterátory

Větvení programů příkaz IF

Petr Peringer peringer AT fit.vutbr.cz Martin Hrubý hrubym AT fit.vutbr.cz. (Verze: 22. listopadu 2018)

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku

Generické programování

Road Traffic Simulation & OMNeT++

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

ROZDĚLENÍ SPOJITÝCH NÁHODNÝCH VELIČIN

Analýza spolehlivosti tlakové nádoby metodou Monte Carlo

Jazyk C# a platforma.net

Abstraktní třídy, polymorfní struktury

DSA, První krok: máme dokázat, že pro left = right vrátí volání f(array, elem, left, right)

Toolboxy analýzy a modelování stochastických systémů

Architektura COM. Historie Component Object Model (COM) Komunikace s komponentami Rozhraní komponent COM komponenty v.net.

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Vícekanálové čekací systémy

Zápis programu v jazyce C#

SYSTÉMY HROMADNÉ OBSLUHY. Teorie front

Kolekce, cyklus foreach

ALG 09. Radix sort (přihrádkové řazení) Counting sort. Přehled asymptotických rychlostí jednotlivých řazení. Ilustrační experiment řazení

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

KTE / ZPE Informační technologie

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT

P13: Statistické postupy vyhodnocování únavových zkoušek, aplikace normálního, Weibullova rozdělení, apod.

Teorie hromadné obsluhy (Queuing Theory)

Návrh a vyhodnocení experimentu

Úvod do Petriho sítí. Ing. Michal Dorda, Ph.D.

PROGRAMOVÁNÍ V C++ CVIČENÍ

Jazyk C++ I. Šablony 2

Příloha A Automatizovaná laboratorní úloha

VYUŽITÍ PRAVDĚPODOBNOSTNÍ METODY MONTE CARLO V SOUDNÍM INŽENÝRSTVÍ

IAJCE Přednáška č. 7. řízení semaforu na křižovatce = přepínání červená/oranžová/zelená

Objektově orientované programování

Algoritmizace a programování

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Simulace systému hromadné obsluhy Nejčastější chyby v semestrálních pracích

UNIVERZITA PARDUBICE

12. VHDL pro verifikaci - Testbench I

Pracovní text a úkoly ke cvičením MF002

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Jazyk C++ I. Polymorfismus

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

RMI - Distribuované objekty v Javě

NPRG031 Programování II --- 2/2 Z, Zk

Soubor jako posloupnost bytů

Indexové seznamy. známe už pole, kde ale musí být předem známa velikost indexové seznamy umí růst dynamicky

PŘETĚŽOVÁNÍ OPERÁTORŮ

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

Programování v Javě I. Únor 2009

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

Transkript:

Demonstrační cvičení IMS #1 Diskrétní modelování Petriho sítě a SIMLIB/C++

Petriho sítě v modelování

Parametry míst Místa mohou specifikovat: kapacitu (maximum uložených značek) počáteční stav (počet značek) (daný stav)

Parametry přechodů Časování konstantní, stochastické (pouze u časovaných) Priorita (pouze okamžité) Pravděpodobnost (pouze okamžité) Parametry NELZE kombinovat

Sémantika časovaného přechodu kapacita, generátor náhodných čísel

Parametry přechodu Okamžitý (nečasový) přechod má automaticky prioritu. Značíme pri=x, kde X je {0,1,2,... Implicitně pri=0

Parametry přechodu - pravděpodobnost

!!!!!! Chybně!!!!!!

Chyby

Váha hrany Implicitně 1 Parametry hrany

Příklady Modelujeme diskrétní systémy událostně nebo procesně řízená simulace. Identifikovat procesy. Identifikovat zdroje (obvykle sdílené). SHO: obslužné linky, charakteristiky způsob vstupování procesů (intervaly mezi příchody) způsob obsluhy procesů (intervaly, obslužná síť) statistiky

Obsazení zařízení

Volba z více zařízení

Příklad přenosová linka V intervalech daných exponenciálním rozložením se středem 250 ms vzniká potřeba na odeslání zprávy Odeslání zprávy linkou trvá 150-250 ms pak dotaz na správnost přenosu 5 ms 1% chyba, pak opakování přenosu Priority zpráv: 20% - vysoká priorita 40% - střední 40% - malá (normální)

Facility Linka("Prenosova linka"); Histogram hist("doba v systemu", 100, 100, 15); class Paket : public Process { public: void Behavior() { double time=time; Seize(Linka); opak: Wait(Uniform(150,250)); // prenos dat Wait(5); // dotaz na uspesnost if (Random()<=0.01) goto opak; // 1% chyba, opakovani Release(Linka); hist(time-time); ;

class Gener : public Event { public: void Behavior() { /* 20% - vysoka priorita 40% - stredni 40% - mala */ double r = Random(); Paket *p = new Paket; if (r<=0.2) p->priority=3; else if (r>0.2 && r<=0.6) p->priority=2; else p->priority=1; p->activate(); Activate(Time+Exponential(250)); ;

Učebna V poč. učebně je 10 počítačů. Studenti přichází v intervalech daných exp. rozložením se středem 10 min. Pokud je počítač volný, obsadí ho a pracují (exp(100min)). Jinak se 60% okamžitě postaví do fronty. Zbytek odchází. 20% se však po 30-60 min vrací.

class Student : public Process { public: void akce() { Enter(pocitace, 1); Wait(Exponential(100)); Leave(pocitace, 1); void Behavior() { opak: if (pocitace.full()) { if (Random()<=0.6) akce(); else { if (Random()<=0.2) { Wait(Uniform(30,60)); goto opak; else akce(); ;

Příklad: kravín Kravín má 100 krav, 5 dojiček, 1 nakládací rampu, 2 auta Krávy v intervalech exp(15h) potřebují podojit (dojička, 10% případů trvá exp (15min), jinak exp(8min)). Vznikne konvice s mlékem. Nakládají se na rampě do auta (kapacita 20). Auto náklad odváží (1hod). Identifikovat procesy.

Proces kráva

Proces auto

class Krava : public Process { void Behavior() { // zivotni cyklus while (1) { Wait(Exponential(15*60)); // 15 hod Enter(dojicky, 1); // bere dojicku // doba dojeni if (Random()<=0.1) Wait(Exponential(15)); else Wait(Exponential(8)); konvic++; // dalsi hotova konvice ; Leave(dojicky, 1); // uvolneni dojicky

class Auto : public Process { void Behavior() { while (1) { Seize(rampa); // postavi se na rampu double time=time; // bere 20 konvic for (int a=0; a<20; a++) { WaitUntil(konvic>0); // ceka na hotovou konvici konvic--; Wait(Uniform(1,2)); // nalozi ji ; Release(rampa); nalozeni(time-time); // doba nakladani Wait(60);

int main() { Init(0,200*60); // 200 hodin casovy ramec // vygenerovat 100 krav do systemu (zustavaji tam) for (int a=0; a<p_krav; a++) (new Krava)->Activate(); // dve auta do systemu (new Auto)->Activate(); (new Auto)->Activate(); Run(); rampa.output(); dojicky.output(); nalozeni.output();

Příklad vlek Lyžaři: obyčejní - exp(1), závodníci exp (10), závodníci mají přednost 40 kotev, jedno startovní stanoviště při nastupování: 10% - chyba, nástup se opakuje, kotva jede dál 90% - 4 min nahoru, kotva jede další 4min zpět

const double jedna_cesta = 4.0; Store Kotvy("Sklad kotev", 40); Facility Stanoviste("Stavoviste"); Histogram dobacesty("doba stravena lyzarem u vleku", 0, 1, 15); Histogram pocetpokusu("pocet pokusu nastoupit", 1, 1, 10); Stat cekanizavodniku("doba cekani zavodniku");

// generuje dva typy lyzaru. Obecny predpis class Generator : public Event { public: Generator(double interv, int pri) : Event() { Interval = interv; Pri = pri; ; void Behavior() { (new Lyzar(Pri))->Activate(); Activate(Time+Exponential(Interval)); ; double Interval; int Pri;

int { main() SetOutput("lyzar.dat"); Init(0, 1000); (new Generator(1,0))->Activate(); (new Generator(10,1))->Activate(); Run(); Kotvy.Output(); Stanoviste.Output(); dobacesty.output(); pocetpokusu.output(); cekanizavodniku.output();

lass Lyzar : public Process { ublic: Lyzar(int pri) : Process(pri) { ; void Behavior() { double time = Time; int pok=0; Seize(Stanoviste); opak: Enter(Kotvy, 1); Wait(Exponential(0.5)); pok++; if (Random()<=0.1) { // nezdareny start, kotva jede sama dve cesty (new KotvaBezi(2))->Activate(); goto opak; Release(Stanoviste); pocetpokusu(pok); Wait(jedna_cesta); dobacesty(time-time); (new KotvaBezi(1))->Activate(); // nahore opousti kotvu a ta jede ama dolu do skladu

// proces volne ujizdejici kotvy class KotvaBezi : public Process { public: KotvaBezi(int t) : Process() { T=t; ; // T=1 - jedna cesta, T=2 - cesta tam a zpet void Behavior() { Wait(jedna_cesta*T); Leave(Kotvy, 1); // dojede na seradiste a uvolni kotvu ; int T;

Výrobní systém Máme profese ve výrobním systému: zemědělec, vodohospodář, mlynář, pekař úředníci každá entita v systému musí v intervalech 380-400 min sníst jedno jídlo, jinak opouští systém sledujeme chod systému

class Profese:public Process { public: Profese(char *name):process() { (new JidloProc(this))->Activate(); void Behavior() { while (1) { prace(); odpocinek(); int najezse() { if (skladjidlo.obsahuje() > 0) { skladjidlo.vzit(this); return 1; return 0;

class JidloProc:public Process { public: JidloProc(Profese * kdo):process() { Kdo = kdo; ; void Behavior(); Profese *Kdo; ; void JidloProc::Behavior() { while (1) { Wait(Uniform(380, 400)); if (!Kdo->najezSe()) { Print("Cas %f, Process %s zdechl\n", Time, Kdo->Name); if (Kdo->where()) Kdo->Out(); Kdo->Cancel(); Deads++; return;

class Farmar:public Profese { public: Farmar(char *n):profese(n) { virtual void prace() { Wait(Exponential(40)); skladobili.vlozit(1); ; class Pekar:public Profese { public: Pekar(char *n):profese(n) { virtual void prace() { skladmouka.vzit(this); skladvoda.vzit(this); Wait(Exponential(120)); skladjidlo.vlozit(5); ;

for (int pocuredniku = 0; pocuredniku < 100; pocuredniku++) { Print("Pokus %d uredniku", pocuredniku); for (int pokus = 0; pokus < 10; pokus++) { Init(0, ccas); Deads=Counter=0; skladjidlo.clear(); skladvoda.clear();... (new Farmar("Farmar 1"))->Activate(); (new Farmar("Farmar 2"))->Activate(); (new Vodnik("Vodnik 1"))->Activate(); (new Mlynar("Mlynar 1"))->Activate(); (new Pekar("Pekar 1"))->Activate(); (new Pekar("Pekar 2"))->Activate(); for (int a = 0; a < pocuredniku; a++) (new Zevloun("urednik"))->Activate(); Run(); if (Deads>0) {...

Námět ekonomický systém Vyjdeme z předchozího modelu Každý výrobce má svoje proměnné náklady (náklady na výrobu). Má peníze. Trh udává ceny zboží. Pokud je na trhu zboží, jeho cena pomalu klesá. Pokud je poptáváno, jeho cena pomalu stoupá (dva stavy) Výrobce začne vyrábět, když má vstupy a cena na trhu mu pokryje náklady Musí nakupovat jídlo. Jaký bude vývoj cen?

Příště SIMLIB Modelování poruch Simulační experimenty Statistiky