////////////////////////////////////////////////////////////////////////////
// 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
syntax highlighted by Code2HTML, v. 0.9.1