next up previous contents
Next: Spojitá simulace Up: Diskrétní simulace Previous: Příklad:

Příklad diskrétního modelu

Uvažujme jedno obslužné středisko se vstupní frontou, kterým procházejí zákazníci:

  figure99
Figure: Obslužné středisko Box

//  model  MODEL1

#include "simlib.h"

//  deklarace  globálních  objektů
Facility  Box("Linka");
Histogram Tabulka("Tabulka",0,50,10);

class Zakaznik : public Process { // třída zákazníků
  double Prichod;                 // atribut každého zákazníka
  void Behavior() {               // popis chování zákazníka
    Prichod = Time;               // čas příchodu zákazníka
    Seize(Box);                   // obsazení zařízení Box
    Wait(10);                     // obsluha
    Release(Box);                 // uvolnění
    Tabulka(Time-Prichod);        // doba obsluhy a čekání
  }
};

class Generator : public Event {  // generátor zákazníků
  void Behavior() {               // popis chování generátoru
    new Zakaznik->Activate();     // nový zákazník v čase Time
    Activate(Time+Exponential(1e3/150)); // interval mezi příchody
  }
};

//  popis  experimentu
int main()
{
  Print("***** MODEL1 *****\n");
  Init(0,1000);              // inicializace experimentu
  new Generator->Activate(); // generátor zákazníků, aktivace
  Run();                     // simulace
  Box.Output();              // tisk výsledků
  Tabulka.Output();
  return 0;
}

Na začátku popisu modelu musíme použít příkaz #include, který definuje rozhraní simulační knihovny. Dále následují deklarace globálních objektů modelu, v tomto příkladu je deklarováno zařízení Box a histogram Tabulka.

Následuje definice třídy zákazníků, kteří mají chování popsáno v metodě Behavior. Každý zákazník má atribut Prichod, kterým je doba jeho příchodu do modelovaného systému. Zákazník obsadí zařízení Box na dobu 10 časových jednotek (není důležité, jde-li o hodiny či sekundy) a potom zařízení uvolní. Je zajištěno, že v případě již obsazeného zařízení bude zákazník čekat ve frontě, která se vytvoří u zařízení.

Po uvolnění zařízení se do histogramu Tabulka poznamená doba, strávená zákazníkem v systému (doba obsluhy plus doba strávená čekáním ve frontě u zařízení). Potom zákazník opouští námi sledovaný systém, a proto je po ukončení procesu automaticky zrušen.

Vytváření zákazníků je realizováno objektem třídy Generator, který periodicky se opakující událostí modeluje příchody zákazníků do systému tak, že vytváří nové zákazníky a aktivuje je.

Popis experimentu je součástí funkce main. Je inicializován model a nastavena doba simulace funkcí Init od času nula do 1000. Potom je zajištěno vytvoření generátoru příchodů zákazníků do modelu. Po inicializaci spustíme vlastní simulaci voláním funkce Run. Po ukončení experimentu se vytisknou informace, získané v histogramu Tabulka.



Petr Peringer
Mon Dec 8 13:24:19 CET 1997