I7G2S1 Kamil Piersa PSY

background image

Projekt - Podstawy Symulacji

Strona 1

Wojskowa Akademia Techniczna

im. Jarosława Dąbrowskiego

P o d s t a w y S y m u l a c j i

P r o j e k t

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

Wykonał:

Kamil Piersa

I7G2S1

background image

Projekt - Podstawy Symulacji

Strona 2

Zadanie:

Przy realizacji zadania należy przyjąć następujące dane z listy przedstawionej poniżej:
a) rozkład zmiennych T

j

: (nrDz + i) mod 6 + 1; T1 =2

b) rozkład zmiennych O

i

: (nrDz + i + 1) mod 6 + 1; O1=3, O2=4, O3= 5

c) L

i

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

d) AL

i

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

e) R

j

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

f) M

i

= (nrDz + i + 2) mod 4 + 1; 2 3 4

g) Blokowanie zgłoszeń 1. SMO;
h) Klienci niecierpliwi w SMO

i

: N

i

= (nrDz + i) mod 4 (ograniczony czas oczekiwania na rozpoczęcie obsługi);

gdzie:
i – numer SMO;
j – numer strumienia;
T

j

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

O

i

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

N

i

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

R

j

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

p

k

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

L

i

– 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

SMO

SMO

O

2

O

3

SMO

O

1

T

1

p

1

1-p

1

p

2

p

3

background image

Projekt - Podstawy Symulacji

Strona 3

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 do zadania laboratoryjnego:

Dla nrDz (numeru z dziennika) = 6.

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

T

1

= rozkład Erlanga

Paczka R1 = 1

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

O

1

– rozkład Normalny

O

2

– rozkład Jednostajny

O

3

– rozkład Trójkątny


Długości kolejek SMO:

L

1

– nieograniczona

L

2

– ograniczona

L

3

– nieograniczona

background image

Projekt - Podstawy Symulacji

Strona 4

Algorytmy kolejek:

AL

1

– FIFO

AL

2

– LIFO

AL

3

– Z priorytetami

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

N

1

– rozkład Wykładniczy

N

2

– rozkład Erlanga

N

3

– rozkład Normalny


Liczba stanowisk obsługi:

M

1

– 2

M

2

– 3

M

3

– 4

Rozkłady:

Rozkład normalny

Gęstość prawdopodobieństwa:

dwuparametrowy o parametrach:

µ - wartość oczekiwana
σ – odchylenie standardowe

Rozkład wykładniczy

background image

Projekt - Podstawy Symulacji

Strona 5

Gęstość prawdopodobieństwa:

Dystrybuanta:

λ – wartość oczekiwana

Rozkład Erlanga:

Gęstość:

o parametrach:

k > 0

λ >0

Rozkład Trójkątny:

Gęstość:

a – min

background image

Projekt - Podstawy Symulacji

Strona 6

b – mean
c – max

Rozkład jedostajny:

Sposób rozwiązania zadania:

Generowanie klientów odbywa się 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 = 2 gdzie jest obsługiwany 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 = 3 lub do trzeciego o
rozkładzie Trójkątnym i ilości stanowisk obsługi = 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, że może przeprowadzić symulację dla liczby
klientów określonych przez użytkownika.

Sposób wyznaczania charakterystyk:

Charakterystyki graniczne systemu wyznaczane są za pomocą zmiennych monitorowanych odpowiedniego typu.

Czas przebywania zgłoszenia:

Zmienna typu SREAL monitoruje czas wejścia i wyjścia klienta z kolejki. Dzięki temu, wyliczany jest średni czas przebywania zgłoszenia w SMO po zakończeniu symulacji.

Liczba zgłoszeń:

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

Liczba zajętych kanałów:

Zmienna typu TSINTEGER zwiększana w chwili, gdy dany kanał rozpoczyna obsługę klienta, a zmniejszana, gdy ją kończy.

background image

Projekt - Podstawy Symulacji

Strona 7

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 to stosunek liczby obsłużonych klientów do liczby wszystkich klientów wchodzących do SMO.

Przykład działania programu:

*******************************
Wprowadzanie parametrow symulacji
*******************************
***Ilosc klientow:
40
Dlugosc kolejki:
4
***Parametr 'k' dla generatora o rozkladzie Erlanga:
1
Parametr 'lambda' dla generatora o rozkladzie Erlanga:
2
***Pierwszy parametr dla SMO o rozkladzie Normalnym:
3
Drugi parametr dla SMO o rozkladzie Normalnym:
4
***Pierwszy parametr dla SMO o rozkladzie Jednostajnym:
5
Drugi parametr dla SMO o rozkladzie Jednostajnym:
6
***Pierwszy (min) parametr dla SMO o rozkladzie Trojkatnym:
7
Drugi (mean) parametr dla SMO o rozkladzie Trojkatnym:
8
***Trzeci (max) parametr dla SMO o rozkladzie Trojkatnym:
9
**********************************
S T A R T S Y M U L A C J I
**********************************
Klient znajduje sie w kolejce FIFO
Klient w SMO1
Klient obsluzony w 1 gniezdzie
Klient znajduje sie w kolejce LIFO
Klient w SMO2
Klient znajduje sie w kolejce FIFO
Klient w SMO1
Klient znajduje sie w kolejce FIFO
Klient obsluzony w 1 gniezdzie
Klient znajduje sie w kolejce PRIORYTETOWEJ

Klient znajduje sie w SMO3
Klient znajduje sie w kolejce FIFO
Klient w SMO1
Klient znajduje sie w kolejce FIFO
Klient obsluzony w 1 gniezdzie
Klient znajduje sie w kolejce PRIORYTETOWEJ
Klient w SMO1
Klient obsluzony w 2 gniezdzie
!!!KLIENT OPUSCIL SYSTEM!!!
Klient znajduje sie w kolejce FIFO
Klient znajduje sie w kolejce FIFO
Klient znajduje sie w kolejce FIFO
Klient znajduje sie w kolejce FIFO
Klient znajduje sie w kolejce FIFO
Klient obsluzony w 3 gniezdzie
!!!KLIENT OPUSCIL SYSTEM!!!
Klient znajduje sie w SMO3
Klient znajduje sie w kolejce FIFO
Klient obsluzony w 1 gniezdzie
Klient znajduje sie w kolejce LIFO
Klient w SMO1
Klient w SMO2
Klient znajduje sie w kolejce FIFO
Klient znajduje sie w kolejce FIFO
Klient obsluzony w 1 gniezdzie
Klient znajduje sie w kolejce PRIORYTETOWEJ
Klient znajduje sie w kolejce FIFO
Klient w SMO1
Klient znajduje sie w kolejce FIFO
Klient obsluzony w 2 gniezdzie
!!!KLIENT OPUSCIL SYSTEM!!!
Klient znajduje sie w kolejce FIFO
Klient znajduje sie w kolejce FIFO
Klient znajduje sie w kolejce FIFO
Klient obsluzony w 3 gniezdzie
Klient znajduje sie w kolejce FIFO
Klient znajduje sie w SMO3
Klient znajduje sie w kolejce FIFO
Klient znajduje sie w kolejce FIFO
Klient znajduje sie w kolejce FIFO

Klient znajduje sie w kolejce FIFO
Klient znajduje sie w kolejce FIFO

Klient znajduje sie w kolejce FIFO
Klient obsluzony w 1 gniezdzie

background image

Projekt - Podstawy Symulacji

Strona 8

Klient znajduje sie w kolejce PRIORYTETOWEJ
Klient znajduje sie w kolejce FIFO
Klient w SMO1
Klient obsluzony w 3 gniezdzie
Klient znajduje sie w kolejce FIFO
Klient znajduje sie w SMO3
Klient obsluzony w 1 gniezdzie
Klient znajduje sie w kolejce LIFO
Klient w SMO2
Klient znajduje sie w kolejce FIFO
Klient w SMO1
Klient znajduje sie w kolejce FIFO
Klient znajduje sie w kolejce FIFO
Klient obsluzony w 1 gniezdzie
Klient znajduje sie w kolejce LIFO
Klient w SMO1
Klient znajduje sie w kolejce FIFO
Klient obsluzony w 2 gniezdzie
!!!KLIENT OPUSCIL SYSTEM!!!
Klient w SMO2
Klient znajduje sie w kolejce FIFO
Klient znajduje sie w kolejce FIFO
Klient obsluzony w 3 gniezdzie
Klient znajduje sie w kolejce FIFO
Klient znajduje sie w kolejce FIFO
Klient znajduje sie w kolejce FIFO
Klient znajduje sie w kolejce FIFO
Klient obsluzony w 2 gniezdzie
!!!KLIENT OPUSCIL SYSTEM!!!
Klient znajduje sie w kolejce FIFO
Klient obsluzony w 1 gniezdzie
Klient znajduje sie w kolejce LIFO
Klient w SMO2
Klient znajduje sie w kolejce FIFO
Klient w SMO1
Klient znajduje sie w kolejce FIFO
Klient znajduje sie w kolejce FIFO
Klient obsluzony w 1 gniezdzie
Klient znajduje sie w kolejce PRIORYTETOWEJ
Klient znajduje sie w SMO3
Klient znajduje sie w kolejce FIFO
Klient w SMO1
Klient obsluzony w 2 gniezdzie

!!!KLIENT OPUSCIL SYSTEM!!!
Klient znajduje sie w kolejce FIFO
Klient obsluzony w 1 gniezdzie
Klient znajduje sie w kolejce PRIORYTETOWEJ
Klient obsluzony w 3 gniezdzie
!!!KLIENT OPUSCIL SYSTEM!!!
Klient znajduje sie w SMO3
Klient obsluzony w 3 gniezdzie
!!!KLIENT OPUSCIL SYSTEM!!!

******************************************************************
S T A T Y S T Y K I
******************************************************************
Sredni czas przebywania zgloszenia w systemie wynosi: 10.387065; Odchylenie
standardowe: 3.515962
Sredni czas przebywania zgloszenia w SMO1 wynosi: 4.032524; Odchylenie
standardowe: 3.120331
Sredni czas przebywania zgloszenia w SMO2 wynosi: 5.759998; Odchylenie
standardowe: 0.579219
Sredni czas przebywania zgloszenia w SMO3 wynosi: 10.544457; Odchylenie
standardowe: 2.419292
******************************************************************
Srednia liczba zajetych kanalow w SMO1 wynosi: 0.708364; Odchylenie
standardowe: 0.454516
Srednia liczba zajetych kanalow w SMO2 wynosi: 0.445603; Odchylenie
standardowe: 0.497032
Srednia liczba zajetych kanalow w SMO3 wynosi: 0.793639; Odchylenie
standardowe: 0.404693
******************************************************************
Srednia liczba zgloszen w kolejce FIFO wynosi: 26.489005; Odchylenie
standardowe: 14.651615
Srednia liczba zgloszen w kolejce LIFO wynosi: 3.145126; Odchylenie
standardowe: 1.641815
Srednia liczba zgloszen w kolejce priorytetowej wynosi: 3.629279; Odchylenie
standardowe: 1.690808
******************************************************************
Prawdopodobienstwo obsluzenia zgloszenia w SMO1: 0.255744
Prawdopodobienstwo obsluzenia zgloszenia w SMO2: 0.850359
Prawdopodobienstwo obsluzenia zgloszenia w SMO3: 0.715126
******************************************************************
*************************************************
!!!!!!!!!!K O N I E C S Y M U L A C J I!!!!!!!!!!
*************************************************

Koniec programu? tak(t)/nie(n)



















background image

Projekt - Podstawy Symulacji

Strona 9

Kod programu:

MAIN MODULE genio;

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;

VAR

MONCzasPrzebyw : SREAL;

MONCzasPrzebywSMO1, MONCzasPrzebywSMO2, MONCzasPrzebywSMO3: SREAL;

MONKol1Zgl, MONKol2Zgl, MONKol3Zgl : TSINTEGER;

MONKol1Wyj, MONKol2Wyj, MONKol3Wyj : TSINTEGER;

MONZajKanalSMO1, MONZajKanalSMO2, MONZajKanalSMO3 : TSINTEGER;

Niecierpliwi : TSINTEGER;



TYPE

SystemObj = OBJECT; FORWARD;

FIFOObj = OBJECT; FORWARD;

LIFOObj = OBJECT; FORWARD;

PriorytObj = OBJECT; FORWARD;

SMONormalObj = OBJECT; FORWARD;

SMOJednosObj = OBJECT; FORWARD;

SMOTriangleObj = OBJECT; FORWARD;

GeneratorErlangObj = OBJECT; FORWARD;


(**************SYSTEM************)
SystemObj = OBJECT(RandomObj)

IloscWygen, MaxZgl : 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 ZwiekszWyg;

ASK METHOD Start;

ASK METHOD ObjTerminate;

END OBJECT;

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

ASK METHOD ZmienPstwo;

ASK METHOD ZmienKolejkaID(IN kolejkaid : INTEGER);

TELL METHOD Niecierpliwosc;

ASK METHOD ZmienCzasWeDoKol (IN czas : REAL);

END OBJECT;


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


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


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

background image

Projekt - Podstawy Symulacji

Strona 10


(*******SMO O ROZKLADZIE NORMALNYM**********)

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;


(*******SMO O ROZKLADZIE TROJKATNYM**********)
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;


(*********SMO O ROZKLADZIE JEDNOSTAJNYM********)
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;



(************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 StworzKlienta;

END OBJECT;



(**********I M P L E M E N T A C J A O B I E K T O W**********)

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

NEW(smo2);

NEW(smo3);

Kol1:=kol1;

Kol2:=kol2;

Kol3:=kol3;

Smo1:=smo1;

Smo2:=smo2;

Smo3:=smo3;

background image

Projekt - Podstawy Symulacji

Strona 11

Gen := gen;

MaxZgl:=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 Start;

BEGIN

TELL Gen TO StworzKlienta;

TELL Smo1 TO Obslugiwanie;

TELL Smo2 TO Obslugiwanie;

TELL Smo3 TO Obslugiwanie;

END METHOD;


ASK METHOD ZwiekszWyg;

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


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

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

END METHOD;


ASK METHOD ZmienCzasWeDoKol (IN czas:REAL);

BEGIN

background image

Projekt - Podstawy Symulacji

Strona 12

CzasWeDoKol := czas;

END METHOD;

END OBJECT;

(*******KOLEJKA FIFO**********)
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 znajduje sie w kolejce FIFO");

TELL klient TO Niecierpliwosc;

INC(MONKol1Zgl);

ASK Smo TO Release;

END METHOD;


ASK METHOD Usun(IN klient: KlientObj);

BEGIN

ASK SELF TO RemoveThis(klient);

DISPOSE (klient);

DEC(MONKol1Zgl);

END METHOD;

END OBJECT;

(********KOLEJKA LIFO********)
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 znajduje sie w kolejce LIFO");

TELL klient TO Niecierpliwosc;

INC(MONKol2Zgl);

ASK Smo TO Release;

END IF;

END METHOD;


ASK METHOD Usun (IN klient: KlientObj);

BEGIN

ASK SELF TO RemoveThis(klient);

DISPOSE(klient);

DEC(MONKol2Zgl);

END METHOD;

END OBJECT;

(*******KOLEJKA PRIORYTETOWA*******)
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 znajduje sie w kolejce PRIORYTETOWEJ");

TELL klient TO Niecierpliwosc;

INC(MONKol3Zgl);

ASK Smo TO Release;

END METHOD;


ASK METHOD Usun (IN klient : KlientObj);

BEGIN

ASK SELF TO RemoveThis(klient);

DISPOSE (klient);

DEC (MONKol3Zgl);

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 O ROZKLADZIE TROJKATNYM********)
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;

background image

Projekt - Podstawy Symulacji

Strona 13

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 znajduje sie w SMO3");

INC(MONZajKanalSMO3);

INC(IloscZajetych);

klient := ASK KolejkaPrzed TO Remove;

ASK SELF TO Release;

Interrupt (klient,"Niecierpliwosc");

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

WAIT DURATION(t);

END WAIT;

MONCzasPrzebywSMO3 := SimTime -klient.CzasWeDoKol;

OUTPUT("Klient obsluzony w 3 gniezdzie");

INC(MONKol3Wyj);

IF (ASK klient TO P3)>= 50.0

ASK klient TO ZmienPstwo;

ASK KolejkaZa TO Dodaj(klient);

ELSE

MONCzasPrzebyw := SimTime-klient.CzasWe;

DISPOSE(klient);

OUTPUT("!!!KLIENT OPUSCIL SYSTEM!!!");

END IF;

DEC(IloscZajetych);

DEC(MONZajKanalSMO3);

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 O ROZKLADZIE NORMALNYM**********)
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(MONZajKanalSMO1);

INC(IloscZajetych);

klient := ASK KolejkaPrzed TO Remove;

Interrupt(klient,"Niecierpliwosc");

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

WAIT DURATION(t);

END WAIT;

MONCzasPrzebywSMO1 := SimTime-klient.CzasWeDoKol;

OUTPUT("Klient obsluzony w 1 gniezdzie");

INC(MONKol1Wyj);

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

ELSE

background image

Projekt - Podstawy Symulacji

Strona 14

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 O ROZKLADZIE JEDNOSTAJNYM**********)
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(MONZajKanalSMO2);

INC(IloscZajetych);

klient := ASK KolejkaPrzed TO Remove;

Interrupt(klient, "Niecierpliwosc");

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

WAIT DURATION(t);

END WAIT;

MONCzasPrzebywSMO2 := SimTime- klient.CzasWeDoKol;

MONCzasPrzebyw := SimTime -klient.CzasWe;

OUTPUT("Klient obsluzony w 2 gniezdzie");

INC(MONKol2Wyj);

IF (ASK klient TO P2)>= 80.0

ASK klient TO ZmienPstwo;

ASK KolejkaZa TO Dodaj(klient);

ELSE

MONCzasPrzebyw := SimTime-klient.CzasWe;

DISPOSE(klient);

OUTPUT("!!!KLIENT OPUSCIL SYSTEM!!!");

END IF;

DEC(IloscZajetych);

DEC(MONZajKanalSMO2);

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 O ROZKLADZIE ERLANGA*********)
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 StworzKlienta;

VAR

t: REAL;

klient1,klient2,klient3 : KlientObj;

BEGIN

WHILE System.IloscWygen < System.MaxZgl-1

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

WAIT DURATION(t);

END WAIT;

NEW(klient1);

ASK System TO ZwiekszWyg;

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,

background image

Projekt - Podstawy Symulacji

Strona 15

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

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

OUTPUT("***Ilosc klientow: ");

INPUT(maxzgl);

OUTPUT("Dlugosc kolejki:");

INPUT(dlkol2);

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

INPUT(g1);

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

INPUT(g2);

OUTPUT("***Pierwszy parametr dla SMO o rozkladzie Normalnym: ");

INPUT(r);

OUTPUT("Drugi parametr dla SMO o rozkladzie Normalnym: ");

INPUT(i);


OUTPUT("***Pierwszy parametr dla SMO o rozkladzie Jednostajnym:");

INPUT(a);

OUTPUT("Drugi parametr dla SMO o rozkladzie Jednostajnym:");

INPUT(b);

OUTPUT("***Pierwszy (min) parametr dla SMO o rozkladzie Trojkatnym:

");

INPUT(j);

OUTPUT("Drugi (mean) parametr dla SMO o rozkladzie Trojkatnym: ");

INPUT(k);

OUTPUT("***Trzeci (max) parametr dla SMO o rozkladzie Trojkatnym: ");

INPUT(l);

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

OUTPUT("S T A R T 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 Start;

StartSimulation;

StopSimulation;

M1:=GETMONITOR(MONCzasPrzebyw,RStatObj);

M2:=GETMONITOR(MONCzasPrzebywSMO1,RStatObj);

M3:=GETMONITOR(MONCzasPrzebywSMO2,RStatObj);

M4:=GETMONITOR(MONCzasPrzebywSMO3,RStatObj);

M5:=GETMONITOR(MONZajKanalSMO1,ITimedStatObj);

M6:=GETMONITOR(MONZajKanalSMO2,ITimedStatObj);

M7:=GETMONITOR(MONZajKanalSMO3,ITimedStatObj);

M8:=GETMONITOR(MONKol1Zgl,ITimedStatObj);

M9:=GETMONITOR(MONKol2Zgl,ITimedStatObj);

M10:=GETMONITOR(MONKol3Zgl,ITimedStatObj);

M12:=GETMONITOR(MONKol1Wyj, ITimedStatObj);

M13:=GETMONITOR(MONKol2Wyj, ITimedStatObj);

M14:=GETMONITOR(MONKol3Wyj, ITimedStatObj);

M11:=GETMONITOR(Niecierpliwi,ITimedStatObj);

OUTPUT(" ");

OUTPUT("*************************************************************

*****");

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

OUTPUT("*************************************************************

*****");

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

M1 TO Mean,"; Odchylenie standardowe: ",ASK M1 TO StdDev);

OUTPUT("Sredni czas przebywania zgloszenia w SMO1 wynosi: ",ASK M2 TO

Mean,"; Odchylenie standardowe: ", ASK M2 TO StdDev);

OUTPUT("Sredni czas przebywania zgloszenia w SMO2 wynosi: ",ASK M3 TO

Mean,"; Odchylenie standardowe: ", ASK M3 TO StdDev);

OUTPUT("Sredni czas przebywania zgloszenia w SMO3 wynosi: ",ASK M4 TO

Mean,"; Odchylenie standardowe: ", ASK M4 TO StdDev);

OUTPUT("*************************************************************

*****");

OUTPUT("Srednia liczba zajetych kanalow w SMO1 wynosi: ",ASK M5 TO

Mean,"; Odchylenie standardowe: ", ASK M5 TO StdDev);

OUTPUT("Srednia liczba zajetych kanalow w SMO2 wynosi: ",ASK M6 TO

Mean,"; Odchylenie standardowe: ", ASK M6 TO StdDev);

background image

Projekt - Podstawy Symulacji

Strona 16

OUTPUT("Srednia liczba zajetych kanalow w SMO3 wynosi: ",ASK M7 TO

Mean,"; Odchylenie standardowe: ", ASK M7 TO StdDev);

OUTPUT("*************************************************************

*****");

OUTPUT("Srednia liczba zgloszen w kolejce FIFO wynosi: ",ASK M8 TO

Mean,"; Odchylenie standardowe: ", ASK M8 TO StdDev);

OUTPUT("Srednia liczba zgloszen w kolejce LIFO wynosi: ",ASK M9 TO

Mean,"; Odchylenie standardowe: ", ASK M9 TO StdDev);

OUTPUT("Srednia liczba zgloszen w kolejce priorytetowej wynosi: ",ASK

M10 TO Mean,"; Odchylenie standardowe: ", ASK M10 TO StdDev);

OUTPUT("*************************************************************

*****");

OUTPUT("Prawdopodobienstwo obsluzenia zgloszenia w SMO1: ",ASK M12 TO

Mean / ASK M8 TO Mean);

OUTPUT("Prawdopodobienstwo obsluzenia zgloszenia w SMO2: ",ASK M13 TO

Mean / ASK M9 TO Mean);

IF (ASK M10 TO Mean) > 0.0

OUTPUT("Prawdopodobienstwo obsluzenia zgloszenia w SMO3: ",ASK M14 TO

Mean / ASK M10 TO Mean);

ELSE

OUTPUT("Prawdopodobienstwo obsluzenia 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.


Wyszukiwarka

Podobne podstrony:
I7G2S1 Zachwieja Cezary PSy projekt (1)
I7G2S1 Kolodziejski Lukasz psy
I0H1S4 Kamil Piersa spr lab3 docx
Michniewicz Kamil I7G2S1 PSy sprawozdanie
I0E1S1 Kamil Maślanka Projekt PSy, I0E1S1 Kamil Maślanka sprawozdanie projekt, Microsoft Word - spra
I7G2S1 Piersa Sdial cw2 3
spr lab 4 Piersa Kamil I0H1S4
El¾bieta Okniäska I7G2S1 PSY
I7G2S1 PSy Socha Marcin
PSy Piesiak Piotr I7G2S1 spr
Ukladanie dawki bytowej psy
Program zajęć ED, aaa, studia 22.10.2014, Materiały od Piotra cukrownika, materialy Kamil, Szkoła, L
leptospiroza psy, weterynaria, zakaźne, psy i koty
EDi4 2-lista 2004, aaa, studia 22.10.2014, Materiały od Piotra cukrownika, materialy Kamil, Szkoła,
CHOROBY ZAKAŹNE PSY i KOTY – egzamin czerwiec 13 r I termin
[I7G2S1] Sprawozdanie nr 2
Fascynujące psy

więcej podobnych podstron