I8G1S1 Zarodkiewicz PSy Sprawozdanie, WAT, V SEM, PSY, 1


Wojskowa Akademia Techniczna

im. Jarosława Dąbrowskiego

0x01 graphic

Laboratorium

Podstawy symulacji

Prowadzący:

dr inż. Jarosław Rulka

Sprawozdanie projekt zaliczeniowy

Wykonał:

Dawid Zarodkiewicz

I8G1S1

Zadanie

Napisać program symulujący działanie sieci SMO jak na rysunku:

0x01 graphic

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

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

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

c) Li: (nrDz + i) mod 2 + 1;

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

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

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

g) Blokowanie zgłoszeń 1. SMO;

h) 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.1. Wykładniczy

1.2. Erlanga

1.3. Normalny

1.4. Jednostajny

1.5. Trójkątny

1.6. Weibulla

2. Długości kolejek pojedynczych SMO

2.1. ograniczone (możliwe straty)

2.2. nieograniczone

3. Algorytm kolejek:

3.1. FIFO

3.2. LIFO

3.3. Z priorytetami

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

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

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

Dane przyjęte dla zadania:

Dla nrDz (numeru z dziennika) = 18.

Rozkłady zmiennych losowych oznaczających czas pomiędzy kolejnymi napływami zgłoszeń do systemu:

T1= rozkład Erlanga

Paczka R1 = 1

Rozkłady zmiennych losowych oznaczających czas obsługi pojedynczego zgłoszenia w gnieździe:

O1 - rozkład Normalny

O2 - rozkład Jednostajny

O3 - rozkład Trójkątny

Długości kolejek pojedynczych SMO:

L1 - nieograniczona

L2 - ograniczona

L3 - nieograniczona

Algorytmy kolejek:

AL1 - FIFO

AL2 - LIFO

AL3 - Z priorytetami

Zmienne losowe oznaczające czas niecierpliwości zgłoszenia:

N1 - rozkład Wykładniczy

N2 - rozkład Erlanga

N3 - rozkład Normalny

Liczba stanowisk obsługi:

M1 - 2

M2 - 3

M3 - 4

Rozkłady prawdopodobieństw:

Rozkład normalny:

Gęstość prawdopodobieństwa:

0x01 graphic

dwuparametrowy o parametrach:

μ - wartość oczekiwana

σ - odchylenie standardowe

Rozkład jednostajny:

0x08 graphic

Rozkład wykładniczy:

Gęstość prawdopodobieństwa:

0x01 graphic

Dystrybuanta:

0x01 graphic

λ - wartość oczekiwana

Rozkład Erlanga:

Gęstość:

0x01 graphic

o parametrach:

k > 0

λ >0

Rozkład Trójkątny:

Gęstość:

0x01 graphic

a - min

b -środek

c - max

Sposób rozwiązania zadania:

Wygenerowani klienci przekazywani są do pierwszej kolejki FIFO po jednym kliencie. Priorytet i prawdopodobieństwo przejść między elementami systemu zostaje przypisany

każdemu klientowi. Do pierwszego gniazda obsługi o rozkładzie Normalnym i ilości stanowisk obsługi równej 2 klient przechodzi z pierwszej kolejki. Klient wychodzi z pierwszego gniazda obsługi z nadanym prawdopodobieństwem do gniazda drugiego o rozkładzie Jednostajnym i ilości stanowisk obsługi równej 3 lub do trzeciego o rozkładzie Trójkątnym i ilości stanowisk obsługi równej 4. Po wyjściu z gniazd może opuścić system, bądź do niego powrócić. Jeśli klient powróci, zostanie tym samym zmniejszone prawdopodobieństwo , że przy następnym wyborze zostanie w systemie. System został zaprojektowany tak, żeby wybór liczby klientów dla symulacji był określany przez użytkownika.

Sposób wyznaczania charakterystyk:

Charakterystyki graniczne systemu wyznaczane są przy wykorzystaniu zmiennych monitorowanych odpowiedniego typu.

Czas przebywania zgłoszenia:

Zmienna typu SREAL monitoruje czasy wejścia i wyjścia poszczególnych klientów z kolejki. Skutkuje to możliwością wyliczenia średniego czasu przebywania zgłoszenia w SMO po zakończeniu symulacji.

Liczba zgłoszeń:

Liczbę klientów przebywających w danej chwili w systemie oznacza zmienna typu TSINTEGER. Liczba zgłoszeń jest zmieniana przy wychodzeniu klienta w trzech przypadkach: gdy nie jest obsługiwany, zniecierpliwiony odchodzi , lub nie może wejść.

Liczba zgłoszeń w kolejce:

Zmienna typu TSINTEGER obliczana dla poszczególnych SMO za pomocą odpowiednich metod obiektów StatQueueObj, StatStackObj lub StatRankedObj.

Prawdopodobieństwo obsłużenia zgłoszenia:

Jest wyznaczane jako stosunek liczby obsłużonych klientów wchodzących do SMO do liczby wszystkich klientów z niego wychodzących.

Liczba zajętych kanałów:

Przyrost zmiennej typu TSINTEGER następuje w chwili gdy dany kanał rozpoczyna obsługę klienta, a jej redukcja, gdy obsługa się kończy.

Przykład działania programu:

-------------------------------

Parametry symulacji

-------------------------------

Liczba klientow:

47

Dlugosc kolejki:

4

Parametr 'k' dla generatora o rozkladzie Erlanga:

1

Parametr 'lambda' dla generatora o rozkladzie Erlanga:

3

Parametr nr 1 dla SMO o rozkladzie Normalnym:

2

Parametr nr 2 dla SMO o rozkladzie Normalnym:

4

Parametr nr 1 dla SMO o rozkladzie Jednostajnym:

6

Parametr nr 2 dla SMO o rozkladzie Jednostajnym:

7

Parametr nr 1 dla SMO o rozkladzie Trojkatnym(minimum):

3

Parametr nr 2 dla SMO o rozkladzie Trojkatnym:

5

Parametr nr 3 dla SMO o rozkladzie Trojkatnym(maximum):

7

-------------------------------------------------------------------

P O C Z A T E K S Y M U L A C J I

-------------------------------------------------------------------

Klient w kolejce FIFO

Klient w SMO1

Klient w kolejce FIFO

Klient obsluzony w 1 gniezdzie

Klient w kolejce LIFO

Klient w SMO2

Klient w kolejce FIFO

Klient w SMO1

Klient w kolejce FIFO

Klient obsluzony w 1 gniezdzie

Klient w kolejce LIFO

Klient w kolejce FIFO

Klient w SMO1

Klient obsluzony w 1 gniezdzie

Klient w kolejce LIFO

Klient w kolejce FIFO

Klient w SMO1

Klient w kolejce FIFO

Klient obsluzony w 2 gniezdzie

!KLIENT POZA SYSTEMEM!

Klient w SMO2

Klient w kolejce FIFO

Klient w kolejce FIFO

Klient w kolejce FIFO

Klient w SMO2

Klient w kolejce FIFO

Klient w SMO1

Klient w kolejce FIFO

Klient obsluzony w 1 gniezdzie

Klient w kolejce PRIORYTETOWEJ

Klient w SMO3

Klient w kolejce FIFO

Klient w SMO1

Klient w kolejce FIFO

Klient w kolejce FIFO

Klient obsluzony w 1 gniezdzie

Klient w kolejce LIFO

Klient obsluzony w 3 gniezdzie

!KLIENT POZA SYSTEMEM!

Klient w kolejce FIFO

Klient w SMO1

Klient obsluzony w 2 gniezdzie

!KLIENT POZA SYSTEMEM!

Klient w SMO2

Klient obsluzony w 1 gniezdzie

Klient w kolejce PRIORYTETOWEJ

Klient w SMO3

Klient w kolejce FIFO

Klient w SMO1

Klient w kolejce FIFO

Klient w kolejce FIFO

Klient obsluzony w 1 gniezdzie

Klient w kolejce LIFO

Klient w kolejce FIFO

Klient w SMO1

Klient w kolejce FIFO

Klient obsluzony w 3 gniezdzie

Klient w kolejce FIFO

Klient w kolejce FIFO

Klient obsluzony w 2 gniezdzie

!KLIENT POZA SYSTEMEM!

Klient w SMO2

Klient obsluzony w 1 gniezdzie

Klient w kolejce PRIORYTETOWEJ

Klient w SMO3

Klient obsluzony w 2 gniezdzie

!KLIENT POZA SYSTEMEM!

Klient obsluzony w 3 gniezdzie

!KLIENT POZA SYSTEMEM!

Klient obsluzony w 1 gniezdzie

Klient w kolejce LIFO

Klient w kolejce FIFO

Klient w SMO1

Klient obsluzony w 2 gniezdzie

!KLIENT POZA SYSTEMEM!

Klient w SMO2

Klient w kolejce FIFO

Klient obsluzony w 1 gniezdzie

Klient w kolejce LIFO

Klient w kolejce FIFO

Klient w SMO1

Klient w kolejce FIFO

Klient w kolejce FIFO

Klient w kolejce FIFO

Klient obsluzony w 2 gniezdzie

Klient w kolejce LIFO

Klient w SMO2

Klient w kolejce FIFO

Klient w kolejce FIFO

Klient w kolejce FIFO

Klient w kolejce FIFO

Klient w kolejce FIFO

Klient w kolejce FIFO

Klient obsluzony w 1 gniezdzie

Klient w kolejce PRIORYTETOWEJ

Klient w SMO3

Klient w kolejce FIFO

Klient w SMO1

Klient obsluzony w 2 gniezdzie

!KLIENT POZA SYSTEMEM!

Klient w kolejce FIFO

Klient obsluzony w 1 gniezdzie

Klient w kolejce LIFO

Klient w SMO2

Klient w kolejce FIFO

Klient w SMO1

Klient w kolejce FIFO

Klient obsluzony w 3 gniezdzie

Klient w kolejce FIFO

Klient w kolejce FIFO

Klient obsluzony w 1 gniezdzie

Klient w kolejce PRIORYTETOWEJ

Klient w SMO3

Klient w kolejce FIFO

Klient w SMO1

Klient w kolejce FIFO

Klient obsluzony w 2 gniezdzie

!KLIENT POZA SYSTEMEM!

Klient w kolejce FIFO

Klient w kolejce FIFO

Klient obsluzony w 3 gniezdzie

!KLIENT POZA SYSTEMEM!

Klient w kolejce FIFO

Klient w kolejce FIFO

-------------------------------------------------------------------

S T A T Y S T Y K I

-------------------------------------------------------------------

Sr czas przebywania zgloszenia w systemie : 11.260723; Odchylenie standardowe: 3.665226

Sr czas przebywania zgloszenia w SMO1 : 3.164868; Odchylenie standardowe: 2.499532

Sr czas przebywania zgloszenia w SMO2 : 7.598444; Odchylenie standardowe: 1.208811

Sr czas przebywania zgloszenia w SMO3 : 4.894017; Odchylenie standardowe: 0.755823

-------------------------------------------------------------------

Sr liczba zajetych kanalow w SMO1 : 0.710934; Odchylenie standardowe: 0.453329

Sr liczba zajetych kanalow w SMO2 : 0.849251; Odchylenie standardowe: 0.357804

Sr liczba zajetych kanalow w SMO3 : 0.392628; Odchylenie standardowe: 0.488335

-------------------------------------------------------------------

Sr liczba zgloszen w kolejce FIFO : 27.107284; Odchylenie standardowe: 15.694832

Sr liczba zgloszen w kolejce LIFO : 6.269915; Odchylenie standardowe: 2.828372

Sr liczba zgloszen w kolejce priorytetowej : 1.677240; Odchylenie standardowe: 1.788276

-------------------------------------------------------------------

Prawdopodobienstwo obslugi zgloszenia w SMO1: 0.268926

Prawdopodobienstwo obslugi zgloszenia w SMO2: 0.580204

Prawdopodobienstwo obslugi zgloszenia w SMO3: 0.765908

-------------------------------------------------------------------

--------------------------------------------------

K O N I E C S Y M U L A C J I

--------------------------------------------------

Koniec programu? Tak(t)/Nie(n)

Kod programu:

MAIN MODULE dawid;

FROM StatMod IMPORT SREAL, TSREAL, TSINTEGER, RStatObj, RTimedStatObj, ITimedStatObj;

FROM RandMod IMPORT RandomObj;

FROM SimMod IMPORT SimTime, StartSimulation, StopSimulation, TriggerObj, Interrupt;

FROM GrpMod IMPORT QueueObj, StackObj, RankedObj;

(********D E K L A R A C J A************)

(********MONITORY************)

VAR

MCzasPrzebywania : SREAL;

MCzasPrzebywaniaSMO1, MCzasPrzebywaniaSMO2, MCzasPrzebywaniaSMO3: SREAL;

MNiecierpli : TSINTEGER;

MKolej1Z, MKolej2Z, MKolej3Z : TSINTEGER;

MKolej1W, MKolej2W, MKolej3W : TSINTEGER;

MZajKanalSMO1, MZajKanalSMO2, MZajKanalSMO3 : TSINTEGER;

(*******OBIEKTY*******)

TYPE

SystemObj = OBJECT; FORWARD;

SMONormalObj = OBJECT; FORWARD;

SMOJednosObj = OBJECT; FORWARD;

SMOTriangleObj = OBJECT; FORWARD;

FIFOObj = OBJECT; FORWARD;

LIFOObj = OBJECT; FORWARD;

PriorytObj = OBJECT; FORWARD;

GeneratorErlangObj = OBJECT; FORWARD;

(********OBiEKT SYSTEM************)

SystemObj = OBJECT(RandomObj)

MaxZglosz, IloscWygen : INTEGER;

Kol1 : FIFOObj;

Kol2 : LIFOObj;

Kol3 : PriorytObj;

Gen : GeneratorErlangObj;

Smo1 : SMONormalObj;

Smo2 : SMOJednosObj;

Smo3 : SMOTriangleObj;

ASK METHOD Init (IN maxzgl : INTEGER; IN kol1 : FIFOObj; IN kol2 : LIFOObj;

IN Kol3 : PriorytObj; IN gen : GeneratorErlangObj; IN smo1 : SMONormalObj; IN smo2 : SMOJednosObj; IN smo3,

trojk : SMOTriangleObj; IN j,k,l, r,i, a,b, g1 : REAL; IN g2: INTEGER; IN dlkol2, z: INTEGER);

ASK METHOD ZwiekszW;

ASK METHOD Rozpocznij;

ASK METHOD ObjTerminate;

END OBJECT;

(********OBIEKT KLIENT************)

KlientObj = OBJECT(RandomObj)

KolejkaID: INTEGER;

P1,P2,P3: REAL;

CzasWe,CzasWy : REAL;

CzasWeDoKol : REAL;

J,K : REAL;

PriorytKlienta : INTEGER;

KolejkaFifo : FIFOObj;

KolejkaLifo : LIFOObj;

KolejkaPrio : PriorytObj;

ASK METHOD Init (IN ziarno, prior : INTEGER; IN j,k : REAL; IN kolfifo : FIFOObj; IN kollifo : LIFOObj;

IN kolprio: PriorytObj);

(*******OBIEKT SMO - ROZKLAD TROJKATNY**********)

SMOTriangleObj = OBJECT(TriggerObj)

System : SystemObj;

KolejkaPrzed : PriorytObj;

KolejkaZa : FIFOObj;

Generator : RandomObj;

SmoID : INTEGER;

IloscStanowisk : INTEGER;

IloscZajetych : INTEGER;

J: REAL;

K: REAL;

L: REAL;

ASK METHOD Init (IN smoid, iloscstanow, ziarno : INTEGER;IN j,k,l: REAL; IN kolza: FIFOObj; IN kolprzed : PriorytObj; IN system : SystemObj);

TELL METHOD Obslugiwanie;

OVERRIDE

ASK METHOD ObjTerminate;

END OBJECT;

(*********OBIEKT SMO - ROZKLAD JEDNOSTAJNY********)

SMOJednosObj = OBJECT(TriggerObj)

System : SystemObj;

KolejkaPrzed : LIFOObj;

KolejkaZa : LIFOObj;

Generator : RandomObj;

SmoID : INTEGER;

IloscStanowisk : INTEGER;

IloscZajetych : INTEGER;

A: REAL;

B: REAL;

ASK METHOD Init(IN smoid, iloscstanow, ziarno : INTEGER; IN a,b: REAL;IN kolza:LIFOObj; IN kolprzed : LIFOObj; IN system : SystemObj);

TELL METHOD Obslugiwanie;

OVERRIDE

ASK METHOD ObjTerminate;

END OBJECT;

(**********OBIEKT GENERATOR -ROZKLAD ERLANGA **********)

GeneratorErlangObj = OBJECT(RandomObj)

System : SystemObj;

Kolejka : LIFOObj;

KolejkaFIFO : FIFOObj;

KolejkaPrior : PriorytObj;

G1: REAL;

G2: INTEGER;

ASK METHOD Init(IN kolejkaprior : PriorytObj; IN kolejkalifo : LIFOObj;IN kolejkafifo : FIFOObj; IN ziarno : INTEGER ;IN g1 : REAL; IN g2: INTEGER; IN system : SystemObj);

TELL METHOD MakeKlient;

END OBJECT;

(**********I M P L E M E N T A C J A **********)

(*******SYSTEM- METODY*******)

OBJECT SystemObj;

ASK METHOD Init (IN maxzgl : INTEGER; IN kol1 : FIFOObj; IN kol2 : LIFOObj;IN kol3 : PriorytObj; IN gen : GeneratorErlangObj; IN smo1 : SMONormalObj; IN smo2 : SMOJednosObj; IN smo3, trojk :SMOTriangleObj; IN j,k,l,r,i, a,b,g1 : REAL; IN g2: INTEGER; IN dlkol2,z : INTEGER);

BEGIN

ASK SELF TO SetSeed(z);

NEW(kol1);

NEW(kol2);

NEW(kol3);

NEW(gen);

NEW(smo1);

ASK METHOD ZmienPstwo;

BEGIN

P1 := ASK SELF TO UniformReal(1.0, 100.0);

P2 := ASK SELF TO UniformReal(1.0, 100.0);

P3 := ASK SELF TO UniformReal(1.0, 100.0);

END METHOD;

ASK METHOD ZmienKolejkaID (IN kolejkaid : INTEGER);

BEGIN

KolejkaID := kolejkaid;

END METHOD;

TELL METHOD Niecierpliwi;

VAR

czas : REAL;

BEGIN

IF KolejkaID=1

czas := ABS(ASK SELF TO Exponential(1.0/ASK SELF TO UniformReal(1.0,20.0)));

WAIT DURATION(czas);

ASK KolejkaFifo TO RemoveThis(SELF);

ON INTERRUPT;

END WAIT;

ELSIF KolejkaID=2

czas := ABS(ASK SELF TO Erlang(ASK SELF TO UniformReal(1.0,20.0),ASK SELF TO UniformInt(1,20)));

WAIT DURATION(czas);

ASK KolejkaLifo TO RemoveThis(SELF);

ON INTERRUPT;

END WAIT;

ELSIF KolejkaID=3

czas := ABS(ASK SELF TO Normal(ASK SELF TO UniformReal(1.0,20.0),ASK SELF TO UniformReal(1.0,10.0)));

WAIT DURATION(czas);

ASK KolejkaPrio TO RemoveThis(SELF);

ON INTERRUPT;

END WAIT;

END IF;

INC (MNiecierpli);

END METHOD;

ASK METHOD ZmienCzasWeDoKol (IN czas:REAL);

BEGIN

CzasWeDoKol := czas;

END METHOD;

END OBJECT;

(*******KOLEJKA FIFO- METODY **********)

OBJECT FIFOObj;

ASK METHOD Init ( IN smo : SMONormalObj);

BEGIN

Smo := smo;

END METHOD;

ASK METHOD Dodaj (IN klient : KlientObj);

BEGIN

Add(klient);

ASK klient TO ZmienCzasWeDoKol(SimTime);

ASK klient TO ZmienKolejkaID(1);

OUTPUT("Klient w kolejce FIFO");

TELL klient TO Niecierpliwi;

INC(MKolej1Z);

ASK Smo TO Release;

END METHOD;

ASK METHOD Usun(IN klient: KlientObj);

BEGIN

ASK SELF TO RemoveThis(klient);

DISPOSE (klient);

DEC(MKolej1Z);

END METHOD;

END OBJECT;

(********SMO - ROZKLAD TROJKATNY- METODY ********)

OBJECT SMOTriangleObj;

ASK METHOD Init(IN smoid, iloscstanow, ziarno : INTEGER; IN j,k,l : REAL; IN kolza:FIFOObj;

IN kolprzed : PriorytObj; IN system: SystemObj);

BEGIN

SmoID := smoid;

IloscStanowisk := iloscstanow;

IloscZajetych := 0;

J := j;

K := k;

L := l;

KolejkaPrzed := kolprzed;

KolejkaZa :=kolza;

System :=system;

NEW(Generator);

ASK Generator TO SetSeed(ziarno);

END METHOD;

TELL METHOD Obslugiwanie;

VAR

klient: KlientObj;

t: REAL;

BEGIN

IF IloscStanowisk > IloscZajetych

IF (ASK KolejkaPrzed TO numberIn) > 0

OUTPUT("Klient w SMO3");

INC(MZajKanalSMO3);

INC(IloscZajetych);

klient := ASK KolejkaPrzed TO Remove;

ASK SELF TO Release;

Interrupt (klient,"Niecierpliwi");

t:= ABS(ASK Generator TO Triangular(J,K,L));

WAIT DURATION(t);

END WAIT;

MCzasPrzebywaniaSMO3 := SimTime -klient.CzasWeDoKol;

OUTPUT("Klient obsluzony w 3 gniezdzie");

INC(MKolej3W);

IF (ASK klient TO P3)>= 50.0

ASK klient TO ZmienPstwo;

ASK KolejkaZa TO Dodaj(klient);

ELSE

MCzasPrzebywania := SimTime-klient.CzasWe;

DISPOSE(klient);

OUTPUT("!KLIENT POZA SYSTEMEM!");

END IF;

DEC(IloscZajetych);

DEC(MZajKanalSMO3);

ELSE

WAIT FOR SELF TO Fire;

END WAIT;

END IF;

END IF;

TELL SELF TO Obslugiwanie;

END METHOD;

ASK METHOD ObjTerminate;

BEGIN

DISPOSE(Generator);

END METHOD;

END OBJECT;

(********SMO - ROZKLAD JEDNOSTAJNY- METODY **********)

OBJECT SMOJednosObj;

ASK METHOD Init (IN smoid, iloscstanow, ziarno : INTEGER; IN a,b: REAL;

IN kolza:LIFOObj; IN kolprzed : LIFOObj; IN system : SystemObj);

BEGIN

SmoID := smoid;

IloscStanowisk :=iloscstanow;

IloscZajetych := 0;

A :=a;

B :=b;

KolejkaPrzed :=kolprzed;

KolejkaZa :=kolza;

System := system;

NEW(Generator);

ASK Generator TO SetSeed(ziarno);

END METHOD;

TELL METHOD Obslugiwanie;

VAR

klient : KlientObj;

t: REAL;

BEGIN

IF IloscStanowisk > IloscZajetych

IF (ASK KolejkaPrzed TO numberIn) >0

OUTPUT("Klient w SMO2");

INC(MZajKanalSMO2);

INC(IloscZajetych);

klient := ASK KolejkaPrzed TO Remove;

Interrupt(klient, "Niecierpliwi");

t := ABS(ASK Generator TO UniformReal(A,B));

WAIT DURATION(t);

END WAIT;

MCzasPrzebywaniaSMO2 := SimTime- klient.CzasWeDoKol;

MCzasPrzebywania := SimTime -klient.CzasWe;

OUTPUT("Klient obsluzony w 2 gniezdzie");

INC(MKolej2W);

IF (ASK klient TO P2)>= 80.0

ASK klient TO ZmienPstwo;

ASK KolejkaZa TO Dodaj(klient);

ELSE

MCzasPrzebywania := SimTime-klient.CzasWe;

DISPOSE(klient);

OUTPUT("!KLIENT POZA SYSTEMEM!");

END IF;

DEC(IloscZajetych);

DEC(MZajKanalSMO2);

ELSE

WAIT FOR SELF TO Fire;

END WAIT;

END IF;

END IF;

TELL SELF TO Obslugiwanie;

END METHOD;

ASK METHOD ObjTerminate;

BEGIN

DISPOSE(Generator);

END METHOD;

END OBJECT;

OUTPUT("Parametr nr 1 dla SMO o rozkladzie Jednostajnym:");

INPUT(a);

OUTPUT("Parametr nr 2 dla SMO o rozkladzie Jednostajnym:");

INPUT(b);

OUTPUT("Parametr nr 1 dla SMO o rozkladzie Trojkatnym(minimum): ");

OUTPUT("Parametr 'k' dla generatora o rozkladzie Erlanga: ");

INPUT(g1);

OUTPUT("Parametr 'lambda' dla generatora o rozkladzie Erlanga: ");

INPUT(g2);

OUTPUT("Parametr nr 1 dla SMO o rozkladzie Normalnym: ");

INPUT(r);

OUTPUT("Parametr nr 2 dla SMO o rozkladzie Normalnym: ");

INPUT(i);

INPUT(j);

OUTPUT("Parametr nr 2 dla SMO o rozkladzie Trojkatnym: ");

INPUT(k);

OUTPUT("Parametr nr 3 dla SMO o rozkladzie Trojkatnym(maximum): ");

INPUT(l);

OUTPUT("-------------------------------------------------------------------");

OUTPUT("P O C Z A T E K S Y M U L A C J I");

OUTPUT("-------------------------------------------------------------------");

NEW(System);

ASK System TO Init(maxzgl+1,Kolejka1,Kolejka2,Kolejka3,Gen,SMO1,SMO2,SMO3,trojk,

j,k,l,r,i,a,b,g1, g2, dlkol2,z);

ASK System TO Rozpocznij;

StartSimulation;

StopSimulation;

M1:=GETMONITOR(MCzasPrzebywania,RStatObj);

M2:=GETMONITOR(MCzasPrzebywaniaSMO1,RStatObj);

M3:=GETMONITOR(MCzasPrzebywaniaSMO2,RStatObj);

M4:=GETMONITOR(MCzasPrzebywaniaSMO3,RStatObj);

M5:=GETMONITOR(MZajKanalSMO1,ITimedStatObj);

M6:=GETMONITOR(MZajKanalSMO2,ITimedStatObj);

M7:=GETMONITOR(MZajKanalSMO3,ITimedStatObj);

M8:=GETMONITOR(MKolej1Z,ITimedStatObj);

M9:=GETMONITOR(MKolej2Z,ITimedStatObj);

M10:=GETMONITOR(MKolej3Z,ITimedStatObj);

M12:=GETMONITOR(MKolej1W, ITimedStatObj);

M13:=GETMONITOR(MKolej2W, ITimedStatObj);

M14:=GETMONITOR(MKolej3W, ITimedStatObj);

M11:=GETMONITOR(MNiecierpli,ITimedStatObj);

OUTPUT(" ");

OUTPUT("-------------------------------------------------------------------");

OUTPUT("S T A T Y S T Y K I");

OUTPUT("-------------------------------------------------------------------");

OUTPUT("Sr czas przebywania zgloszenia w systemie : ",ASK M1 TO Mean,"; Odchylenie standardowe: ",ASK M1 TO StdDev);

OUTPUT("Sr czas przebywania zgloszenia w SMO1 : ",ASK M2 TO Mean,"; Odchylenie standardowe: ", ASK M2 TO StdDev);

OUTPUT("Sr czas przebywania zgloszenia w SMO2 : ",ASK M3 TO Mean,"; Odchylenie standardowe: ", ASK M3 TO StdDev);

OUTPUT("Sr czas przebywania zgloszenia w SMO3 : ",ASK M4 TO Mean,"; Odchylenie standardowe: ", ASK M4 TO StdDev);

OUTPUT("-------------------------------------------------------------------");

OUTPUT("Sr liczba zajetych kanalow w SMO1 : ",ASK M5 TO Mean,"; Odchylenie standardowe: ", ASK M5 TO StdDev);

OUTPUT("Sr liczba zajetych kanalow w SMO2 : ",ASK M6 TO Mean,"; Odchylenie standardowe: ", ASK M6 TO StdDev);

OUTPUT("Sr liczba zajetych kanalow w SMO3 : ",ASK M7 TO Mean,"; Odchylenie standardowe: ", ASK M7 TO StdDev);

OUTPUT("-------------------------------------------------------------------");

OUTPUT("Sr liczba zgloszen w kolejce FIFO : ",ASK M8 TO Mean,"; Odchylenie standardowe: ", ASK M8 TO StdDev);

OUTPUT("Sr liczba zgloszen w kolejce LIFO : ",ASK M9 TO Mean,"; Odchylenie standardowe: ", ASK M9 TO StdDev);

OUTPUT("Sr liczba zgloszen w kolejce priorytetowej : ",ASK M10 TO Mean,"; Odchylenie standardowe: ", ASK M10 TO StdDev);

ASK METHOD ZmienPstwo;

ASK METHOD ZmienKolejkaID(IN kolejkaid : INTEGER);

TELL METHOD Niecierpliwi;

ASK METHOD ZmienCzasWeDoKol (IN czas : REAL);

END OBJECT;

(****OBIEKT KOLEJKA FIFO*******)

FIFOObj = OBJECT(QueueObj)

Smo : SMONormalObj;

Klient: KlientObj;

ASK METHOD Init (IN smo : SMONormalObj);

ASK METHOD Dodaj(IN klient : KlientObj);

ASK METHOD Usun (IN klient : KlientObj);

END OBJECT;

(********OBIEKT KOLEJKA LIFO*************)

LIFOObj = OBJECT(StackObj)

Smo: SMOJednosObj;

Klient : KlientObj;

Dlugosc : INTEGER;

ASK METHOD Init(IN dl : INTEGER; IN smo : SMOJednosObj);

ASK METHOD Dodaj (IN klient: KlientObj);

ASK METHOD Usun (IN klient : KlientObj);

END OBJECT;

(*******OBIEKT KOLEJKA PRIORYTETOWA*******)

PriorytObj = OBJECT(RankedObj)

Smo : SMOTriangleObj;

Klient : KlientObj;

ASK METHOD Init (IN smo : SMOTriangleObj);

ASK METHOD Dodaj (IN klient: KlientObj);

ASK METHOD Usun (IN klient : KlientObj);

OVERRIDE

ASK METHOD Rank(IN k1, k2 : ANYOBJ):INTEGER;

END OBJECT;

(*******OBIEKT SMO - ROZKLAD NORMALNY**********)

SMONormalObj = OBJECT(TriggerObj)

System : SystemObj;

KolejkaPrzed : FIFOObj;

KolejkaZa1 : LIFOObj;

KolejkaZa2 : PriorytObj;

Generator : RandomObj;

Trojk : SMOTriangleObj;

SmoID : INTEGER;

IloscStanowisk : INTEGER;

IloscZajetych : INTEGER;

R,I : REAL;

ASK METHOD Init(IN smoid, iloscstanow, ziarno : INTEGER; IN r,i : REAL;

IN kolza1 :LIFOObj; IN kolza2 : PriorytObj; IN kolprzed : FIFOObj; IN system : SystemObj;

IN trojk : SMOTriangleObj);

TELL METHOD Obslugiwanie;

OVERRIDE

ASK METHOD ObjTerminate;

END OBJECT;

NEW(smo2);

NEW(smo3);

Kol1:=kol1;

Kol2:=kol2;

Kol3:=kol3;

Smo1:=smo1;

Smo2:=smo2;

Smo3:=smo3;

Gen := gen;

MaxZglosz:=maxzgl;

IloscWygen:=0;

ASK Kol1 TO Init(smo1);

ASK Kol2 TO Init(dlkol2, smo2);

ASK Kol3 TO Init(smo3);

ASK Gen TO Init(kol3, kol2, kol1, ASK SELF TO UniformInt (1, 100) ,ASK SELF TO UniformReal(1.0,5.0), ASK SELF TO UniformInt(5,15),SELF);

ASK Smo1 TO Init(1,2, ASK SELF TO UniformInt(1,100),r,i, kol2, kol3, kol1, SELF, trojk );

ASK Smo2 TO Init(2,3, ASK SELF TO UniformInt(1,100),a,b, kol2, kol2,SELF);

ASK Smo3 TO Init(3,4, ASK SELF TO UniformInt(1,100),j,k,l, kol1, kol3, SELF);

END METHOD;

ASK METHOD Rozpocznij;

BEGIN

TELL Gen TO MakeKlient;

TELL Smo1 TO Obslugiwanie;

TELL Smo2 TO Obslugiwanie;

TELL Smo3 TO Obslugiwanie;

END METHOD;

ASK METHOD ZwiekszW;

BEGIN

INC(IloscWygen);

END METHOD;

ASK METHOD ObjTerminate;

BEGIN

DISPOSE(Kol1);

DISPOSE(Kol2);

DISPOSE(Kol3);

DISPOSE(Gen);

DISPOSE(Smo1);

DISPOSE(Smo2);

DISPOSE(Smo3);

END METHOD;

END OBJECT;

(*********KLIENT- METODY **********)

OBJECT KlientObj;

ASK METHOD Init (IN ziarno, prior : INTEGER; IN j,k : REAL; IN kolfifo : FIFOObj; IN kollifo : LIFOObj; IN kolprio: PriorytObj);

BEGIN

SetSeed (ziarno);

PriorytKlienta := prior;

J := j;

K := k;

P1 := ASK SELF TO UniformReal(1.0, 100.0);

P2 := ASK SELF TO UniformReal(1.0, 100.0);

P3 := ASK SELF TO UniformReal(1.0, 100.0);

KolejkaFifo := kolfifo;

KolejkaLifo := kollifo;

KolejkaPrio := kolprio;

CzasWe := SimTime;

END METHOD;

(********KOLEJKA LIFO- METODY ********)

OBJECT LIFOObj;

ASK METHOD Init(IN dl : INTEGER; IN smo : SMOJednosObj);

BEGIN

Smo:= smo;

Dlugosc := dl;

END METHOD;

ASK METHOD Dodaj (IN klient: KlientObj);

BEGIN

IF numberIn < Dlugosc

Add (klient);

ASK klient TO ZmienCzasWeDoKol(SimTime);

ASK klient TO ZmienKolejkaID(2);

OUTPUT("Klient w kolejce LIFO");

TELL klient TO Niecierpliwi;

INC(MKolej2Z);

ASK Smo TO Release;

END IF;

END METHOD;

ASK METHOD Usun (IN klient: KlientObj);

BEGIN

ASK SELF TO RemoveThis(klient);

DISPOSE(klient);

DEC(MKolej2Z);

END METHOD;

END OBJECT;

(*******KOLEJKA PRIORYTETOWA- METODY *******)

OBJECT PriorytObj;

ASK METHOD Init ( IN smo: SMOTriangleObj);

BEGIN

Smo :=smo;

END METHOD;

ASK METHOD Dodaj(IN klient: KlientObj);

BEGIN

Add(klient);

ASK klient TO ZmienCzasWeDoKol(SimTime);

ASK klient TO ZmienKolejkaID(3);

OUTPUT("Klient w kolejce PRIORYTETOWEJ");

TELL klient TO Niecierpliwi;

INC(MKolej3Z);

ASK Smo TO Release;

END METHOD;

ASK METHOD Usun (IN klient : KlientObj);

BEGIN

ASK SELF TO RemoveThis(klient);

DISPOSE (klient);

DEC (MKolej3Z);

END METHOD;

ASK METHOD Rank (IN k1, k2 : ANYOBJ):INTEGER;

VAR

klient1, klient2 :KlientObj;

BEGIN

klient1 := k1;

klient2 := k2;

IF klient1.PriorytKlienta > klient2.PriorytKlienta

RETURN -1;

ELSIF klient1.PriorytKlienta = klient2.PriorytKlienta

RETURN 0;

ELSE RETURN 1;

END IF;

END METHOD;

END OBJECT;

(******SMO - ROZKLAD NORMALNY- METODY **********)

OBJECT SMONormalObj;

ASK METHOD Init(IN smoid, iloscstanow, ziarno: INTEGER; IN r,i: REAL;

IN kolza1 :LIFOObj; IN kolza2: PriorytObj; IN kolprzed : FIFOObj;IN system : SystemObj;

IN trojk : SMOTriangleObj);

BEGIN

SmoID :=smoid;

Trojk := trojk;

IloscStanowisk :=iloscstanow;

IloscZajetych:=0;

I:= i;

R:=r;

KolejkaPrzed := kolprzed;

KolejkaZa1 := kolza1;

KolejkaZa2 := kolza2;

System := system;

NEW(Generator);

ASK Generator TO SetSeed(ziarno);

END METHOD;

TELL METHOD Obslugiwanie;

VAR

klient: KlientObj;

t : REAL;

BEGIN

IF IloscStanowisk > IloscZajetych

IF (ASK KolejkaPrzed TO numberIn) > 0

OUTPUT("Klient w SMO1");

INC(MZajKanalSMO1);

INC(IloscZajetych);

klient := ASK KolejkaPrzed TO Remove;

Interrupt(klient,"Niecierpliwi");

t := ABS(ASK Generator TO Normal(R,I));

WAIT DURATION(t);

END WAIT;

MCzasPrzebywaniaSMO1 := SimTime-klient.CzasWeDoKol;

OUTPUT("Klient obsluzony w 1 gniezdzie");

INC(MKolej1W);

IF klient.P1 >= 50.0

WHILE KolejkaZa1.numberIn = KolejkaZa1.Dlugosc

WAIT FOR Trojk TO Fire();

END WAIT;

END WHILE;

ASK KolejkaZa1 TO Dodaj(klient);

ELSE

ASK KolejkaZa2 TO Dodaj(klient);

END IF;

DEC(IloscZajetych);

DEC(MZajKanalSMO1);

ELSE

WAIT FOR SELF TO Fire;

END WAIT;

END IF;

END IF;

TELL SELF TO Obslugiwanie;

END METHOD;

ASK METHOD ObjTerminate;

BEGIN

DISPOSE(Generator);

END METHOD;

END OBJECT;

(******GENERATOR - ROZKLAD ERLANGA- METODY *********)

OBJECT GeneratorErlangObj;

ASK METHOD Init (IN kolejkaprior :PriorytObj; IN kolejkalifo : LIFOObj; IN kolejkafifo: FIFOObj;

IN ziarno : INTEGER; IN g1: REAL; IN g2 : INTEGER; IN system: SystemObj);

BEGIN

Kolejka := kolejkalifo;

KolejkaFIFO:=kolejkafifo;

KolejkaPrior:= kolejkaprior;

SetSeed(ziarno);

System:=system;

G1 :=g1;

G2 :=g2;

END METHOD;

TELL METHOD MakeKlient;

VAR

t: REAL;

klient1,klient2,klient3 : KlientObj;

BEGIN

WHILE System.IloscWygen < System.MaxZglosz-1

t := ABS(ASK SELF TO Erlang(G1, G2));

WAIT DURATION(t);

END WAIT;

NEW(klient1);

ASK System TO ZwiekszW;

ASK klient1 TO Init(ASK SELF TO UniformInt (1, 100),

ASK SELF TO UniformInt(1, 100), ASK SELF TO UniformReal(1.0, 10.0), ASK SELF TO UniformReal(1.0, 10.0),KolejkaFIFO,

Kolejka, KolejkaPrior);

ASK KolejkaFIFO TO Dodaj(klient1);

END WHILE;

END METHOD;

END OBJECT;

VAR

System : SystemObj;

Kolejka1 : FIFOObj;

Kolejka2 : LIFOObj;

Kolejka3 : PriorytObj;

SMO1 : SMONormalObj;

SMO2 : SMOJednosObj;

SMO3, trojk : SMOTriangleObj;

Gen : GeneratorErlangObj;

maxzgl : INTEGER;

dlkol2, z : INTEGER;

j,k,l : REAL;

r,i : REAL;

a,b,g1 : REAL;

g2 : INTEGER;

M1,M2,M3,M4 : RStatObj;

M5,M6,M7,M8,M9,M10,M11,M12,M13,M14 : ITimedStatObj;

key : CHAR;

BEGIN

REPEAT

OUTPUT("-------------------------------");

OUTPUT("Parametry symulacji");

OUTPUT("-------------------------------");

OUTPUT("Liczba klientow: ");

INPUT(maxzgl);

OUTPUT("Dlugosc kolejki:");

INPUT(dlkol2);

OUTPUT("-------------------------------------------------------------------");

OUTPUT("Prawdopodobienstwo obslugi zgloszenia w SMO1: ",ASK M12 TO Mean / ASK M8 TO Mean);

OUTPUT("Prawdopodobienstwo obslugi zgloszenia w SMO2: ",ASK M13 TO Mean / ASK M9 TO Mean);

IF (ASK M10 TO Mean) > 0.0

OUTPUT("Prawdopodobienstwo obslugi zgloszenia w SMO3: ",ASK M14 TO Mean / ASK M10 TO Mean);

ELSE

OUTPUT("Prawdopodobienstwo obslugi zgloszenia w SMO3: 0");

END IF;

OUTPUT("-------------------------------------------------------------------");

OUTPUT("--------------------------------------------------");

OUTPUT("K O N I E C S Y M U L A C J I");

OUTPUT("--------------------------------------------------");

OUTPUT("Koniec programu? Tak(t)/Nie(n) ");

INPUT(key);

UNTIL UPPER(key)<>'N';

END MODULE.

7



Wyszukiwarka

Podobne podstrony:
PSY sprawozdanie, WAT, V SEM, PSY, 1
PSY sprawozdanie (1), WAT, V SEM, PSY, 1
egzamin 13-testowe, WAT, V SEM, PSY, PSY EGZAMIN, jakie egzamin
PSy - Sprawozdanie, WAT, SEMESTR V, podstawy symulacji, 17 moj
Sprawozdanie chemia, WAT, I sem. Energetyka, Chemia, Chemia
SPRAWOZDANIE, WAT, II SEM, PEIE, od shajbka, peie Labki, SPRAWOZDANIE NR 5
CO POWINNO ZAWIERAC SPRAWOZDANIE wytyczne, sem II, pod teorii okrętw, lab
Sprawozdanie nr 3 (3), sem II, Podstawy Technologii Okrętów - Wykład.Laboratorium, Laboratorium nr 3

więcej podobnych podstron