Michniewicz Kamil I7G2S1 PSy sprawozdanie

background image

Wojskowa Akademia Techniczna

im. Jarosława Dąbrowskiego w Warszawie

Podstawy Symulacji

Sprawozdanie

Prowadzący:

dr inż. Jarosław Rulka

Wykonał:

Kamil Michniewicz

Grupa:

I7G2S1

background image

Zadanie laboratoryjne 3

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

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;

b)

rozkład zmiennych O

i

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

c)

L

i

: (nrDz + i) mod 2 + 1;

d)

AL

i

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

e)

R

j

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

f)

M

i

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

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
1.5. Trójkątny
1.6. Weibulla

2. Długości kolejek pojedynczych SMO

2.1. ograniczone (możliwe straty)
2.2. nieograniczone
1.1.

3. Algorytm kolejek:

1.1. FIFO
1.2. LIFO
1.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.

Program powinien umożliwić oszacowanie następujących charakterystyk granicznych systemu oraz poszczególnych

SMO

O

2

SMO

O

3

SMO

O

1

T

1

p

2

p

3

T

2

background image

SMO:

czas przebywania zgłoszenia (średnia, odchylenie standardowe),

liczbę zgłoszeń (średnia, odchylenie standardowe),

liczbę zajętych kanałów (średnia, odchylenie standardowe),

liczbę zgłoszeń w kolejce (średnia, odchylenie standardowe).

prawdopodobieństwo obsłużenia zgłoszenia.

W sprawozdaniu należy zawrzeć:

kod źródłowy programu (z komentarzem);

opis metody wyznaczania charakterystyk (sposób realizacji, wzory estymatorów);

Zadanie zrealizować w języku MODSIM II.
Termin rozliczenia się z realizacji zadania na ostatnich zajęciach laboratoryjnych.

Zgodnie z moim numerem w grupie (3) wyliczyłem parametry zadania:

Generator:
T

1

– rozkład trójkątny

T

2

– rozkład Weibulla

Gniazdo:
O

1

- rozkład Weibulla

O

2

- rozkład Wykładniczy

O

3

- rozkład Erlanga

Wielkość paczki:
R

1

- 1

R

2

- 2

R

3

-

3

Algorytmy kolejek:
AL 1 - z priorytetami
AL 2 - FIFO
AL 3 – LIFO

Długość kolejek:
L1 - 1
L2 - 2
L3 - 1

Liczba stanowisk obsługi:
M1 - 3
M2 - 4
M3 - 1

background image

Przykładowe wyświetlane kominikaty:

Wyswietlac komunikaty T / N
t

Dane pobrane z pliku wejsciowego

ROZPOCZECIE SYMULACJI

Generator 1 wygenerowal klienta 1
Klient numer 1 wszedl do kolejki gniazda 1
Klient numer 1 wchodzi do gniazda 1 0
Generator 2 wygenerowal klienta 2
Klient numer 2 wszedl do kolejki gniazda 3
Generator 2 wygenerowal klienta 3
Klient numer 3 wszedl do kolejki gniazda 3
Klient numer 3 wchodzi do gniazda 3 1
Klient numer 1 zostal obsluzony przez gniazdo 1
Klient numer 1 wchodzi do kolejki gniazda 2
Klient numer 1 wchodzi do gniazda 2 0
Generator 1 wygenerowal klienta 4
Klient numer 4 wszedl do kolejki gniazda 1
Klient numer 4 wchodzi do gniazda 1 0
Klient numer 2 zrezygnowal w kolejce 3
Klient numer 2 zostal nieobsluzony i opuszcza system
-Klient numer 3 zostal obsluzony przez gniazdo 3
Klient numer 3 zostal obsluzony i opuscil system
Liczba obsluzonych klientow : 1
-Klient numer 1 zostal obsluzony przez gniazdo 2
Klient numer 1 zostal obsluzony i opuscil system
Liczba obsluzonych klientow : 2
Generator 2 wygenerowal klienta 5
Klient numer 5 wszedl do kolejki gniazda 3
Generator 2 wygenerowal klienta 6
Klient numer 6 wszedl do kolejki gniazda 3
Klient numer 6 wchodzi do gniazda 3 1
Generator 1 wygenerowal klienta 7
Klient numer 7 wszedl do kolejki gniazda 1
Klient numer 7 wchodzi do gniazda 1 0
Klient numer 4 zostal obsluzony przez gniazdo 1
Klient numer 4 wchodzi do kolejki gniazda 2
Klient numer 4 wchodzi do gniazda 2 0
Klient numer 5 zrezygnowal w kolejce 3
Klient numer 5 zostal nieobsluzony i opuszcza system
Klient numer 7 zostal obsluzony przez gniazdo 1
Klient numer 7 wchodzi do kolejki gniazda 2
Klient numer 7 wchodzi do gniazda 2 0
-Klient numer 6 zostal obsluzony przez gniazdo 3
Klient numer 6 zostal obsluzony i opuscil system
Liczba obsluzonych klientow : 3
Generator 1 wygenerowal klienta 8
Klient numer 8 wszedl do kolejki gniazda 1
Klient numer 8 wchodzi do gniazda 1 0
-Klient numer 4 zostal obsluzony przez gniazdo 2

background image

Klient numer 4 zostal obsluzony i opuscil system
Liczba obsluzonych klientow : 4
Klient numer 8 zostal obsluzony przez gniazdo 1
Klient numer 8 wchodzi do kolejki gniazda 2
Klient numer 8 wchodzi do gniazda 2 0
-Klient numer 8 zostal obsluzony przez gniazdo 2
Klient numer 8 zostal obsluzony i opuscil system
Liczba obsluzonych klientow : 5
-Klient numer 7 zostal obsluzony przez gniazdo 2
Klient numer 7 zostal obsluzony i opuscil system
Liczba obsluzonych klientow : 6

Plik wynikowy:

WYNIKI:
Czas przebywania zgloszenia w systemie:
srednia: 4.306
odchylenie: 2.965

Czas przebywania zgloszenia w SMO-1:
srednia: 2.981
odchylenie: 1.563

Czas przebywania zgloszenia w SMO-2:
srednia: 2.462
odchylenie: 2.133

Czas przebywania zgloszenia w SMO-3:
srednia: 2.513
odchylenie: 1.792

Liczba klientow w systemie:
srednia: 2.187
odchylenie: 1.349

Liczba kanalow zajetych w gniezdzie O1:
srednia: 0.841
odchylenie: 0.590

Liczba kanalow zajetych w gniezdzie O2:
srednia: 0.695
odchylenie: 0.772

Liczba kanalow zajetych w gniezdzie O3:
srednia: 0.426
odchylenie: 0.494

Liczba klientow w SMO1 (Priorytetowa):
srednia: 0.000
odchylenie: 0.000

Liczba klientow w SMO2 (FIFO):
srednia: 0.000
odchylenie: 0.000

Liczba klientow w SMO3 (LIFO):
srednia: 0.226
odchylenie: 0.418

Prawdopodobienstwo obsluzenia klienta w systemie: 0.750

background image

Dane wejściowe:

Param gen1
1.2
3.0
5.6
3
Param gen2
3.5
7.8
5
Param gniazda1
7.5
3.8
Prama gniazda2
2.6
Param gniazda3
4.6
1.4
Dlugosc kolejki1
20
Dlugosc kolejki3
20
ilosc klientow
5
pstwo1
0.0
pstwo2
0.0

background image

Kod programu:

MAIN MODULE KM;

FROM GrpMod IMPORT StatQueueObj, StatStackObj, StatRankedObj, BStatGroupObj;
FROM IOMod IMPORT ReadKey, StreamObj, ALL FileUseType; {Output, Input, InOut, Append}
FROM RandMod IMPORT RandomObj, FetchSeed;
FROM StatMod IMPORT SINTEGER, RStatObj, SREAL, TSINTEGER, ITimedStatObj;
FROM SimMod IMPORT StartSimulation, StopSimulation, SimTime, TriggerObj, Interrupt;

TYPE

SystemObj = OBJECT; FORWARD;
KlientObj = OBJECT; FORWARD;
KolejkaObj = OBJECT; FORWARD;
GniazdoObj = OBJECT; FORWARD;
GeneratorObj = OBJECT; FORWARD;

{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
SystemObj = OBJECT

IloscZgloszen : TSINTEGER;
CzasPrzebywaniaWSystemie : SREAL;

LiczbaWygenerowanych : INTEGER;

ZgloszeniaObsluzone : INTEGER;
KE : BOOLEAN;

ASK METHOD Start(IN WKE : BOOLEAN);
ASK METHOD Inc();
ASK METHOD CzasWejscia(IN WKlient:KlientObj);
ASK METHOD CzasWyjscia(IN WKli:KlientObj;IN Obsluzony:BOOLEAN);

END OBJECT;
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
KlientObj = OBJECT

CzasWejS : REAL;
CzasWejK : REAL;
Nr : INTEGER;
Priorytet : INTEGER;

KE : BOOLEAN;

ASK METHOD Start(IN WVIP:INTEGER;IN WID:INTEGER; IN WKE : BOOLEAN);

ASK METHOD CzasWejscia(IN WSys:INTEGER; IN WKol:INTEGER);
TELL METHOD Czeka(IN WSys: SystemObj; IN WKol:KolejkaObj;IN WCzasCzekania:REAL);

END OBJECT;
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}

GeneratorObj=OBJECT(RandomObj)

System : SystemObj;

NrRozkladu : INTEGER;

PR1 : REAL;

PR2 : REAL;

PR3 : REAL;

Kolejka : KolejkaObj;

Wygen, MaWygen : INTEGER;

Paczka : INTEGER;
KE : BOOLEAN;
TriggerGeneratora : TriggerObj;

background image

ASK METHOD Start(IN WSys:SystemObj; IN WNrRoz:INTEGER; IN WGP1:REAL; IN WGP2:REAL;

IN WGP3:REAL; IN WKol:KolejkaObj; IN WMaxWyg:INTEGER; IN

WPaczka:INTEGER;

IN WKE: BOOLEAN; IN WTriggerGen : TriggerObj);

TELL METHOD Generuj();

END OBJECT;
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
KolejkaObj = OBJECT

System : SystemObj;

Gniazdo : GniazdoObj;

Typ : INTEGER;

Rozmiar : INTEGER;

LK : TSINTEGER;

Kolejka : BStatGroupObj;
KE : BOOLEAN;
TriggerGniazda, TriggerGeneratora : TriggerObj;

ASK METHOD Start(IN WSys:SystemObj; IN WGniazdo:GniazdoObj; IN WTyp:INTEGER; IN

WRozmiar:INTEGER;

IN KE : BOOLEAN; IN WTriggerGni : TriggerObj; IN WTriggerGen : TriggerObj);

ASK METHOD Dodaj(IN WSys:SystemObj;IN WKli:KlientObj);

ASK METHOD Usun(IN WKli:KlientObj):KlientObj;

END OBJECT;
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
GniazdoObj = OBJECT

RandomGen : RandomObj;

System : SystemObj;

Rozklad : INTEGER;


CzasWSMO : SREAL;

IloscOkienek, ZajetychOkienek : TSINTEGER;

KolejkaWY, KolejkaWE : KolejkaObj;

PP : REAL;

{prawd petli}

PR1, PR2, PR3 : REAL; {par rozkladu}
KE : BOOLEAN;
TriggerGniazda : TriggerObj;
TriggerGeneratora : TriggerObj;
Dziala : BOOLEAN;

ASK METHOD Start(IN WSeed:INTEGER;IN WSys:SystemObj; IN WRozklad:INTEGER; IN
WIloscOkienek:INTEGER;

IN WKolejkaWY:KolejkaObj; IN WKolejkaWE:KolejkaObj; IN WPR1:REAL; IN WPR2:REAL;
IN WPR3:REAL; IN WPP:REAL; IN WKE : BOOLEAN; IN WTrigger : TriggerObj;
IN WTrigger2 : TriggerObj);

TELL METHOD Obsluz();

TELL METHOD Koniec();

END OBJECT;
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
KPriorytetowaObj = OBJECT(StatRankedObj)

OVERRIDE

ASK METHOD Rank(IN WKl1 : ANYOBJ; IN WKl2 : ANYOBJ) : INTEGER;

END OBJECT;

{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}

background image

{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
OBJECT KolejkaObj;

ASK METHOD Start(IN WSys:SystemObj; IN WGniazdo:GniazdoObj; IN WTyp:INTEGER; IN

WRozmiar:INTEGER;

IN WKE : BOOLEAN; IN WTriggerGni : TriggerObj; IN WTriggerGen : TriggerObj);

VAR

KolejkaLIFO : StatStackObj;
KolejkaPrior : KPriorytetowaObj;
KolejkaFIFO : StatQueueObj;

BEGIN

System := WSys;
Gniazdo := WGniazdo;
Typ := WTyp;
LK := 0;
Rozmiar := WRozmiar;
KE := WKE;
TriggerGniazda := WTriggerGni;
TriggerGeneratora := WTriggerGen;


CASE WTyp

WHEN 1:

NEW(KolejkaPrior); Kolejka := KolejkaPrior;

WHEN 2:

NEW(KolejkaFIFO); Kolejka := KolejkaFIFO;

WHEN 3:

NEW(KolejkaLIFO); Kolejka := KolejkaLIFO;
END CASE;

END METHOD;

{----------------------------------------------------------------------------}

ASK METHOD Dodaj(IN WSys:SystemObj;IN WKli:KlientObj);
VAR

CzasCzekania : REAL;

BEGIN

CASE ASK SELF TO Typ

WHEN 1:

CzasCzekania := 0.0;

WHEN 2:

CzasCzekania := 1.0;

WHEN 3:

CzasCzekania := 2.0;
END CASE;

IF Rozmiar > 0

IF LK < Rozmiar

ASK WKli TO CzasWejscia(0,1);
ASK Kolejka TO Add(WKli);
TELL WKli TO Czeka(WSys,SELF,CzasCzekania);

IF (KE)

OUTPUT("Klient numer ",ASK WKli TO Nr," wszedl do kolejki

gniazda ",ASK SELF TO Typ);

END IF;

INC(LK);
ASK TriggerGniazda TO Release;

ELSE

background image

IF (KE)

OUTPUT("Klient numer ",ASK WKli TO Nr," nie wszedl do pelnej

kolejki gniazda ",ASK SELF TO Typ);

END IF;
ASK System TO CzasWyjscia(WKli,FALSE);

END IF;

ELSE

ASK WKli TO CzasWejscia(0,1);
ASK Kolejka TO Add(WKli);

IF (KE)

OUTPUT("Klient numer ",ASK WKli TO Nr," wchodzi do kolejki gniazda

",ASK SELF TO Typ);

END IF;

INC(LK);
ASK TriggerGniazda TO Release;

END IF;

END METHOD;
{----------------------------------------------------------------------------}
ASK METHOD Usun(IN WKli:KlientObj):KlientObj;
VAR

PomKlient : KlientObj;

BEGIN

IF LK > 0

IF WKli = NILOBJ

PomKlient:=ASK Kolejka TO Remove();
DEC(LK);
IF (KE)

OUTPUT("Klient numer ",ASK PomKlient TO Nr," wchodzi do

gniazda ",ASK SELF TO Typ," ", ASK SELF TO LK);

END IF;

ELSE

ASK Kolejka TO RemoveThis(WKli);
DEC(LK);
PomKlient:=WKli;

IF (KE)

OUTPUT("Klient numer ",ASK PomKlient TO Nr," zrezygnowal w

kolejce ",ASK SELF TO Typ);

END IF;

END IF;

IF (TriggerGeneratora <> NILOBJ)

ASK TriggerGeneratora TO Release();

END IF;
RETURN PomKlient;

ELSE

RETURN NILOBJ;

END IF;

END METHOD;

END OBJECT;
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
OBJECT KlientObj;

ASK METHOD Start(IN WVIP:INTEGER;IN WID:INTEGER; IN WKE : BOOLEAN);
BEGIN

CzasWejS := 0.0;
CzasWejK := 0.0;
Priorytet := WVIP;
Nr := WID;

background image

KE := WKE;

END METHOD;
{----------------------------------------------------------------------------}
ASK METHOD CzasWejscia(IN WSys:INTEGER;IN WKol:INTEGER); {ustawienie czasu wejścia do
systemu lub kolejki}

BEGIN

IF WSys = 1

CzasWejS := SimTime;

END IF;
IF WKol = 1

CzasWejK := SimTime;

END IF;

END METHOD;
{----------------------------------------------------------------------------}
TELL METHOD Czeka(IN WSys: SystemObj; IN WKol:KolejkaObj; IN WCzasCzekania:REAL);

VAR

pom:KlientObj;

BEGIN

IF WCzasCzekania > 0.0;

WAIT DURATION WCzasCzekania;

pom := ASK WKol TO Usun(SELF);

ASK WSys TO CzasWyjscia(SELF, FALSE);

ON INTERRUPT;
END WAIT;

END IF;

END METHOD;

END OBJECT;
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}

OBJECT GeneratorObj;

ASK METHOD Start(IN WSys:SystemObj; IN WNrRoz:INTEGER; IN WGP1:REAL; IN WGP2:REAL;

IN WGP3:REAL; IN WKol:KolejkaObj; IN WMaxWyg:INTEGER; IN

WPaczka:INTEGER;

IN WKE: BOOLEAN; IN WTriggerGen : TriggerObj);

BEGIN

PR1 := WGP1;
PR2 := WGP2;
PR3 := WGP3;
Kolejka := WKol;
Wygen := 1;
NrRozkladu := WNrRoz;
MaWygen := WMaxWyg;
Paczka:= WPaczka;
System := WSys;

KE := WKE;
TriggerGeneratora := WTriggerGen;

END METHOD;

{----------------------------------------------------------------------------}

TELL METHOD Generuj();

VAR

Czas : REAL;
Prior, PaczkaZgloszen, i : INTEGER;
Klient : KlientObj;

BEGIN

WHILE Wygen < MaWygen

Prior := ASK SELF TO UniformInt(1,10);

{losowanie priorytetu klienta}

PaczkaZgloszen:= ASK SELF TO UniformInt (1,Paczka);
CASE NrRozkladu

background image

WHEN 1:

Czas := ASK SELF TO Triangular(PR1, PR2, PR3);

WHEN 2:

Czas := ASK SELF TO Weibull(PR1, PR2);

END CASE;
IF Czas<0.0

Czas:=ABS(Czas);

END IF;

WAIT DURATION Czas
END WAIT;

FOR i:=1 TO Paczka

NEW(Klient);

ASK System TO Inc();
ASK Klient TO Start(Prior, ASK System TO LiczbaWygenerowanych, KE);
ASK System TO CzasWejscia(Klient);
IF (KE)

OUTPUT ("Generator ",NrRozkladu," wygenerowal klienta ",ASK

Klient TO Nr);

END IF;
ASK Kolejka TO Dodaj(System, Klient);
INC(Wygen);

END FOR;

END WHILE;

END METHOD;

END OBJECT;
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
OBJECT SystemObj;

ASK METHOD Start(IN WKE : BOOLEAN);

BEGIN

CzasPrzebywaniaWSystemie:= 0.0;
IloscZgloszen := 0;
ZgloszeniaObsluzone := 0;
LiczbaWygenerowanych := 0;
KE := WKE;

END METHOD;

{----------------------------------------------------------------------------}
ASK METHOD CzasWejscia(IN WKlient : KlientObj);

BEGIN

ASK WKlient TO CzasWejscia(1,0);
INC(IloscZgloszen);

END METHOD;
{----------------------------------------------------------------------------}

ASK METHOD CzasWyjscia(IN WKli:KlientObj; IN Obsluzony:BOOLEAN);

BEGIN

CzasPrzebywaniaWSystemie := (SimTime - (ASK WKli TO CzasWejS));
IF Obsluzony

INC(ZgloszeniaObsluzone);

IF (KE)

OUTPUT("Klient numer ", ASK WKli TO Nr," zostal obsluzony i opuscil

system");

OUTPUT("Liczba obsluzonych klientow : ",ASK SELF TO

ZgloszeniaObsluzone);

END IF;

ELSE

background image

IF (KE)

OUTPUT("Klient numer ", ASK WKli TO Nr," zostal nieobsluzony i opuszcza

system");

END IF;

END IF;
DEC(IloscZgloszen);

END METHOD;

ASK METHOD Inc();

BEGIN

INC(LiczbaWygenerowanych);

END METHOD;

END OBJECT;
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
OBJECT GniazdoObj;

ASK METHOD Start(IN WSeed:INTEGER;IN WSys:SystemObj; IN WRozklad:INTEGER; IN

WIloscOkienek:INTEGER;

IN WKolejkaWY:KolejkaObj; IN WKolejkaWE:KolejkaObj; IN WPR1:REAL; IN WPR2:REAL;
IN WPR3:REAL; IN WPP:REAL; IN WKE : BOOLEAN; IN WTrigger : TriggerObj;
IN WTrigger2 : TriggerObj);
VAR

Tmp : INTEGER;

BEGIN

System := WSys;
Rozklad := WRozklad;
IloscOkienek:= WIloscOkienek;
KolejkaWY := WKolejkaWY;
KolejkaWE := WKolejkaWE;
PP := WPP;
PR1:= WPR1;
PR2 := WPR2;
PR3 := WPR3;

ZajetychOkienek := 0;

CzasWSMO := 0.0;
NEW(RandomGen);
ASK RandomGen TO SetSeed(WSeed);
KE := WKE;
TriggerGniazda := WTrigger;
TriggerGeneratora := WTrigger2;

FOR Tmp:=0 TO IloscOkienek-1

TELL SELF TO Obsluz();

END FOR;

END METHOD;

{----------------------------------------------------------------------------}

TELL METHOD Obsluz();

VAR

Czas : REAL;
Obslugiwany : KlientObj;

BEGIN

Dziala := TRUE;
WHILE (Dziala)

WAIT FOR TriggerGniazda TO Fire;
ON INTERRUPT
END WAIT;

WHILE (((ASK KolejkaWE TO LK) > 0) AND (IloscOkienek > ZajetychOkienek))

background image

INC(ZajetychOkienek);
CASE Rozklad

WHEN 1:
Czas := ASK RandomGen TO Weibull(PR1,PR2);

WHEN 2:
Czas := ASK RandomGen TO Exponential(PR1);
WHEN 3:
Czas := ASK RandomGen TO Normal(PR1,PR2);

END CASE;

Obslugiwany := ASK KolejkaWE TO Usun(NILOBJ);

Interrupt(Obslugiwany, "Czeka");
WAIT DURATION ABS(Czas);
END WAIT;

CzasWSMO := SimTime - (ASK Obslugiwany TO CzasWejK);

IF ASK RandomGen TO Sample() > PP;

IF (ASK SELF TO Rozklad=1)

IF (KE)

OUTPUT("Klient numer ",ASK Obslugiwany TO Nr," zostal

obsluzony przez gniazdo ",ASK SELF TO Rozklad );

END IF;

IF (TriggerGeneratora <> NILOBJ)

IF ((ASK KolejkaWY TO LK = ASK KolejkaWY TO Rozmiar)

AND (ASK KolejkaWY TO Rozmiar<>0))

IF (KE)

OUTPUT ("Gniazdo numer ",ASK SELF TO

Rozklad," zablokowane.");

END IF;

WAIT FOR TriggerGeneratora TO Fire();

END WAIT;

END IF;

END IF;

ASK KolejkaWY TO Dodaj(System, Obslugiwany);
ELSE

IF (KE)

OUTPUT("-Klient numer ",ASK Obslugiwany TO Nr," zostal

obsluzony przez gniazdo ",ASK SELF TO Rozklad);

END IF;
ASK System TO CzasWyjscia(Obslugiwany, TRUE);

END IF;
DEC(ZajetychOkienek);

ELSE

IF (KE)

OUTPUT("Klient numer", ASK Obslugiwany TO Nr," wraca do

Gniazda",

ASK SELF TO Rozklad,".");

END IF;
ASK KolejkaWE TO Dodaj(System, Obslugiwany);

DEC(ZajetychOkienek);

END IF;

END WHILE;

END WHILE;

END METHOD;

{----------------------------------------------------------------------------}

TELL METHOD Koniec();
VAR

Tmp : INTEGER;

BEGIN

{IF((ASK SELF TO ZajetychOkienek=0) AND (ASK KolejkaWE TO LK=0) AND (ASK

background image

KolejkaWY TO LK=0))}

Dziala:= FALSE;

{END IF;}

WAIT DURATION 0.0

ASK TriggerGniazda TO InterruptTrigger;

END WAIT;

END METHOD;

END OBJECT;
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
OBJECT KPriorytetowaObj;

ASK METHOD Rank(IN a,b : ANYOBJ) : INTEGER; {Porownywanie priorytetow dwoch klientow}

VAR

Klient1 : KlientObj;
Klient2 : KlientObj;

BEGIN

Klient1 := a;
Klient2 := b;
IF ASK Klient1 TO Priorytet < ASK Klient2 TO Priorytet

RETURN -1;

END IF;
IF ASK Klient1 TO Priorytet > ASK Klient2 TO Priorytet

RETURN 1;

END IF;
RETURN 0;

END METHOD;

END OBJECT;

{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}
{----------------------------------------------------------------------------}

VAR
System : SystemObj;
Generator1, Generator2 : GeneratorObj;
Gniazdo1, Gniazdo2, Gniazdo3 : GniazdoObj;

KolejkaLIFO, KolejkaPrior, KolejkaFIFO : KolejkaObj;

wybor : CHAR;
TriggerG1, TriggerG2, TriggerG3, TriggerBlokujacy : TriggerObj;

G1min,G1mean,G1max,G2shape,G2scale,Gn1shape,Gn1scale,Gn2z,Gn3a,Gn3b,p1,p2,PrawdopodObslu
zenia:REAL;
G1Seed,G2Seed,DK1,DK3,ilosc:INTEGER;
Plik : StreamObj;
Tekst : STRING;
KE: BOOLEAN;

MonCzas, MonCzasSMO1, MonCzasSMO2, MonCzasSMO3 : RStatObj;

MonLiczbaZgloszenSys, MonLiczbaZajetychGn1, MonLiczbaZajetychGn2,
MonLiczbaZajetychGn3, MonZgloszenWKolejce1, MonZgloszenWKolejce2,
MonZgloszenWKolejce3 : ITimedStatObj;


background image


BEGIN

OUTPUT("Wyswietlac komunikaty T / N ");

wybor := ReadKey();
OUTPUT("");

KE := TRUE;

IF ((wybor = 'n') OR (wybor = 'N'))

KE := FALSE;

ELSIF ((wybor = 't') OR (wybor = 'T'))

KE := TRUE;

END IF;

NEW(Plik);

ASK Plik TO Open("in.txt",Input);

ASK Plik TO ReadLine(Tekst);
ASK Plik TO ReadReal(G1min); ASK Plik TO ReadLine(Tekst);
ASK Plik TO ReadReal(G1mean);ASK Plik TO ReadLine(Tekst);
ASK Plik TO ReadReal(G1max);ASK Plik TO ReadLine(Tekst);
ASK Plik TO ReadInt(G1Seed);ASK Plik TO ReadLine(Tekst);
OUTPUT(Tekst) ;
ASK Plik TO ReadLine(Tekst);
ASK Plik TO ReadReal(G2shape); ASK Plik TO ReadLine(Tekst);
ASK Plik TO ReadReal(G2scale);ASK Plik TO ReadLine(Tekst);
ASK Plik TO ReadInt(G2Seed);ASK Plik TO ReadLine(Tekst);

OUTPUT(Tekst) ;
ASK Plik TO ReadLine(Tekst);

ASK Plik TO ReadReal(Gn1shape); ASK Plik TO ReadLine(Tekst);
ASK Plik TO ReadReal(Gn1scale);ASK Plik TO ReadLine(Tekst);
OUTPUT(Tekst) ;
ASK Plik TO ReadLine(Tekst);
ASK Plik TO ReadReal(Gn2z); ASK Plik TO ReadLine(Tekst);

OUTPUT(Tekst) ;
ASK Plik TO ReadLine(Tekst);

ASK Plik TO ReadReal(Gn3a); ASK Plik TO ReadLine(Tekst);

ASK Plik TO ReadReal(Gn3b); ASK Plik TO ReadLine(Tekst);
OUTPUT(Tekst) ;
ASK Plik TO ReadLine(Tekst);

ASK Plik TO ReadInt(DK1); ASK Plik TO ReadLine(Tekst);
OUTPUT(Tekst) ;
ASK Plik TO ReadLine(Tekst);
ASK Plik TO ReadInt(DK3); ASK Plik TO ReadLine(Tekst);
OUTPUT(Tekst) ;
ASK Plik TO ReadLine(Tekst);
ASK Plik TO ReadInt(ilosc); ASK Plik TO ReadLine(Tekst);
OUTPUT(Tekst) ;
ASK Plik TO ReadLine(Tekst);
ASK Plik TO ReadReal(p1); ASK Plik TO ReadLine(Tekst);

OUTPUT(Tekst) ;
ASK Plik TO ReadLine(Tekst);
ASK Plik TO ReadReal(p2); ASK Plik TO ReadLine(Tekst);




ASK Plik TO Close();
DISPOSE(Plik);

OUTPUT("Dane pobrane z pliku wejsciowego");

OUTPUT(" ");

OUTPUT("ROZPOCZECIE SYMULACJI");

background image

OUTPUT(" ");

NEW(System);

NEW(Gniazdo1);
NEW(Gniazdo2);
NEW(Gniazdo3);

NEW(KolejkaLIFO);
NEW(KolejkaPrior);
NEW(KolejkaFIFO);

NEW(Generator1);
NEW(Generator2);

NEW(TriggerG1);
NEW(TriggerG2);
NEW(TriggerG3);
NEW(TriggerBlokujacy);


ASK System TO Start(KE);

ASK KolejkaPrior TO Start (System, Gniazdo1, 1, DK1, KE, TriggerG1, TriggerBlokujacy);
ASK KolejkaFIFO TO Start (System, Gniazdo2, 2, 0, KE, TriggerG2, NILOBJ);
ASK KolejkaLIFO TO Start (System, Gniazdo3, 3, DK3, KE, TriggerG3, NILOBJ);

ASK Generator1 TO SetSeed(G1Seed);
ASK Generator1 TO Start(System, 1, G1min, G1mean, G1max, KolejkaPrior, ilosc, 1, KE, NILOBJ);
ASK Generator2 TO SetSeed(G2Seed);
ASK Generator2 TO Start(System, 2, G2shape,G2scale,0.0, KolejkaLIFO, ilosc, 2, KE, NILOBJ);

ASK Gniazdo1 TO Start(1, System, 1, 3, KolejkaFIFO, KolejkaPrior, Gn1shape, Gn1scale, 0.0, 0.0,

KE, TriggerG1, TriggerBlokujacy);

ASK Gniazdo2 TO Start(1, System, 2, 4, NILOBJ, KolejkaFIFO, Gn2z,0.0, 0.0, p1, KE, TriggerG2,

NILOBJ);

ASK Gniazdo3 TO Start(1, System, 3, 1, NILOBJ, KolejkaLIFO, Gn3a,Gn3b , 0.0, p2, KE,

TriggerG3, NILOBJ);

TELL Generator1 TO Generuj();
TELL Generator2 TO Generuj();

StartSimulation();

TELL Gniazdo1 TO Koniec();
TELL Gniazdo2 TO Koniec();
TELL Gniazdo3 TO Koniec();

StartSimulation;

MonCzas := GETMONITOR(ASK System TO CzasPrzebywaniaWSystemie,RStatObj);

MonCzasSMO1 := GETMONITOR(ASK Gniazdo1 TO CzasWSMO,RStatObj);

MonCzasSMO2 := GETMONITOR(ASK Gniazdo2 TO CzasWSMO,RStatObj);

MonCzasSMO3 := GETMONITOR(ASK Gniazdo3 TO CzasWSMO,RStatObj);

MonLiczbaZgloszenSys := GETMONITOR(ASK System TO IloscZgloszen,ITimedStatObj);

MonLiczbaZajetychGn1 := GETMONITOR(ASK Gniazdo1 TO ZajetychOkienek,ITimedStatObj);

MonLiczbaZajetychGn2 := GETMONITOR(ASK Gniazdo2 TO ZajetychOkienek,ITimedStatObj);

MonLiczbaZajetychGn3 := GETMONITOR(ASK Gniazdo3 TO ZajetychOkienek,ITimedStatObj);

background image

MonZgloszenWKolejce1 := GETMONITOR(ASK KolejkaPrior TO LK,ITimedStatObj);

MonZgloszenWKolejce2 := GETMONITOR(ASK KolejkaFIFO TO LK,ITimedStatObj);

MonZgloszenWKolejce3 := GETMONITOR(ASK KolejkaLIFO TO LK,ITimedStatObj);

PrawdopodObsluzenia := FLOAT(ASK System TO ZgloszeniaObsluzone)/FLOAT(ASK System TO

LiczbaWygenerowanych);

NEW(Plik);
ASK Plik TO Open("out.txt",Output);

ASK Plik TO WriteString("WYNIKI: ");

ASK Plik TO WriteLn();

ASK Plik TO WriteString("Czas przebywania zgloszenia w systemie:");ASK Plik TO

WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonCzas TO Mean) WITH "srednia: ***.*** ");ASK

Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonCzas TO StdDev) WITH "odchylenie:

***.***");ASK Plik TO WriteLn();

ASK Plik TO WriteLn();

ASK Plik TO WriteString("Czas przebywania zgloszenia w SMO-1:");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonCzasSMO1 TO Mean) WITH "srednia:

***.***");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonCzasSMO1 TO StdDev) WITH "odchylenie:

***.***");ASK Plik TO WriteLn();

ASK Plik TO WriteLn();

ASK Plik TO WriteString("Czas przebywania zgloszenia w SMO-2:");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonCzasSMO2 TO Mean) WITH "srednia: ***.***

");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonCzasSMO2 TO StdDev) WITH "odchylenie:

***.***");ASK Plik TO WriteLn();

ASK Plik TO WriteLn();

ASK Plik TO WriteString("Czas przebywania zgloszenia w SMO-3:");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonCzasSMO3 TO Mean) WITH "srednia:

***.***");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonCzasSMO3 TO StdDev) WITH "odchylenie:

***.***");ASK Plik TO WriteLn();

ASK Plik TO WriteLn();

ASK Plik TO WriteString("Liczba klientow w systemie: ");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonLiczbaZgloszenSys TO Mean) WITH "srednia:

****.***");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonLiczbaZgloszenSys TO StdDev) WITH

"odchylenie: ***.***");ASK Plik TO WriteLn();

ASK Plik TO WriteLn();

ASK Plik TO WriteString("Liczba kanalow zajetych w gniezdzie O1:");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonLiczbaZajetychGn1 TO Mean) WITH "srednia:

***.*** ");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonLiczbaZajetychGn1 TO StdDev) WITH

"odchylenie: ***.***");ASK Plik TO WriteLn();

ASK Plik TO WriteLn();

ASK Plik TO WriteString("Liczba kanalow zajetych w gniezdzie O2:");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonLiczbaZajetychGn2 TO Mean) WITH "srednia:

***.***");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonLiczbaZajetychGn2 TO StdDev) WITH

"odchylenie: ***.***");ASK Plik TO WriteLn();

ASK Plik TO WriteLn();

ASK Plik TO WriteString("Liczba kanalow zajetych w gniezdzie O3:");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonLiczbaZajetychGn3 TO Mean) WITH "srednia:

background image

***.***");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonLiczbaZajetychGn3 TO StdDev) WITH

"odchylenie: ***.***");ASK Plik TO WriteLn();

ASK Plik TO WriteLn();

ASK Plik TO WriteString("Liczba klientow w SMO1 (Priorytetowa):");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonZgloszenWKolejce1 TO Mean) WITH "srednia:

***.***");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonZgloszenWKolejce1 TO StdDev) WITH

"odchylenie: ***.***");ASK Plik TO WriteLn();

ASK Plik TO WriteLn();

ASK Plik TO WriteString("Liczba klientow w SMO2 (FIFO):");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonZgloszenWKolejce2 TO Mean) WITH "srednia:

***.***");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonZgloszenWKolejce2 TO StdDev) WITH

"odchylenie: ***.***");ASK Plik TO WriteLn();

ASK Plik TO WriteLn();

ASK Plik TO WriteString("Liczba klientow w SMO3 (LIFO):");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonZgloszenWKolejce3 TO Mean) WITH "srednia:

***.***");ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(ASK MonZgloszenWKolejce3 TO StdDev) WITH

"odchylenie: ***.***");ASK Plik TO WriteLn();

ASK Plik TO WriteLn();

ASK Plik TO WriteString( SPRINT(PrawdopodObsluzenia) WITH "Prawdopodobienstwo

obsluzenia klienta w systemie: ***.***");

DISPOSE(Plik);

DISPOSE(KolejkaLIFO);

DISPOSE(KolejkaPrior);

DISPOSE(KolejkaFIFO);

DISPOSE(Generator1);

DISPOSE(Generator2);

DISPOSE(Gniazdo1);

DISPOSE(Gniazdo2);

DISPOSE(Gniazdo3);

DISPOSE(System);
DISPOSE(TriggerG1);
DISPOSE(TriggerG2);
DISPOSE(TriggerG3);
DISPOSE(TriggerBlokujacy);

wybor := ReadKey();

OUTPUT("");

END MODULE.


Document Outline


Wyszukiwarka

Podobne podstrony:
I7G2S1 Kamil Piersa PSY
PSY sprawozdanie, WAT, V SEM, PSY, 1
PSy, Sprawozdanie
sprawko nr7, aaa, studia 22.10.2014, Materiały od Piotra cukrownika, materialy Kamil, Szkoła, OLKOWE
I8G1S1 Zarodkiewicz PSy Sprawozdanie, WAT, V SEM, PSY, 1
PSy - Sprawozdanie, WAT, SEMESTR V, podstawy symulacji, 17 moj
PSY sprawozdanie (1), WAT, V SEM, PSY, 1
I8E1S1 13 Karpiński Radosław Psy Sprawozdanie LAB cz 1
I8E1S1 17 Lemancewicz Rafal Psy Sprawozdanie LAB cz 1
I8E1S1 17 Lemancewicz Rafal Psy Sprawozdanie LAB cz 2
El¾bieta Okniäska I7G2S1 PSY
I7G2S1 PSy Socha Marcin
I0E1S1 Kamil Maślanka Projekt PSy, I0E1S1 Kamil Maślanka sprawozdanie projekt, Microsoft Word - spra
[I7G2S1] Sprawozdanie nr 2
Sprawozdanie PSY
sprawozdanie z energoelektroniki adaszka, aaa, studia 22.10.2014, Materiały od Piotra cukrownika,
Sprawozdanie PSY

więcej podobnych podstron