//////////////////////////////////////////////////////////////////////////// // Model MULTIEXP.CPP SIMLIB/C++ // // Více experimentů s různými parametry // #include "simlib.h" //SIMLIB_DEBUG_ON; const double ENDTime = 2000; // doba simulace // deklarace globálních objektů: Facility Box("Linka"); Histogram Tabulka("Tabulka",0,25,20); class Zakaznik : public Process { // popis třídy 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í } public: Zakaznik() { Activate(); } }; class Generator : public Event { // generátor zákazníků double dt; void Behavior() { // --- popis chování generátoru --- new Zakaznik; // nový zákazník, aktivace Activate(Time+Exponential(dt)); // interval mezi příchody } public: Generator(double d) : dt(d) { Activate(); } }; void Sample() { if(Time>0) Print(" %g", Tabulka.stat.MeanValue()); } Sampler s(Sample,500); int main() { SetOutput("multiexp.dat"); // přesměrování výstupu _Print("# MULTIEXP -- test více experimentů (čas=%g) \n", ENDTime); for(int i=1; i<=20; i++) { Print("# Experiment#%d \n", i); Init(0,ENDTime); // inicializace, čas bude 0..ENDTime Box.Clear(); // zde musíme inicializovat všechny objekty Tabulka.Clear(); double interval = i; new Generator(interval); // generátor zákazníků, aktivuje se Print("%g ", interval); Run(); // jeden simulační experiment Print(" %g\n", Tabulka.stat.MeanValue()); } return 0; } // konec