////////////////////////////////////////////////////////////////////////////
// Model MODEL5.CPP SIMLIB/C++
//
// Ukázkový model obslužného střediska (2 zařízení 1 fronta), jiná strategie
//
#include "simlib.h"
// deklarace globálních objektů
Facility Box[2]; // bohužel nelze inicializovat
Queue InQueue("Vstupní");
Histogram Tabulka("Tabulka",0,5,20);
class Zakaznik : public Process { // třída zákazníků
double Prichod; // atribut každého zákazníka
int BoxNum;
void Behavior() { // --- popis chování zákazníka ---
Prichod = Time; // čas příchodu zákazníka
BoxNum = (Random()<0.5) ? 0 : 1;
if (Box[BoxNum].Busy())
{Into(InQueue); Passivate(); } // ##### ????? !!!!!!
Seize(Box[BoxNum]); // obsazení zařízení
Wait(10); // obsluha
Release(Box[BoxNum]); // uvolnění
for( Queue::iterator p = InQueue.begin();
p != InQueue.end();
++p ) {
Zakaznik *z = (Zakaznik*)(*p);
if( z->BoxNum == BoxNum ) {
z->Out();
z->Activate();
break;
}
} // for
Tabulka(Time-Prichod); // doba obsluhy a čekání
}
public: Zakaznik() { Activate(); } // konstruktor aktivuje
}; // Zakaznik
class Generator : public Event { // generátor zákazníků
void Behavior() { // --- popis chování generátoru ---
new Zakaznik; // nový zákazník
Activate(Time+Exponential(1e3/150)); // interval mezi příchody
}
public: Generator() { Activate(); } // konstruktor aktivuje
};
int main() {
Print(" MODEL5 - test SIMLIB\n");
SetOutput("model5.out");
Init(0,1000); // inicializace experimentu, čas bude 0..1000
Box[0].SetName("Box[0]");
Box[1].SetName("Box[1]");
new Generator; // generátor zákazníků
Run(); // simulace
Box[0].Output(); // tisk výsledků
Box[1].Output();
InQueue.Output();
Tabulka.Output();
return 0;
}
// konec
syntax highlighted by Code2HTML, v. 0.9.1