I9G2S1 Wegrecki sprawozdanie, WAT, SEMESTR V, podstawy symulacji


WOJSKOWA AKADEMIA TECHNICZNA

Podstawy Symulacji

Sprawozdanie

Autor: Wojciech Węgrecki

Grupa: I9G2S1

Prowadzący: dr inż. Jarosław Rulka

Treść zadania

0x01 graphic

Przy realizacji zadania należy przyjąć następujące dane z listy przedstawionej poniżej:

  1. rozkład zmiennych Tj: (nrDz + i) mod 6 + 1;

  2. rozkład zmiennych Oi: (nrDz + i + 1) mod 6 + 1;

  3. Li: (nrDz + i) mod 2 + 1;

  4. ALi: (nrDz + i + 2) mod 3 + 1;

  5. Rj = (nrDz + i + 5) mod 3 + 1;

  6. Mi = (nrDz + i + 2) mod 4 + 1;

  7. Blokowanie zgłoszeń 1. SMO;

  8. Klienci niecierpliwi w SMOi : Ni = (nrDz + i) mod 4 (ograniczony czas oczekiwania na rozpoczęcie obsługi);

gdzie:

i - numer SMO;

j - numer strumienia;

Tj - zmienna losowa oznaczająca czas pomiędzy kolejnymi napływami zgłoszeń do systemu;

Oi - zmienna losowa oznaczająca czas obsługi pojedynczego zgłoszenia w gnieździe;

Ni - zmienna losowa oznaczająca czas niecierpliwości zgłoszenia (gdy i = 0 => zgłoszenia cierpliwe);

Rj - zmienna losowa oznaczająca wielkość paczki zgłoszeń (wchodzących w tej samej chwili) j-tego strumienia;

pk - prawdopodobieństwa przemieszczenia się zgłoszenia po danym łuku;

Li - długość kolejki i-tego SMO;

AL.i - algorytmy kolejek (w przypadku istnienia kolejki z priorytetami należy przyjąć, że zgłoszenia posiadają priorytety);

  1. Rozkłady zmiennych losowych:

    1. Wykładniczy

    2. Erlanga

    3. Normalny

    4. Jednostajny

    5. Trójkątny

    6. Weibulla

  1. Długości kolejek pojedynczych SMO

    1. ograniczone (możliwe straty)

    2. nieograniczone

  2. Algorytm kolejek:

    1. FIFO

    2. LIFO

    3. Z priorytetami

  3. Liczba stanowisk obsługi w gniazdach (1-M)

  4. Ilość zgłoszeń jednocześnie napływających do systemu (1-R)

Pozostałe dane należy określać na początku symulacji.

Otrzymane dane dla nrDz=18:

T1 => rozkład Erlanga.

T2 => rozkład normalny

R1 => rozkład wykładniczy

R2 => rozkład Erlanga

O1 => rozkład normalny

O2 => rozkład jednostajny

O3 => rozkład trójkątny

L1 => długość kolejki - nieograniczona.

L2 => długość kolejki - ograniczona (możliwe straty).

L3 => długość kolejki - nieograniczona.

AL1 => kolejka FIFO

AL2 => kolejka LIFO

AL3 => kolejka z priorytetami

N1 => rozkład wykładniczy.

N2 => rozkład Erlanga.

N3 => rozkład normalny.

ROZKŁADY UŻYTE W ZADANIU

  1. Rozkład jednostajny:

Rozkład jednostajny to ciągły rozkład prawdopodobieństwa, dla którego gęstość prawdopodobieństwa w przedziale od a do b jest stała i różna od zera, a poza nim równa zeru. Istnieje też wersja dyskretna tego rozkładu oraz uogólnienie na dowolne nośniki.

0x01 graphic

Parametry rozkładu:

0x01 graphic

a=>lo, b=>hi

Gęstość prawdopodobieństwa:

0x01 graphic

Dystrybuanta:

0x01 graphic

Średnia wartość oczekiwana:

0x01 graphic

Wariancja:

0x01 graphic

  1. Rozkład trójkątny.

Rozkład trójkątny to ciągły rozkład prawdopodobieństwa zmiennej losowej .

0x01 graphic

Parametry rozkładu:

0x01 graphic
- min

0x01 graphic
- mean

0x01 graphic
-max

Gęstość prawdopodobieństwa:

0x01 graphic

Dystrybuanta:

0x01 graphic

Średnia wartość oczekiwana:

0x01 graphic

Wariancja:

0x01 graphic

  1. Rozkład wykładniczy.

Rozkład wykładniczy to rozkład zmiennej losowej opisujący sytuację, w której obiekt może przyjmować stany X i Y, przy czym obiekt w stanie X może ze stałym prawdopodobieństwem przejść w stan Y w jednostce czasu. Prawdopodobieństwo wyznaczane przez ten rozkład to prawdopodobieństwo przejścia ze stanu X w stan Y w czasie δt.

0x01 graphic

Parametr rozkładu:

0x01 graphic

odwrotność parametru skali (liczba rzeczywista)

Gęstość prawdopodobieństwa:

0x01 graphic

Dystrybuanta:

0x01 graphic

Średnia wartość oczekiwana:

0x01 graphic

Wariancja:

0x01 graphic

Funkcja charakterystyczna

0x01 graphic

  1. Rozkład Erlanga

Ciągły rozkład prawdopodobieństwa, związany z rozkładem wykładniczym i rozkładem gamma.

Związek z rozkładem wykładniczym jest następujący. Dla ciągu niezależnych zmiennych losowych , z których każda ma rozkład wykładniczy z jednakowym parametrem λ zmienna losowa ma rozkład Erlanga z parametrami k = n, θ = 1 / λ. Wynika to bezpośrednio z postaci funkcji charakterystycznej rozkładu wykładniczego:

0x01 graphic

Gęstość prawdopodobieństwa:

0x01 graphic

gdzie:

k > 0

λ >0

  1. Rozkład normalny

Zwany także rozkładem Gaussa - jeden z najważniejszych rozkładów prawdopodobieństwa. Odgrywa ważną rolę w statystycznym opisie zagadnień przyrodniczych, przemysłowych, medycznych, socjalnych itp. Wykres funkcji prawdopodobieństwa tego rozkładu jest krzywą dzwonową.

Gęstość prawdopodobieństwa:

0x01 graphic

Dystrybuanta:

0x01 graphic

Wartość oczekiwana:

µ => mean

Wariancja:

σ2

Opis programu:

Klasy:

Gen1Obj, Gen2Obj - klasy definiujące generatory;

KliObj - klasa obrazująca klienta - paczkę, oraz jego priorytet;

MonitObj - klasa odpowiedzialna za monitorowanie SMO, oraz całego systemu;

Kol1Obj, Kol2Obj, Kol3Obj - definicje kolejek w SMO;

Gnz1Obj, Gnz2Obj, Gnz3Obj - definicje gniazd w SMO;

WyjZSysObj - wyjście dla klienta z systemu.

Charakterystyki:

Wyznaczam je przy wykorzystaniu monitorów zaimplementowanych w języku MODSIM II. Dla estymacji odchylenia standardowego wykorzystuję funkcję StdDev(), a Mean() dla estymacji wartości oczekiwanej.

Liczba zgłosz - jest to element zwiększany na wejściu klienta, zmniejszany po jego obsłużeniu, usunięciu lub odpadnięciu z pełnej kolejki w systemie.

Liczba zgłosz w kolejce - zwiększana przy wejściu do kolejki, a zmniejszany przy usunięciu z kolejki.

Liczba zajętych kanałów - zwiększana przy aktywacji kanału, a zmniejszana po jego dezaktywacji.

Czas przebywania - dla każdego klienta istnieje znacznik wejścia do systemu i SMO. Czas przebywania jest wyliczony z wzoru czas obsługi - czas wejścia. Powrót do kolejki oznacza dalsze sumowanie czasu, bez jego zerowania.

Prawdopodobieństwo obugi zgłoszenia - liczony jako iloraz liczby klientów obsłużonych przez liczbę klientów ogółem. Do statystyki SMO są również wliczani klienci, którzy zostali odrzuceni z powodu zapełnienia kolejki.

Wzory estymatorów:

a. Średnia z próby n-elementowej:

0x01 graphic

b. Odchylenie standardowe z próby n-elementowej:

0x01 graphic

KOD PROGRAMU

Moduł definicyjny

DEFINITION MODULE SmoMod;

FROM RandMod IMPORT RandomObj;

FROM IOMod IMPORT StreamObj,ALL FileUseType;

FROM SimMod IMPORT StartSimulation, SimTime,TriggerObj;

FROM GrpMod IMPORT QueueObj,RankedObj,StackObj,BasicGroupObj;

FROM StatMod IMPORT IStatObj,ITimedStatObj,RStatObj,RTimedStatObj,

TSINTEGER,TSREAL,SREAL,SINTEGER;

TYPE

Kol1Obj=OBJECT;FORWARD;

Gnz1Obj=OBJECT;FORWARD;

Kol2Obj=OBJECT;FORWARD;

Gnz2Obj=OBJECT;FORWARD;

Kol3Obj=OBJECT;FORWARD;

Gnz3Obj=OBJECT;FORWARD;

MonitObj=OBJECT;

start:INTEGER;

prawdobslzgl:REAL;

czasprzebywania:SREAL;

lizajkan:TSINTEGER;

lizglowkol:TSINTEGER;

liczbazgloszen:TSINTEGER;

liczbaogolem:INTEGER;

liczbaobsluzonych:INTEGER;

system:MonitObj;

ASK METHOD UstawCzasPrzebywania(IN czas:REAL);

ASK METHOD UstLiZgl(IN l:INTEGER);

ASK METHOD UstLiZglWKol(IN l:INTEGER);

ASK METHOD UstLiZajKan(IN l:INTEGER);

ASK METHOD ZwiekszLiczbaOgolem();

ASK METHOD ZwiekszLiczbaObsluzonych();

ASK METHOD Reset();

ASK METHOD Init(IN st:INTEGER;IN tsys:MonitObj);

END OBJECT;

KliObj=OBJECT;

priorytet:INTEGER;

czaswe:REAL;

czaswesmo:REAL;

zapetlenie:BOOLEAN;

ASK METHOD Zapetlenie(IN flaga:BOOLEAN);

ASK METHOD CzWej(IN tczaswe:REAL);

ASK METHOD CzWejSmo(IN tczaswesmo:REAL);

ASK METHOD UstawPriorytet(IN prio: INTEGER);

TELL METHOD StartNiecierpliwosc(IN czas:REAL;IN pojemnik:BasicGroupObj);

END OBJECT;

WyjZSysObj=OBJECT;

monitor:MonitObj;

ASK METHOD Wstaw(IN Klient:KliObj);

ASK METHOD Init(IN mon:MonitObj);

END OBJECT;

Gen1Obj=OBJECT;

ASK METHOD Init(IN Mean1:REAL; IN k1:INTEGER; IN lk:INTEGER; IN kol1:Kol1Obj;

IN mon:MonitObj;IN trmax:REAL;IN trand:RandomObj);

Mean:REAL;

k:INTEGER;

Kol1:Kol1Obj;

LiczbaKlientow:INTEGER;

monitor:MonitObj;

Lambda:REAL;

rand:RandomObj;

TELL METHOD Generowanie();

END OBJECT;

Gen2Obj=OBJECT;

Mean, Sigma:REAL;

Mmean:REAL;

Kol3:Kol3Obj;

LiczbaKlientow:INTEGER;

monitor:MonitObj;

k:INTEGER;

rand:RandomObj;

TELL METHOD Generowanie();

ASK METHOD Init(IN Mean2,Sigma2,Mean3:REAL;

IN lk:INTEGER; IN kol3:Kol3Obj;IN mon:MonitObj;

IN trmax:INTEGER;IN trand:RandomObj);

END OBJECT;

Kol1Obj=OBJECT(QueueObj);

Lambda:REAL;

Gnz1:Gnz1Obj;

monitor:MonitObj;

rand:RandomObj;

ASK METHOD Wstaw(INOUT elem:KliObj);

ASK METHOD Init(IN tLambda:REAL;IN g1:Gnz1Obj;IN mon:MonitObj;IN trand:RandomObj);

OVERRIDE;

ASK METHOD Remove():ANYOBJ;

ASK METHOD RemoveThis(IN co:ANYOBJ);

ASK METHOD ObjTerminate;

END OBJECT;

Gnz1Obj=OBJECT;

Mean:REAL;

Sigma:REAL;

Kanaly:INTEGER;

Aktywne:INTEGER;

Kol1:Kol1Obj;;

Kol2:Kol2Obj;

monitor:MonitObj;

trigger2:TriggerObj;

rand:RandomObj;

TELL METHOD Obsluga();

ASK METHOD UstawAktywne(IN ak:INTEGER);

ASK METHOD Init(IN means1,sigmas1:REAL;

IN k:INTEGER; IN kol1:Kol1Obj;

IN mon:MonitObj;IN ttrigger2:TriggerObj;

IN trand:RandomObj;IN tKol2:Kol2Obj);

END OBJECT;

Kol2Obj=OBJECT(StackObj);

Pojemnosc:INTEGER;

Mean:REAL;

k:INTEGER;

Gnz2:Gnz2Obj;

monitor:MonitObj;

trigger2:TriggerObj;

rand:RandomObj;

ASK METHOD Wstaw(INOUT elem:KliObj);

ASK METHOD Init(IN p:INTEGER;IN means2k:REAL;

IN k2k:INTEGER; IN g2:Gnz2Obj;IN mon:MonitObj;

IN ttrigger2:TriggerObj;IN trand:RandomObj);

OVERRIDE;

ASK METHOD Remove():ANYOBJ;

ASK METHOD RemoveThis(IN co:ANYOBJ);

ASK METHOD ObjTerminate;

END OBJECT;

Gnz2Obj=OBJECT;

lo:REAL;

hi:REAL;

Kanaly:INTEGER;

Aktywne:INTEGER;

Kol2:Kol2Obj;

monitor:MonitObj;

p2:REAL;

rand:RandomObj;

outsystemsmo:WyjZSysObj;

ASK METHOD UstawAktywne(IN ak:INTEGER);

TELL METHOD Obsluga();

ASK METHOD Init(IN tlo, thi:REAL; IN kan:INTEGER;

IN kol2:Kol2Obj;IN mon:MonitObj;IN tp2:REAL;

IN toutsystemsmo:WyjZSysObj;IN trand:RandomObj);

END OBJECT;

Kol3Obj=OBJECT(RankedObj[ANYOBJ:KliObj]);

Lambda:REAL;

Mean:REAL;

Sigma:REAL;

trigger3:TriggerObj;

Gnz3:Gnz3Obj;

monitor:MonitObj;

rand:RandomObj;

ASK METHOD Wstaw(INOUT elem:KliObj);

ASK METHOD Init(IN means3,sigmas3:REAL;IN g3:Gnz3Obj;

IN mon:MonitObj;IN trand:RandomObj;IN ttrigger3:TriggerObj);

OVERRIDE;

ASK METHOD Remove():KliObj;

ASK METHOD RemoveThis(IN co:KliObj);

ASK METHOD Rank(IN l,r:KliObj):INTEGER;

ASK METHOD ObjTerminate;

END OBJECT;

Gnz3Obj=OBJECT;

min,m,max:REAL;

Kanaly:INTEGER;

Aktywne:INTEGER;

Kol3:Kol3Obj;

monitor:MonitObj;

p3:REAL;

rand:RandomObj;

outsystemsmo:WyjZSysObj;

ASK METHOD UstawAktywne(IN ak:INTEGER);

TELL METHOD Obsluga();

ASK METHOD Init(IN tmin,tm,tmax:REAL; IN kan:INTEGER;

IN kol3:Kol3Obj;IN mon:MonitObj;IN tp3:REAL;

IN toutsystemsmo:WyjZSysObj;IN trand:RandomObj);

END OBJECT;

PROCEDURE IfResetMonitors(IN lr:INTEGER);

VAR

gen1:Gen1Obj;

gen2:Gen2Obj;

gnz1:Gnz1Obj;

gnz2:Gnz2Obj;

gnz3:Gnz3Obj;

kol1:Kol1Obj;

kol2:Kol2Obj;

kol3:Kol3Obj;

mon0:MonitObj;

mon1:MonitObj;

mon2:MonitObj;

mon3:MonitObj;

out0:WyjZSysObj;

ran0:RandomObj;

trg0:TriggerObj;

trg1:TriggerObj;

END MODULE.

Moduł implementacyjny

IMPLEMENTATION MODULE SmoMod;

FROM MathMod IMPORT CEIL,SQRT;

FROM GrpMod IMPORT BasicGroupObj;

FROM RandMod IMPORT RandomObj,FetchSeed;

FROM IOMod IMPORT StreamObj,ALL FileUseType;

FROM SimMod IMPORT SimTime,TriggerObj,Interrupt;

FROM StatMod IMPORT IStatObj,ITimedStatObj,RStatObj,

RTimedStatObj,TSINTEGER,TSREAL,SREAL,SINTEGER;

OBJECT KliObj;

ASK METHOD CzWejSmo(IN tczaswesmo:REAL);

BEGIN

czaswesmo:=tczaswesmo;

END METHOD;

ASK METHOD Zapetlenie(IN flaga:BOOLEAN);

BEGIN

zapetlenie:=flaga;

END METHOD;

ASK METHOD CzWej(IN tczaswe:REAL);

BEGIN

czaswe:=tczaswe;

END METHOD;

ASK METHOD UstawPriorytet(IN prio: INTEGER);

BEGIN

priorytet:=prio;

END METHOD;

TELL METHOD StartNiecierpliwosc(IN czas:REAL;IN pojemnik:BasicGroupObj);

BEGIN

WAIT DURATION czas;

ASK pojemnik TO RemoveThis(SELF);

DISPOSE(SELF);

OUTPUT("Klient sie zniecierpliwil i ucieka - ",SimTime);

ON INTERRUPT;

END WAIT;

END METHOD;

END OBJECT;

PROCEDURE IfResetMonitors(IN lr:INTEGER);

BEGIN

IF(lr=(ASK mon0 TO start))

ASK mon0 TO Reset();

END IF;

IF(lr=(ASK mon1 TO start))

ASK mon1 TO Reset();

END IF;

IF(lr=(ASK mon2 TO start))

ASK mon2 TO Reset();

END IF;

IF(lr=(ASK mon3 TO start))

ASK mon3 TO Reset();

END IF;

END PROCEDURE;

OBJECT MonitObj;

ASK METHOD UstLiZgl(IN l:INTEGER);

BEGIN

liczbazgloszen:=l;

END METHOD;

ASK METHOD UstLiZglWKol(IN l:INTEGER);

BEGIN

lizglowkol:=l;

END METHOD;

ASK METHOD UstawCzasPrzebywania(IN czas:REAL);

BEGIN

czasprzebywania:=czas;

END METHOD;

ASK METHOD UstLiZajKan(IN l:INTEGER);

BEGIN

lizajkan:=l;

END METHOD;

ASK METHOD ZwiekszLiczbaObsluzonych();

BEGIN

liczbaobsluzonych:=liczbaobsluzonych+1;

prawdobslzgl:=FLOAT(liczbaobsluzonych)/FLOAT(liczbaogolem);

END METHOD;

ASK METHOD ZwiekszLiczbaOgolem();

BEGIN

liczbaogolem:=liczbaogolem+1;

prawdobslzgl:=FLOAT(liczbaobsluzonych)/FLOAT(liczbaogolem);

END METHOD;

ASK METHOD Reset();

BEGIN

liczbaogolem:=liczbazgloszen;

liczbaobsluzonych:=0;

prawdobslzgl:=0.0;

ASK GETMONITOR(czasprzebywania,RStatObj) TO Reset();

ASK GETMONITOR(liczbazgloszen,ITimedStatObj) TO Reset();

ASK GETMONITOR(lizajkan,ITimedStatObj) TO Reset();

ASK GETMONITOR(lizglowkol,ITimedStatObj) TO Reset();

END METHOD;

ASK METHOD Init(IN st:INTEGER;IN tsys:MonitObj);

BEGIN

czasprzebywania:=0.0;

liczbazgloszen:=0;

lizajkan:=0;

lizglowkol:=0;

prawdobslzgl:=0.0;

liczbaogolem:=0;

liczbaobsluzonych:=0;

start:=st;

system:=tsys;

END METHOD;

END OBJECT;

OBJECT WyjZSysObj;

ASK METHOD Wstaw(IN Klient:KliObj);

BEGIN

ASK monitor TO ZwiekszLiczbaObsluzonych();

ASK monitor TO UstLiZgl(ASK monitor TO liczbazgloszen -1);

ASK monitor TO UstawCzasPrzebywania(SimTime - ASK Klient TO czaswe);

END METHOD;

ASK METHOD Init(IN mon:MonitObj);

BEGIN

monitor:=mon;

END METHOD;

END OBJECT;

OBJECT Gen1Obj;

TELL METHOD Generowanie();

VAR

Klient:KliObj;

i:INTEGER;

j:INTEGER;

lr:INTEGER;

czas:REAL;

BEGIN

FOR i:=1 TO LiczbaKlientow

IfResetMonitors(i);

czas:=ASK rand TO Erlang(Mean,k);

WAIT DURATION czas

ON INTERRUPT;

END WAIT;

lr:=CEIL(ASK rand TO Exponential(1.0/Lambda)); {sufit z liczby}

FOR j:=1 TO lr

NEW(Klient);

ASK Klient TO UstawPriorytet(ASK rand TO UniformInt(0,100));

ASK Klient TO CzWej(SimTime);

OUTPUT("Generator 1 wygenerowal klienta - ",SimTime);

ASK monitor TO UstLiZgl(ASK monitor TO liczbazgloszen +1);

ASK monitor TO ZwiekszLiczbaOgolem();

ASK Kol1 TO Wstaw(Klient);

END FOR;

END FOR;

END METHOD;

ASK METHOD Init(IN Mean1:REAL; IN k1:INTEGER; IN lk:INTEGER; IN kol1:Kol1Obj;IN mon:MonitObj;IN trmax:REAL;IN trand:RandomObj);

BEGIN

Mean:=Mean1;

k:=k1;

Kol1:=kol1;

LiczbaKlientow:=lk;

monitor:=mon;

Lambda:=trmax;

rand:=trand;

END METHOD;

END OBJECT;

OBJECT Gen2Obj;

TELL METHOD Generowanie();

VAR

Klient:KliObj;

i:INTEGER;

j:INTEGER;

lr:INTEGER;

czas:REAL;

BEGIN

FOR i:=1 TO LiczbaKlientow

IfResetMonitors(i);

czas:=ASK rand TO Normal(Mean,Sigma);

WAIT DURATION czas

ON INTERRUPT;

END WAIT;

lr:=CEIL(ASK rand TO Erlang(Mmean,k));

FOR j:=1 TO lr

NEW(Klient);

ASK Klient TO UstawPriorytet(ASK rand TO UniformInt(0,100));

ASK Klient TO CzWej(SimTime);

OUTPUT("Generator 2 wygenerowal klienta - ",SimTime);

ASK monitor TO UstLiZgl(ASK monitor TO liczbazgloszen +1);

ASK monitor TO ZwiekszLiczbaOgolem();

ASK Kol3 TO Wstaw(Klient);

END FOR;

END FOR;

END METHOD;

ASK METHOD Init(IN Mean2,Sigma2,Mean3:REAL;IN lk:INTEGER; IN kol3:Kol3Obj;IN mon:MonitObj;IN trmax:INTEGER;IN trand:RandomObj);

BEGIN

Mean:=Mean2;

Sigma:=Sigma2;

Kol3:=kol3;

LiczbaKlientow:=lk;

monitor:=mon;

k:=trmax;

Mmean:=Mean3;

rand:=trand;

END METHOD;

END OBJECT;

OBJECT Kol1Obj;

ASK METHOD ObjTerminate();

VAR

el: ANYOBJ;

BEGIN

FOREACH el IN SELF

RemoveThis(el);

DISPOSE(el);

END FOREACH;

INHERITED ObjTerminate();

END METHOD;

ASK METHOD Wstaw(INOUT elem:KliObj);

BEGIN

Add(elem);

ASK monitor TO UstLiZgl(ASK monitor TO liczbazgloszen +1);

ASK monitor TO UstLiZglWKol(ASK monitor TO lizglowkol +1);

ASK (ASK monitor TO system) TO UstLiZglWKol(ASK (ASK monitor TO system) TO lizglowkol +1);

ASK elem TO CzWej(SimTime);

ASK monitor TO ZwiekszLiczbaOgolem();

TELL elem TO StartNiecierpliwosc(ASK rand TO Exponential(1.0/Lambda),SELF);

IF(ASK Gnz1 TO Aktywne < ASK Gnz1 TO Kanaly)

TELL Gnz1 TO Obsluga();

ASK Gnz1 TO UstawAktywne(ASK Gnz1 TO Aktywne+1);

END IF;

END METHOD;

ASK METHOD Remove():ANYOBJ;

BEGIN

ASK monitor TO UstLiZglWKol(ASK monitor TO lizglowkol -1);

ASK (ASK monitor TO system) TO UstLiZglWKol(ASK (ASK monitor TO system) TO lizglowkol -1);

RETURN INHERITED Remove();

END METHOD;

ASK METHOD RemoveThis(IN co:ANYOBJ);

BEGIN

ASK monitor TO UstLiZglWKol(ASK monitor TO lizglowkol -1);

ASK monitor TO UstLiZgl(ASK monitor TO liczbazgloszen -1);

ASK (ASK monitor TO system) TO UstLiZglWKol(ASK (ASK monitor TO system) TO lizglowkol -1);

ASK (ASK monitor TO system) TO UstLiZgl(ASK (ASK monitor TO system) TO liczbazgloszen -1);

INHERITED RemoveThis(co);

END METHOD;

ASK METHOD Init(IN tLambda:REAL;IN g1:Gnz1Obj;IN mon:MonitObj;IN trand:RandomObj);

BEGIN

Lambda:=tLambda;

Gnz1:=g1;

monitor:=mon;

rand:=trand;

END METHOD;

END OBJECT;

OBJECT Gnz1Obj;

TELL METHOD Obsluga();

VAR

Klient: KliObj;

BEGIN

ASK (ASK monitor TO system) TO UstLiZajKan(ASK (ASK monitor TO system) TO lizajkan +1);

ASK monitor TO UstLiZajKan(ASK monitor TO lizajkan +1);

WHILE(ASK Kol1 TO numberIn>0)

Klient:=ASK Kol1 TO Remove();

OUTPUT("Gniazdo 1 obsluguje klienta; czas - ",SimTime);

Interrupt(Klient,"StartNiecierpliwosc");

WAIT DURATION ASK rand TO Normal(Mean,Sigma);

ON INTERRUPT;

END WAIT;

WHILE(ASK Kol2 TO Pojemnosc=ASK Kol2 TO numberIn)

OUTPUT("W 2 kolejce nie ma miejsca na klienta; czas - ",SimTime);

WAIT FOR trigger2 TO Fire();

ON INTERRUPT;

END WAIT;

END WHILE;

OUTPUT("Gniazdo 1 wypuszcza klienta do kolejki 2 po czasie - ",SimTime);

ASK monitor TO UstLiZgl(ASK monitor TO liczbazgloszen -1);

ASK monitor TO UstawCzasPrzebywania(SimTime - ASK Klient TO czaswesmo);

ASK monitor TO ZwiekszLiczbaObsluzonych();

ASK Kol2 TO Wstaw(Klient);

END WHILE;

Aktywne:=Aktywne-1;

ASK monitor TO UstLiZajKan(ASK monitor TO lizajkan -1);

ASK (ASK monitor TO system) TO UstLiZajKan(ASK (ASK monitor TO system) TO lizajkan -1);

END METHOD;

ASK METHOD Init(IN means1,sigmas1:REAL; IN k:INTEGER; IN kol1:Kol1Obj;IN mon:MonitObj;IN ttrigger2:TriggerObj;IN trand:RandomObj;IN tKol2:Kol2Obj);

BEGIN

Sigma:=sigmas1;

Mean:=means1;

Kanaly:=k;

Kol1:=kol1;

Aktywne:=0;

monitor:=mon;

trigger2:=ttrigger2;

rand:=trand;

Kol2:=tKol2;

END METHOD;

ASK METHOD UstawAktywne(IN ak:INTEGER);

BEGIN

Aktywne:=ak;

END METHOD;

END OBJECT;

OBJECT Kol2Obj;

ASK METHOD ObjTerminate();

VAR

el: ANYOBJ;

BEGIN

FOREACH el IN SELF

RemoveThis(el);

DISPOSE(el);

END FOREACH;

INHERITED ObjTerminate();

END METHOD;

ASK METHOD Wstaw(INOUT elem:KliObj);

BEGIN

IF(Pojemnosc>numberIn)

Add(elem);

ASK monitor TO UstLiZglWKol(ASK monitor TO lizglowkol +1);

ASK (ASK monitor TO system) TO UstLiZglWKol(ASK

(ASK monitor TO system) TO lizglowkol +1);

IF(ASK elem TO zapetlenie=FALSE)

ASK monitor TO ZwiekszLiczbaOgolem();

ASK monitor TO UstLiZgl(ASK monitor TO liczbazgloszen +1);

ASK elem TO CzWejSmo(SimTime);

END IF;

ASK elem TO Zapetlenie(FALSE);

TELL elem TO StartNiecierpliwosc(ASK rand TO Erlang(Mean,k),SELF);

IF(ASK Gnz2 TO Aktywne < ASK Gnz2 TO Kanaly)

TELL Gnz2 TO Obsluga();

ASK Gnz2 TO UstawAktywne(ASK Gnz2 TO Aktywne+1);

END IF;

ELSE

DISPOSE(elem);

OUTPUT("W 2 kolejce nie ma miejsca; czas - ",SimTime);

ASK (ASK monitor TO system) TO UstLiZgl(ASK

(ASK monitor TO system) TO liczbazgloszen -1);

END IF;

END METHOD;

ASK METHOD Remove():ANYOBJ;

BEGIN

ASK monitor TO UstLiZglWKol(ASK monitor TO lizglowkol -1);

ASK (ASK monitor TO system) TO UstLiZglWKol(ASK

(ASK monitor TO system) TO lizglowkol -1);

RETURN INHERITED Remove();

END METHOD;

ASK METHOD RemoveThis(IN co:ANYOBJ);

BEGIN

ASK monitor TO UstLiZglWKol(ASK monitor TO lizglowkol -1);

ASK monitor TO UstLiZgl(ASK monitor TO liczbazgloszen -1);

ASK (ASK monitor TO system) TO UstLiZglWKol

(ASK (ASK monitor TO system) TO lizglowkol -1);

ASK (ASK monitor TO system) TO UstLiZgl(ASK

(ASK monitor TO system) TO liczbazgloszen -1);

INHERITED RemoveThis(co);

END METHOD;

ASK METHOD Init(IN p:INTEGER;IN means2k:REAL; IN k2k:INTEGER;

IN g2:Gnz2Obj;IN mon:MonitObj;IN ttrigger2:TriggerObj;IN trand:RandomObj);

BEGIN

Pojemnosc:=p;

Mean:=means2k;

k:=k2k;

Gnz2:=g2;

monitor:=mon;

trigger2:=ttrigger2;

rand:=trand;

END METHOD;

END OBJECT;

OBJECT Gnz2Obj;

TELL METHOD Obsluga();

VAR

Klient: KliObj;

BEGIN

ASK (ASK monitor TO system) TO UstLiZajKan(ASK

(ASK monitor TO system) TO lizajkan +1);

ASK monitor TO UstLiZajKan(ASK monitor TO lizajkan +1);

WHILE(ASK Kol2 TO numberIn>0)

Klient:=ASK Kol2 TO Remove();

OUTPUT("Klient wchodzi do gniazda SMO 2 po czasie - ",SimTime);

Interrupt(Klient,"StartNiecierpliwosc");

WAIT DURATION ASK rand TO UniformReal(lo,hi);

ON INTERRUPT;

END WAIT;

IF (ASK rand TO Sample < p2)

OUTPUT("Klient zawraca do SMO 2; czas - ",SimTime);

ASK Klient TO Zapetlenie(TRUE);

ASK Kol2 TO Wstaw(Klient);

ELSE

ASK monitor TO UstLiZgl(ASK monitor TO liczbazgloszen -1);

ASK monitor TO ZwiekszLiczbaObsluzonych();

ASK monitor TO UstawCzasPrzebywania(SimTime - ASK Klient TO czaswesmo);

ASK outsystemsmo TO Wstaw(Klient);

OUTPUT("klient idzie do wyjscia, czas=",SimTime);

END IF;

END WHILE;

Aktywne:=Aktywne-1;

ASK monitor TO UstLiZajKan(ASK monitor TO lizajkan -1);

ASK (ASK monitor TO system) TO UstLiZajKan(ASK

(ASK monitor TO system) TO lizajkan -1);

END METHOD;

ASK METHOD Init(IN tlo, thi:REAL; IN kan:INTEGER;

IN kol2:Kol2Obj;IN mon:MonitObj;IN tp2:REAL;

IN toutsystemsmo:WyjZSysObj;IN trand:RandomObj);

BEGIN

lo:=tlo;

hi:=thi;

Kanaly:=kan;

Kol2:=kol2;

Aktywne:=0;

monitor:=mon;

p2:=tp2;

outsystemsmo:=toutsystemsmo;

rand:=trand;

END METHOD;

ASK METHOD UstawAktywne(IN ak:INTEGER);

BEGIN

Aktywne:=ak;

END METHOD;

END OBJECT;

OBJECT Kol3Obj;

ASK METHOD ObjTerminate();

VAR

el: ANYOBJ;

BEGIN

FOREACH el IN SELF

RemoveThis(el);

DISPOSE(el);

END FOREACH;

INHERITED ObjTerminate();

END METHOD;

ASK METHOD Wstaw(INOUT elem:KliObj);

BEGIN

Add(elem);

ASK monitor TO UstLiZglWKol(ASK monitor TO lizglowkol +1);

ASK (ASK monitor TO system) TO UstLiZglWKol(ASK

(ASK monitor TO system) TO lizglowkol +1);

IF(ASK elem TO zapetlenie=FALSE)

ASK monitor TO ZwiekszLiczbaOgolem();

ASK elem TO CzWejSmo(SimTime);

ASK monitor TO UstLiZgl(ASK monitor TO liczbazgloszen +1);

END IF;

ASK elem TO Zapetlenie(FALSE);

TELL elem TO StartNiecierpliwosc(ASK rand TO Normal(Mean,Sigma),SELF);

IF(ASK Gnz3 TO Aktywne < ASK Gnz3 TO Kanaly)

TELL Gnz3 TO Obsluga();

ASK Gnz3 TO UstawAktywne(ASK Gnz3 TO Aktywne+1);

END IF;

END METHOD;

ASK METHOD Rank(IN l,r:KliObj):INTEGER;

BEGIN

IF(l.priorytet < r.priorytet)

RETURN 1;

ELSIF(l.priorytet > r.priorytet)

RETURN -1;

ELSE

RETURN 0;

END IF;

END METHOD;

ASK METHOD RemoveThis(IN co:KliObj);

BEGIN

ASK trigger3 TO Release;

ASK monitor TO UstLiZglWKol(ASK monitor TO lizglowkol -1);

ASK monitor TO UstLiZgl(ASK monitor TO liczbazgloszen -1);

ASK (ASK monitor TO system) TO UstLiZgl(ASK

(ASK monitor TO system) TO liczbazgloszen -1);

ASK (ASK monitor TO system) TO UstLiZglWKol(ASK

(ASK monitor TO system) TO lizglowkol -1);

INHERITED RemoveThis(co);

END METHOD;

ASK METHOD Remove():KliObj;

BEGIN

ASK trigger3 TO Release;

ASK monitor TO UstLiZglWKol(ASK monitor TO lizglowkol -1);

ASK (ASK monitor TO system) TO UstLiZglWKol(ASK

(ASK monitor TO system) TO lizglowkol -1);

RETURN INHERITED Remove();

END METHOD;

ASK METHOD Init(IN means3,sigmas3:REAL;IN g3:Gnz3Obj;

IN mon:MonitObj;IN trand:RandomObj;IN ttrigger3:TriggerObj);

BEGIN

Mean:=means3;

Sigma:=sigmas3;

Gnz3:=g3;

monitor:=mon;

rand:=trand;

trigger3:=ttrigger3;

END METHOD;

END OBJECT;

OBJECT Gnz3Obj;

TELL METHOD Obsluga();

VAR

Klient: KliObj;

BEGIN

ASK (ASK monitor TO system) TO UstLiZajKan(ASK

(ASK monitor TO system) TO lizajkan +1);

ASK monitor TO UstLiZajKan(ASK monitor TO lizajkan +1);

WHILE(ASK Kol3 TO numberIn>0)

Klient:=ASK Kol3 TO Remove();

OUTPUT("Klient wchodzi do gniazda SMO 3 po czasie - ",SimTime);

Interrupt(Klient,"StartNiecierpliwosc");

WAIT DURATION ASK rand TO Triangular(min,m,max);

ON INTERRUPT;

END WAIT;

IF (ASK rand TO Sample < p3)

OUTPUT("Klient zawraca i znow wchodzi do SMO 3 po czasie - ",SimTime);

ASK Klient TO Zapetlenie(TRUE);

ASK Kol3 TO Wstaw(Klient);

ELSE

ASK monitor TO UstLiZgl(ASK monitor TO liczbazgloszen -1);

ASK monitor TO ZwiekszLiczbaObsluzonych();

ASK monitor TO UstawCzasPrzebywania(SimTime - ASK Klient TO czaswesmo);

ASK outsystemsmo TO Wstaw(Klient);

OUTPUT("Klient idzie do wyjscia po czasie - ",SimTime);

END IF;

END WHILE;

Aktywne:=Aktywne-1;

ASK monitor TO UstLiZajKan(ASK monitor TO lizajkan -1);

ASK (ASK monitor TO system) TO UstLiZajKan(ASK

(ASK monitor TO system) TO lizajkan -1);

END METHOD;

ASK METHOD Init(IN tmin,tm,tmax:REAL; IN kan:INTEGER;

IN kol3:Kol3Obj;IN mon:MonitObj;IN tp3:REAL;

IN toutsystemsmo:WyjZSysObj;IN trand:RandomObj);

BEGIN

min:=tmin;

m:=tm;

max:=tmax;

Kanaly:=kan;

Kol3:=kol3;

Aktywne:=0;

monitor:=mon;

p3:=tp3;

outsystemsmo:=toutsystemsmo;

rand:=trand;

END METHOD;

ASK METHOD UstawAktywne(IN ak:INTEGER);

BEGIN

Aktywne:=ak;

END METHOD;

END OBJECT;

END MODULE.

Moduł główny

MAIN MODULE Projekt;

FROM MathMod IMPORT FLOOR;

FROM RandMod IMPORT RandomObj,FetchSeed;

FROM IOMod IMPORT StreamObj,ALL FileUseType;

FROM SimMod IMPORT StartSimulation,SimTime,ResetSimTime;

FROM StatMod IMPORT IStatObj,ITimedStatObj,RStatObj,

RTimedStatObj,TSINTEGER,TSREAL,SREAL,SINTEGER;

FROM SmoMod IMPORT kol1,kol2,kol3,

gnz1,gnz2,gnz3,gen1,gen2,

mon0,mon1,mon2,mon3,out0,ran0,trg0;

FROM SmoMod IMPORT Gnz1Obj,Gnz2Obj,Gnz3Obj,Gen1Obj,Gen2Obj,

Kol1Obj,Kol2Obj,Kol3Obj,KliObj,MonitObj,WyjZSysObj;

TYPE

Rekdanych=RECORD;

LExp:INTEGER;

LstartMon:INTEGER;

Gen1Mean,Gen1Lambda:REAL;

Gen1kPaczka,Gen1LKlientow:INTEGER;

Gen2Mean,Gen2Sigma,Gen2Meanil:REAL;

Gen2kil,Gen2LKlientow:INTEGER;

Kol1Lambda:REAL;

Gnz1Mean,Gnz1Sigma:REAL;

Gnz1Kanaly:INTEGER;

Kol2pojem:INTEGER;

Kol2Mean:REAL;

Kol2k:INTEGER;

Gnz2lo,Gnz2hi,Gnz2prawd2:REAL;

Gnz2Kanaly:INTEGER;

Kol3Mean:REAL;

Kol3Sigma:REAL;

Gnz3min,Gnz3max,Gnz3m,Gnz3prawd3:REAL;

Gnz3Kanaly:INTEGER;

END RECORD;

WynikiSMO=ARRAY [0..35] OF SREAL;

PROCEDURE ReadInt(INOUT file:StreamObj;OUT B:INTEGER);

VAR

chr:CHAR;

str:STRING;

BEGIN

ASK file TO ReadChar(chr);

ASK file TO ReadLine(str);

ASK file TO ReadInt(B);

END PROCEDURE;

PROCEDURE ReadReal(INOUT file:StreamObj;OUT A:REAL);

VAR

str:STRING;

chr:CHAR;

BEGIN

ASK file TO ReadChar(chr);

ASK file TO ReadLine(str);

ASK file TO ReadReal(A);

END PROCEDURE;

PROCEDURE ReadFromFile(OUT config:Rekdanych);

VAR

file:StreamObj;

BEGIN

NEW(file);

ASK file TO Open("dane.txt",Input);

config.LstartMon:=1;

ReadInt(file,config.LExp);

ReadReal(file,config.Gen1Mean);

ReadReal(file,config.Gen1Lambda);

ReadInt(file,config.Gen1kPaczka);

ReadInt(file,config.Gen1LKlientow);

ReadReal(file,config.Gen2Mean);

ReadReal(file,config.Gen2Sigma);

ReadReal(file,config.Gen2Meanil);

ReadInt(file,config.Gen2kil);

ReadInt(file,config.Gen2LKlientow);

ReadReal(file,config.Kol1Lambda);

ReadReal(file,config.Gnz1Mean);

ReadReal(file,config.Gnz1Sigma);

ReadInt(file,config.Gnz1Kanaly);

ReadInt(file,config.Kol2pojem);

ReadReal(file,config.Kol2Mean);

ReadInt(file,config.Kol2k);

ReadReal(file,config.Gnz2lo);

ReadReal(file,config.Gnz2hi);

ReadReal(file,config.Gnz2prawd2);

ReadInt(file,config.Gnz2Kanaly);

ReadReal(file,config.Kol3Mean);

ReadReal(file,config.Kol3Sigma);

ReadReal(file,config.Gnz3min);

ReadReal(file,config.Gnz3max);

ReadReal(file,config.Gnz3m);

ReadReal(file,config.Gnz3prawd3);

ReadInt(file,config.Gnz3Kanaly);

DISPOSE(file);

END PROCEDURE;

PROCEDURE Symuluj(INOUT wyniki:WynikiSMO;INOUT config:Rekdanych);

BEGIN

NEW(gen1);

NEW(gen2);

NEW(gnz1);

NEW(gnz2);

NEW(gnz3);

NEW(kol1);

NEW(kol2);

NEW(kol3);

NEW(mon0);

NEW(mon1);

NEW(mon2);

NEW(mon3);

NEW(out0);

NEW(trg0);

ASK mon0 TO Init(config.LstartMon,mon0);

ASK mon1 TO Init(config.LstartMon,mon0);

ASK mon2 TO Init(config.LstartMon,mon0);

ASK mon3 TO Init(config.LstartMon,mon0);

ASK gnz3 TO Init(config.Gnz3min,config.Gnz3m,

config.Gnz3max,config.Gnz3Kanaly,kol3,

mon3,config.Gnz3prawd3,out0,ran0);

ASK kol3 TO Init(config.Kol3Mean,config.Kol3Sigma,

gnz3,mon3,ran0,trg0);

ASK gnz2 TO Init(config.Gnz2lo,config.Gnz2hi,

config.Gnz2Kanaly,kol2,mon2,config.Gnz2prawd2,out0,ran0);

ASK kol2 TO Init(config.Kol2pojem,config.Kol2Mean,

config.Kol2k,gnz2,mon2,trg0,ran0);

ASK gnz1 TO Init(config.Gnz1Mean,config.Gnz1Sigma,

config.Gnz1Kanaly,kol1,mon1,trg0,ran0,kol2);

ASK kol1 TO Init(config.Kol1Lambda,gnz1,mon1,ran0);

ASK gen1 TO Init(config.Gen1Mean,config.Gen1kPaczka,

config.Gen1LKlientow,kol1,mon0,config.Gen1Lambda,ran0);

ASK gen2 TO Init(config.Gen2Mean,config.Gen2Sigma,

config.Gen2Meanil,config.Gen2LKlientow,kol3,

mon0,config.Gen2kil,ran0);

ASK out0 TO Init(mon0);

TELL gen1 TO Generowanie;

TELL gen2 TO Generowanie;

StartSimulation;

wyniki[0]:=GETMONITOR(mon0.czasprzebywania,RStatObj).Mean();

wyniki[1]:=GETMONITOR(mon1.czasprzebywania,RStatObj).Mean();

wyniki[2]:=GETMONITOR(mon2.czasprzebywania,RStatObj).Mean();

wyniki[3]:=GETMONITOR(mon3.czasprzebywania,RStatObj).Mean();

wyniki[4]:=GETMONITOR(mon0.czasprzebywania,RStatObj).StdDev();

wyniki[5]:=GETMONITOR(mon1.czasprzebywania,RStatObj).StdDev();

wyniki[6]:=GETMONITOR(mon2.czasprzebywania,RStatObj).StdDev();

wyniki[7]:=GETMONITOR(mon3.czasprzebywania,RStatObj).StdDev();

wyniki[8]:=GETMONITOR(mon0.liczbazgloszen,ITimedStatObj).Mean();

wyniki[9]:=GETMONITOR(mon1.liczbazgloszen,ITimedStatObj).Mean();

wyniki[10]:=GETMONITOR(mon2.liczbazgloszen,ITimedStatObj).Mean();

wyniki[11]:=GETMONITOR(mon3.liczbazgloszen,ITimedStatObj).Mean();

wyniki[12]:=GETMONITOR(mon0.liczbazgloszen,ITimedStatObj).StdDev();

wyniki[13]:=GETMONITOR(mon1.liczbazgloszen,ITimedStatObj).StdDev();

wyniki[14]:=GETMONITOR(mon2.liczbazgloszen,ITimedStatObj).StdDev();

wyniki[15]:=GETMONITOR(mon3.liczbazgloszen,ITimedStatObj).StdDev();

wyniki[16]:=GETMONITOR(mon0.lizajkan,ITimedStatObj).Mean();

wyniki[17]:=GETMONITOR(mon1.lizajkan,ITimedStatObj).Mean();

wyniki[18]:=GETMONITOR(mon2.lizajkan,ITimedStatObj).Mean();

wyniki[19]:=GETMONITOR(mon3.lizajkan,ITimedStatObj).Mean();

wyniki[20]:=GETMONITOR(mon0.lizajkan,ITimedStatObj).StdDev();

wyniki[21]:=GETMONITOR(mon1.lizajkan,ITimedStatObj).StdDev();

wyniki[22]:=GETMONITOR(mon2.lizajkan,ITimedStatObj).StdDev();

wyniki[23]:=GETMONITOR(mon3.lizajkan,ITimedStatObj).StdDev();

wyniki[24]:=GETMONITOR(mon0.lizglowkol,ITimedStatObj).Mean();

wyniki[25]:=GETMONITOR(mon1.lizglowkol,ITimedStatObj).Mean();

wyniki[26]:=GETMONITOR(mon2.lizglowkol,ITimedStatObj).Mean();

wyniki[27]:=GETMONITOR(mon3.lizglowkol,ITimedStatObj).Mean();

wyniki[28]:=GETMONITOR(mon0.lizglowkol,ITimedStatObj).StdDev();

wyniki[29]:=GETMONITOR(mon1.lizglowkol,ITimedStatObj).StdDev();

wyniki[30]:=GETMONITOR(mon2.lizglowkol,ITimedStatObj).StdDev();

wyniki[31]:=GETMONITOR(mon3.lizglowkol,ITimedStatObj).StdDev();

wyniki[32]:=mon0.prawdobslzgl;

wyniki[33]:=mon1.prawdobslzgl;

wyniki[34]:=mon2.prawdobslzgl;

wyniki[35]:=mon3.prawdobslzgl;

ResetSimTime(0.0);

DISPOSE(gen1);

DISPOSE(gen2);

DISPOSE(gnz1);

DISPOSE(gnz2);

DISPOSE(gnz3);

DISPOSE(kol1);

DISPOSE(kol2);

DISPOSE(kol3);

DISPOSE(mon0);

DISPOSE(mon1);

DISPOSE(mon2);

DISPOSE(mon3);

DISPOSE(out0);

DISPOSE(trg0);

END PROCEDURE;

PROCEDURE WynikiNaEkran(INOUT wyniki:WynikiSMO);

VAR

p:INTEGER;

BEGIN

OUTPUT("");

OUTPUT("");

OUTPUT("Wyniki");

OUTPUT("");

OUTPUT("");

OUTPUT("Sredni czas przebywania zgloszenia w systemie: ",

GETMONITOR(wyniki[0],RStatObj).Mean());

OUTPUT("Odchylenie standardowe czasu przebywania zgloszenia w systemie: ",

GETMONITOR(wyniki[4],RStatObj).Mean());

OUTPUT("Sredni czas przebywania zgloszenia w SMO 1: ",

GETMONITOR(wyniki[1],RStatObj).Mean());

OUTPUT("Odchylenie standardowe czasu przebywania zgloszenia w SMO 1:",

GETMONITOR(wyniki[5],RStatObj).Mean());

OUTPUT("Sredni czas przebywania zgloszenia w SMO 2:",

GETMONITOR(wyniki[2],RStatObj).Mean());

OUTPUT("Odchylenie standardowe czasu przebywania zgloszenia w SMO 2:",

GETMONITOR(wyniki[6],RStatObj).Mean());

OUTPUT("Sredni czas przebywania zgloszenia w SMO 3:",

GETMONITOR(wyniki[3],RStatObj).Mean());

OUTPUT("Odchylenie standardowe czasu przebywania zgloszenia w SMO 3:",

GETMONITOR(wyniki[7],RStatObj).Mean());

OUTPUT("Srednia liczba zgloszen w systemie:",

GETMONITOR(wyniki[8],RStatObj).Mean());

OUTPUT("Odchylenie standardowe liczby zgloszen w systemie: ",

GETMONITOR(wyniki[12],RStatObj).Mean());

OUTPUT("Srednia liczba zgloszen w SMO 1: ",

GETMONITOR(wyniki[9],RStatObj).Mean());

OUTPUT("Odchylenie standardowe liczby zgloszen w SMO 1: ",

GETMONITOR(wyniki[13],RStatObj).Mean());

OUTPUT("Srednia liczba zgloszen w SMO 2: ",

GETMONITOR(wyniki[10],RStatObj).Mean());

OUTPUT("Odchylenie standardowe liczby zgloszen w SMO 2: ",

GETMONITOR(wyniki[14],RStatObj).Mean());

OUTPUT("Srednia liczba zgloszen w SMO 3: ",

GETMONITOR(wyniki[11],RStatObj).Mean());

OUTPUT("Odychlenie standardowe liczby zgloszen w SMO 3: ",

GETMONITOR(wyniki[15],RStatObj).Mean());

OUTPUT("");

OUTPUT("");

OUTPUT("");

OUTPUT("Srednia liczba zajetych kanalow w Systemie:",

GETMONITOR(wyniki[16],RStatObj).Mean());

OUTPUT("Odchylenie standardowe liczby zajetych kanalow w systemie: ",

GETMONITOR(wyniki[20],RStatObj).Mean());

OUTPUT("Srednia liczba zajetych kanalow w SMO1: ",

GETMONITOR(wyniki[17],RStatObj).Mean());

OUTPUT("Odchylenie standardowe liczby zajetych kanalow w SMO 1: ",

GETMONITOR(wyniki[21],RStatObj).Mean());

OUTPUT("Srednia liczba zajetych kanalow w SMO2: ",

GETMONITOR(wyniki[18],RStatObj).Mean());

OUTPUT("Odchylenie standardowe liczby zajetych kanalow w SMO 2: ",

GETMONITOR(wyniki[22],RStatObj).Mean());

OUTPUT("Srednia liczba zajetych kanalow w SMO3: ",

GETMONITOR(wyniki[19],RStatObj).Mean());

OUTPUT("Odchylenie standardowe liczby zajetych kanalow w SMO 3: ",

GETMONITOR(wyniki[23],RStatObj).Mean());

OUTPUT("");

OUTPUT("");

OUTPUT("");

OUTPUT("Srednia liczba zgloszen w kolejce w systemie: ",

GETMONITOR(wyniki[24],RStatObj).Mean());

OUTPUT("Odchylenie standardowe liczby zgloszen w kolejce w systemie:",

GETMONITOR(wyniki[28],RStatObj).Mean());

OUTPUT("Srednia liczba zgloszen w kolejce w SMO 1: ",

GETMONITOR(wyniki[25],RStatObj).Mean());

OUTPUT("Odchylenie standardowe liczby zgloszen w kolejce w SMO1:",

GETMONITOR(wyniki[29],RStatObj).Mean());

OUTPUT("Srednia liczba zgloszen w kolejce w SMO 2: ",

GETMONITOR(wyniki[26],RStatObj).Mean());

OUTPUT("Odchylenie standardowe liczby zgloszen w kolejce w SMO 2: ",

GETMONITOR(wyniki[30],RStatObj).Mean());

OUTPUT("Srednia liczba zgloszen w kolejce w SMO 3: ",

GETMONITOR(wyniki[27],RStatObj).Mean());

OUTPUT("Odchylenie standardowe liczby zgloszen w kolejce w SMO 3: ",

GETMONITOR(wyniki[31],RStatObj).Mean());

OUTPUT("");

OUTPUT("");

OUTPUT("");

OUTPUT("Prawdopodobienstwo obsluzenia zgloszenia w systemie: ",

GETMONITOR(wyniki[32],RStatObj).Mean());

OUTPUT("Prawdopodobienstwo obsluzenia zgloszenia w SMO 1: ",

GETMONITOR(wyniki[33],RStatObj).Mean());

OUTPUT("Prawdopodobienstwo obsluzenia zgloszenia w SMO 2: ",

GETMONITOR(wyniki[34],RStatObj).Mean());

OUTPUT("Prawdopodobienstwo obsluzenia zgloszenia w SMO 3: ",

GETMONITOR(wyniki[35],RStatObj).Mean());

INPUT(p);

END PROCEDURE;

PROCEDURE zapis(INOUT wyniki:WynikiSMO);

VAR

file:StreamObj;

BEGIN

NEW(file);

ASK file TO Open("Wyniki.txt",Output);

OUTPUT("Wyniki");

OUTPUT("");

OUTPUT("");

ASK file TO WriteString("Sredni czas przebywania zgloszenia w systemie: ");

ASK file TO WriteReal(GETMONITOR(wyniki[0],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Odchylenie standardowe czasu przebywania zgloszenia w systemie: ");

ASK file TO WriteReal(GETMONITOR(wyniki[4],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Sredni czas przebywania zgloszenia w SMO 1: ");

ASK file TO WriteReal(GETMONITOR(wyniki[1],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Odchylenie standardowe czasu przebywania zgloszenia w SMO 1:");

ASK file TO WriteReal(GETMONITOR(wyniki[5],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Sredni czas przebywania zgloszenia w SMO 2:");

ASK file TO WriteReal(GETMONITOR(wyniki[2],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Odchylenie standardowe czasu przebywania zgloszenia w SMO 2:");

ASK file TO WriteReal(GETMONITOR(wyniki[6],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Sredni czas przebywania zgloszenia w SMO 3:");

ASK file TO WriteReal(GETMONITOR(wyniki[3],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Odchylenie standardowe czasu przebywania zgloszenia w SMO 3:");

ASK file TO WriteReal(GETMONITOR(wyniki[7],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Srednia liczba zgloszen w systemie:");

ASK file TO WriteReal(GETMONITOR(wyniki[8],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Odchylenie standardowe liczby zgloszen w systemie: ");

ASK file TO WriteReal(GETMONITOR(wyniki[12],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Srednia liczba zgloszen w SMO 1: ");

ASK file TO WriteReal(GETMONITOR(wyniki[9],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Odchylenie standardowe liczby zgloszen w SMO 1: ");

ASK file TO WriteReal(GETMONITOR(wyniki[13],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Srednia liczba zgloszen w SMO 2: ");

ASK file TO WriteReal(GETMONITOR(wyniki[10],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Odchylenie standardowe liczby zgloszen w SMO 2: ");

ASK file TO WriteReal(GETMONITOR(wyniki[14],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Srednia liczba zgloszen w SMO 3: ");

ASK file TO WriteReal(GETMONITOR(wyniki[11],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Odychlenie standardowe liczby zgloszen w SMO 3: ");

ASK file TO WriteReal(GETMONITOR(wyniki[15],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteLn;

ASK file TO WriteLn;

ASK file TO WriteLn;

ASK file TO WriteString("Srednia liczba zajetych kanalow w Systemie:");

ASK file TO WriteReal(GETMONITOR(wyniki[16],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Odchylenie standardowe liczby zajetych kanalow w systemie: ");

ASK file TO WriteReal(GETMONITOR(wyniki[20],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Srednia liczba zajetych kanalow w SMO1: ");

ASK file TO WriteReal(GETMONITOR(wyniki[17],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Odchylenie standardowe liczby zajetych kanalow w SMO 1: ");

ASK file TO WriteReal(GETMONITOR(wyniki[21],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Srednia liczba zajetych kanalow w SMO2: ");

ASK file TO WriteReal(GETMONITOR(wyniki[18],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Odchylenie standardowe liczby zajetych kanalow w SMO 2: ");

ASK file TO WriteReal(GETMONITOR(wyniki[22],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Srednia liczba zajetych kanalow w SMO3: ");

ASK file TO WriteReal(GETMONITOR(wyniki[19],RStatObj).Mean(),10,4);

ASK file TO WriteString("Odchylenie standardowe liczby zajetych kanalow w SMO 3: ");

ASK file TO WriteReal(GETMONITOR(wyniki[23],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteLn;

ASK file TO WriteLn;

ASK file TO WriteString("Srednia liczba zgloszen w kolejce w systemie: ");

ASK file TO WriteReal(GETMONITOR(wyniki[24],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Odchylenie standardowe liczby zgloszen w kolejce w systemie:");

ASK file TO WriteReal(GETMONITOR(wyniki[28],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Srednia liczba zgloszen w kolejce w SMO 1: ");

ASK file TO WriteReal(GETMONITOR(wyniki[25],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Odchylenie standardowe liczby zgloszen w kolejce w SMO1:");

ASK file TO WriteReal(GETMONITOR(wyniki[29],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Srednia liczba zgloszen w kolejce w SMO 2: ");

ASK file TO WriteReal(GETMONITOR(wyniki[26],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Odchylenie standardowe liczby zgloszen w kolejce w SMO 2: ");

ASK file TO WriteReal(GETMONITOR(wyniki[30],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Srednia liczba zgloszen w kolejce w SMO 3: ");

ASK file TO WriteReal(GETMONITOR(wyniki[27],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Odchylenie standardowe liczby zgloszen w kolejce w SMO 3: ");

ASK file TO WriteReal(GETMONITOR(wyniki[31],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteLn;

ASK file TO WriteLn;

ASK file TO WriteString("Prawdopodobienstwo obsluzenia zgloszenia w systemie: ");

ASK file TO WriteReal(GETMONITOR(wyniki[32],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Prawdopodobienstwo obsluzenia zgloszenia w SMO 1: ");

ASK file TO WriteReal(GETMONITOR(wyniki[33],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Prawdopodobienstwo obsluzenia zgloszenia w SMO 2: ");

ASK file TO WriteReal(GETMONITOR(wyniki[34],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO WriteString("Prawdopodobienstwo obsluzenia zgloszenia w SMO 3: ");

ASK file TO WriteReal(GETMONITOR(wyniki[35],RStatObj).Mean(),10,4);

ASK file TO WriteLn;

ASK file TO Close;

DISPOSE(file);

END PROCEDURE;

VAR

config:Rekdanych;

wyniki:WynikiSMO;

i:INTEGER;

l:INTEGER;

j:INTEGER;

z:INTEGER;

BEGIN

NEW(ran0);

NEW(config);

NEW(wyniki,0..35);

ReadFromFile(config);

FOR i:=0 TO 35 wyniki[i]:=0.0;

END FOR;

z:=1;

FOR i:=1 TO config.LExp

ASK ran0 TO SetSeed(FetchSeed(z));

Symuluj(wyniki,config);

END FOR;

zapis(wyniki);

WynikiNaEkran(wyniki);

DISPOSE(ran0);

DISPOSE(wyniki);

DISPOSE(config);

END MODULE.



Wyszukiwarka