PSy - Sprawozdanie, WAT, SEMESTR V, podstawy symulacji, 17 moj


WOJSKOWA AKADEMIA TECHNICZNA

0x01 graphic

Podstawy Symulacji

Sprawozdanie

Autor: Jarosław Sochocki

Grupa: I8B1S1

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

Data: 25-01-2011

I. 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. Dane wejściowe i wyniki odczytywane/zapisywane z/do pliku. Program powinien działać w trybie z i bez komunikatów ekranowych.

II. Dane dla numeru z dziennika równego 18

Generator 1:

Generuje paczki (klientów), po czym wysyła je do SMO 1.

T1 - Czas pomiędzy emisjami ma rozkład Erlanga.

R1 - Ilość zgłoszeń napływających do systemu ma rozkład wykładniczy.

Generator 2:

Generuje paczki (klientów), po czym wysyła je do SMO 3.

T2 - Czas pomiędzy emisjami ma rozkład normalny.

R1 - Ilość zgłoszeń napływających do systemu ma rozkład Erlanga.

SMO 1:

AL1 - Nieograniczona kolejka FIFO.

N1 - Klienci się niecierpliwią zgodnie z rozkładem wykładniczym.

L1 - 2 kanałowe gniazdo.

O1 - Czas obsługi ma rozkład jednostajny.

SMO 2:

AL2 - Ograniczona kolejka LIFO.

N2 - Klienci się niecierpliwią zgodnie z rozkładem Erlanga.

L2 - Gniazdo jest 1 kanałowe.

O2 - Czas obsługi określony rozkładem jednostajnym.

SMO 3:

AL3 - Nieograniczona, priorytetowa kolejka.

N3 - klienci niecierpliwią się w czasie zgodnym z rozkładem normalnym.

L3 - 2 kanałowe gniazdo.

O3 - Czas obsługi określa rozkład trójkątny.

III. Rozkłady

Gęstość prawdopodobieństwa:

0x01 graphic

gdzie:

μ - wartość oczekiwana

σ - odchylenie standardowe

Gęstość prawdopodobieństwa:

0x01 graphic

Dystrybuanta:

0x01 graphic

gdzie:

λ - wartość oczekiwana

Gęstość prawdopodobieństwa:

0x01 graphic

gdzie:

k > 0

λ >0

Gęstość prawdopodobieństwa:

0x01 graphic

gdzie:

a - min

b - mean

c - max

Gęstość prawdopodobieństwa:

0x01 graphic

IV. Kod programu

DEFINITION MODULE Smo;

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

Kolejka1Obj=OBJECT;FORWARD;

Gniazdo1Obj=OBJECT;FORWARD;

Koleka2Obj=OBJECT;FORWARD;

Gniazdo2Obj=OBJECT;FORWARD;

Kolejka3Obj=OBJECT;FORWARD;

Gniazdo3Obj=OBJECT;FORWARD;

KlientObj=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;

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;

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 Kolejka1:Kolejka1Obj;

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

Mean:REAL;

k:INTEGER;

Kolejka1:Kolejka1Obj;

LiczbaKlientow:INTEGER;

monitor:MonitObj;

Lambda:REAL;

rand:RandomObj;

TELL METHOD Generowanie();

END OBJECT;

Gen2Obj=OBJECT;

Mean, Sigma:REAL;

Mmean:REAL;

Kolejka3:Kolejka3Obj;

LiczbaKlientow:INTEGER;

monitor:MonitObj;

k:INTEGER;

rand:RandomObj;

TELL METHOD Generowanie();

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

IN lk:INTEGER; IN Kolejka3:Kolejka3Obj;IN mon:MonitObj;

IN trmax:INTEGER;IN trand:RandomObj);

END OBJECT;

Kolejka1Obj=OBJECT(QueueObj);

Lambda:REAL;

Gniazdo1:Gniazdo1Obj;

monitor:MonitObj;

rand:RandomObj;

ASK METHOD Wstaw(INOUT elem:KliObj);

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

OVERRIDE;

ASK METHOD Remove():ANYOBJ;

ASK METHOD RemoveThis(IN co:ANYOBJ);

ASK METHOD ObjTerminate;

END OBJECT;

Gniazdo1Obj=OBJECT;

Mean:REAL;

Sigma:REAL;

Kanaly:INTEGER;

Aktywne:INTEGER;

Kolejka1:Kolejka1Obj;;

Kolejka2:Kolejka2Obj;

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 Kolejka1:Kolejka1Obj;

IN mon:MonitObj;IN ttrigger2:TriggerObj;

IN trand:RandomObj;IN tKolejka2:Kolejka2Obj);

END OBJECT;

Kolejka2Obj=OBJECT(StackObj);

Pojemnosc:INTEGER;

Mean:REAL;

k:INTEGER;

Gniazdo2:Gniazdo2Obj;

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:Gniazdo2Obj;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;

Gniazdo2Obj=OBJECT;

lo:REAL;

hi:REAL;

Kanaly:INTEGER;

Aktywne:INTEGER;

Kolejka2:Kolejka2Obj;

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 Kolejka2:Kolejka2Obj;IN mon:MonitObj;IN tp2:REAL;

IN toutsystemsmo:WyjZSysObj;IN trand:RandomObj);

END OBJECT;

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

Lambda:REAL;

Mean:REAL;

Sigma:REAL;

trigger3:TriggerObj;

Gniazdo3:Gniazdo3Obj;

monitor:MonitObj;

rand:RandomObj;

ASK METHOD Wstaw(INOUT elem:KliObj);

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

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;

Gniazdo3Obj=OBJECT;

min,m,max:REAL;

Kanaly:INTEGER;

Aktywne:INTEGER;

Kolejka3:Kolejka3Obj;

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 Kolejka3:Kolejka3Obj;IN mon:MonitObj;IN tp3:REAL;

IN toutsystemsmo:WyjZSysObj;IN trand:RandomObj);

END OBJECT;

PROCEDURE IfResetMonitors(IN lr:INTEGER);

VAR

naekran: INTEGER;

gen1:Gen1Obj;

gen2:Gen2Obj;

Gniazdo1:Gniazdo1Obj;

Gniazdo2:Gniazdo2Obj;

Gniazdo3:Gniazdo3Obj;

Kolejka1:Kolejka1Obj;

Kolejka2:Kolejka2Obj;

Kolejka3:Kolejka3Obj;

mon0:MonitObj;

mon1:MonitObj;

mon2:MonitObj;

mon3:MonitObj;

out0:WyjZSysObj;

ran0:RandomObj;

trg0:TriggerObj;

trg1:TriggerObj;

END MODULE.

IMPLEMENTATION MODULE Smo;

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);

IF (naekran == 1)

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

END IF;

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);

IF (naekran == 1)

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

END IF;

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

ASK monitor TO ZwiekszLiczbaOgolem();

ASK Kolejka1 TO Wstaw(Klient);

END FOR;

END FOR;

END METHOD;

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

BEGIN

Mean:=Mean1;

k:=k1;

Kolejka1:=Kolejka1;

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);

IF (naekran == 1)

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

END IF;

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

ASK monitor TO ZwiekszLiczbaOgolem();

ASK Kolejka3 TO Wstaw(Klient);

END FOR;

END FOR;

END METHOD;

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

BEGIN

Mean:=Mean2;

Sigma:=Sigma2;

Kolejka3:=Kolejka3;

LiczbaKlientow:=lk;

monitor:=mon;

k:=trmax;

Mmean:=Mean3;

rand:=trand;

END METHOD;

END OBJECT;

OBJECT Kolejka1Obj;

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 Gniazdo1 TO Aktywne < ASK Gniazdo1 TO Kanaly)

TELL Gniazdo1 TO Obsluga();

ASK Gniazdo1 TO UstawAktywne(ASK Gniazdo1 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:Gniazdo1Obj;IN mon:MonitObj;IN trand:RandomObj);

BEGIN

Lambda:=tLambda;

Gniazdo1:=g1;

monitor:=mon;

rand:=trand;

END METHOD;

END OBJECT;

OBJECT Gniazdo1Obj;

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 Kolejka1 TO numberIn>0)

Klient:=ASK Kolejka1 TO Remove();

IF (naekran == 1)

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

END IF;

Interrupt(Klient,"StartNiecierpliwosc");

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

ON INTERRUPT;

END WAIT;

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

IF(naekran == 1)

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

END IF;

WAIT FOR trigger2 TO Fire();

ON INTERRUPT;

END WAIT;

END WHILE;

IF (naekran == 1)

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

END IF;

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

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

ASK monitor TO ZwiekszLiczbaObsluzonych();

ASK Kolejka2 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 Kolejka1:Kolejka1Obj;IN mon:MonitObj;IN ttrigger2:TriggerObj;IN trand:RandomObj;IN tKolejka2:Kolejka2Obj);

BEGIN

Sigma:=sigmas1;

Mean:=means1;

Kanaly:=k;

Kolejka1:=Kolejka1;

Aktywne:=0;

monitor:=mon;

trigger2:=ttrigger2;

rand:=trand;

Kolejka2:=tKolejka2;

END METHOD;

ASK METHOD UstawAktywne(IN ak:INTEGER);

BEGIN

Aktywne:=ak;

END METHOD;

END OBJECT;

OBJECT Kolejka2Obj;

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 Gniazdo2 TO Aktywne < ASK Gniazdo2 TO Kanaly)

TELL Gniazdo2 TO Obsluga();

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

END IF;

ELSE

DISPOSE(elem);

IF (naekran == 1)

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

END IF;

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:Gniazdo2Obj;IN mon:MonitObj;IN ttrigger2:TriggerObj;IN trand:RandomObj);

BEGIN

Pojemnosc:=p;

Mean:=means2k;

k:=k2k;

Gniazdo2:=g2;

monitor:=mon;

trigger2:=ttrigger2;

rand:=trand;

END METHOD;

END OBJECT;

OBJECT Gniazdo2Obj;

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 Kolejka2 TO numberIn>0)

Klient:=ASK Kolejka2 TO Remove();

IF (naekran == 1)

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

END IF;

Interrupt(Klient,"StartNiecierpliwosc");

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

ON INTERRUPT;

END WAIT;

IF (ASK rand TO Sample < p2)

IF (naekran == 1)

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

END IF;

ASK Klient TO Zapetlenie(TRUE);

ASK Kolejka2 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);

IF (naekran == 1)

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

END IF;

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 Kolejka2:Kolejka2Obj;IN mon:MonitObj;IN tp2:REAL;

IN toutsystemsmo:WyjZSysObj;IN trand:RandomObj);

BEGIN

lo:=tlo;

hi:=thi;

Kanaly:=kan;

Kolejka2:=Kolejka2;

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 Kolejka3Obj;

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 Gniazdo3 TO Aktywne < ASK Gniazdo3 TO Kanaly)

TELL Gniazdo3 TO Obsluga();

ASK Gniazdo3 TO UstawAktywne(ASK Gniazdo3 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:Gniazdo3Obj;

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

BEGIN

Mean:=means3;

Sigma:=sigmas3;

Gniazdo3:=g3;

monitor:=mon;

rand:=trand;

trigger3:=ttrigger3;

END METHOD;

END OBJECT;

OBJECT Gniazdo3Obj;

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 Kolejka3 TO numberIn>0)

Klient:=ASK Kolejka3 TO Remove();

IF (naekran == 1)

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

END IF;

Interrupt(Klient,"StartNiecierpliwosc");

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

ON INTERRUPT;

END WAIT;

IF (ASK rand TO Sample < p3)

IF (naekran == 1)

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

END IF;

ASK Klient TO Zapetlenie(TRUE);

ASK Kolejka3 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);

IF (naekran == 1)

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

END IF;

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 Kolejka3:Kolejka3Obj;IN mon:MonitObj;IN tp3:REAL;

IN toutsystemsmo:WyjZSysObj;IN trand:RandomObj);

BEGIN

min:=tmin;

m:=tm;

max:=tmax;

Kanaly:=kan;

Kolejka3:=Kolejka3;

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.

MAIN MODULE make;

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 Kolejka1,Kolejka2,Kolejka3,

Gniazdo1,Gniazdo2,Gniazdo3,gen1,gen2,

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

FROM SmoMod IMPORT Gniazdo1Obj,Gniazdo2Obj,Gniazdo3Obj,Gen1Obj,Gen2Obj,

Kolejka1Obj,Kolejka2Obj,Kolejka3Obj,KliObj,MonitObj,WyjZSysObj;

TYPE

Rekdanych=RECORD;

LExp:INTEGER;

LstartMon:INTEGER;

Gen1Mean,Gen1Lambda:REAL;

Gen1kPaczka,Gen1LKlientow:INTEGER;

Gen2Mean,Gen2Sigma,Gen2Meanil:REAL;

Gen2kil,Gen2LKlientow:INTEGER;

Kolejka1Lambda:REAL;

Gniazdo1Mean,Gniazdo1Sigma:REAL;

Gniazdo1Kanaly:INTEGER;

Kolejka2pojem:INTEGER;

Kolejka2Mean:REAL;

Kolejka2k:INTEGER;

Gniazdo2lo,Gniazdo2hi,Gniazdo2prawd2:REAL;

Gniazdo2Kanaly:INTEGER;

Kolejka3Mean:REAL;

Kolejka3Sigma:REAL;

Gniazdo3min,Gniazdo3max,Gniazdo3m,Gniazdo3prawd3:REAL;

Gniazdo3Kanaly:INTEGER;

Wypis: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.Kolejka1Lambda);

ReadReal(file,config.Gniazdo1Mean);

ReadReal(file,config.Gniazdo1Sigma);

ReadInt(file,config.Gniazdo1Kanaly);

ReadInt(file,config.Kolejka2pojem);

ReadReal(file,config.Kolejka2Mean);

ReadInt(file,config.Kolejka2k);

ReadReal(file,config.Gniazdo2lo);

ReadReal(file,config.Gniazdo2hi);

ReadReal(file,config.Gniazdo2prawd2);

ReadInt(file,config.Gniazdo2Kanaly);

ReadReal(file,config.Kolejka3Mean);

ReadReal(file,config.Kolejka3Sigma);

ReadReal(file,config.Gniazdo3min);

ReadReal(file,config.Gniazdo3max);

ReadReal(file,config.Gniazdo3m);

ReadReal(file,config.Gniazdo3prawd3);

ReadInt(file,config.Gniazdo3Kanaly);

ReadInt(file,config.Wypis);

DISPOSE(file);

END PROCEDURE;

PROCEDURE SaveFile(IN wyniki:WynikiSMO);

VAR

file: StreamObj;

BEGIN

New(file);

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

ASK file TO WriteString("**********************");

ASK file TO WriteString("********WYNIKI********");

ASK file TO WriteString("**********************");

ASK file TO WriteLn;

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

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

ASK file TO WriteLn;

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

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

ASK file TO WriteLn;

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

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

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(),12,2);

ASK file TO WriteLn;

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

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

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(),12,2);

ASK file TO WriteLn;

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

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

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(),12,2);

ASK file TO WriteLn;

ASK file TO WriteString("**********************");

ASK file TO WriteLn;

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

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

ASK file TO WriteLn;

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

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

ASK file TO WriteLn;

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

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

ASK file TO WriteLn;

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

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

ASK file TO WriteLn;

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

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

ASK file TO WriteLn;

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

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

ASK file TO WriteLn;

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

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

ASK file TO WriteLn;

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

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

ASK file TO WriteLn;

ASK file TO WriteString("**********************");

ASK file TO WriteLn;

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

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

ASK file TO WriteLn;

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

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

ASK file TO WriteLn;

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

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

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());

ASK file TO WriteLn;

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

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

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());

ASK file TO WriteLn;

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

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

ASK file TO WriteLn;

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

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

ASK file TO WriteLn;

ASK file TO WriteString("**********************");

ASK file TO WriteLn;

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

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

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());

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());

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());

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());

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());

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());

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());

ASK file TO WriteLn;

ASK file TO WriteString("**********************");

ASK file TO WriteLn;

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

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

ASK file TO WriteLn;

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

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

ASK file TO WriteLn;

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

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

ASK file TO WriteLn;

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

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

ASK file TO Close;

DISPOSE(file);

END PROCEDURE;

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

BEGIN

NEW(gen1);

NEW(gen2);

NEW(Gniazdo1);

NEW(Gniazdo2);

NEW(Gniazdo3);

NEW(Kolejka1);

NEW(Kolejka2);

NEW(Kolejka3);

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 Gniazdo3 TO Init(config.Gniazdo3min,config.Gniazdo3m,

config.Gniazdo3max,config.Gniazdo3Kanaly,Kolejka3,

mon3,config.Gniazdo3prawd3,out0,ran0);

ASK Kolejka3 TO Init(config.Kolejka3Mean,config.Kolejka3Sigma,

Gniazdo3,mon3,ran0,trg0);

ASK Gniazdo2 TO Init(config.Gniazdo2lo,config.Gniazdo2hi,

config.Gniazdo2Kanaly,Kolejka2,mon2,config.Gniazdo2prawd2,out0,ran0);

ASK Kolejka2 TO Init(config.Kolejka2pojem,config.Kolejka2Mean,

config.Kolejka2k,Gniazdo2,mon2,trg0,ran0);

ASK Gniazdo1 TO Init(config.Gniazdo1Mean,config.Gniazdo1Sigma,

config.Gniazdo1Kanaly,Kolejka1,mon1,trg0,ran0,Kolejka2);

ASK Kolejka1 TO Init(config.Kolejka1Lambda,Gniazdo1,mon1,ran0);

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

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

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

config.Gen2Meanil,config.Gen2LKlientow,Kolejka3,

mon0,config.Gen2kil,ran0);

ASK out0 TO Init(mon0);

naekran := config.Wypisz;

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(Gniazdo1);

DISPOSE(Gniazdo2);

DISPOSE(Gniazdo3);

DISPOSE(Kolejka1);

DISPOSE(Kolejka2);

DISPOSE(Kolejka3);

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("");

OUTPUT("**********************");

OUTPUT("");

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;

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;

IF (naekran) WynikiNaEkran(wyniki);

ELSE SaveFile(wyniki);

END IF;

DISPOSE(ran0);

DISPOSE(wyniki);

DISPOSE(config);

END MODULE.



Wyszukiwarka