lab SMO

Zasymulować funkcjonowanie systemu obsługi klientów pewnego oddziału bankowego (okienka kasowego), którego schemat przedstawia poniższy rysunek (SMO). Przy czym:

μ – intensywność kanału obsługi (rozkład czasu obsługi wykładniczy

MAIN MODULE Smo;

FROM SimMod IMPORT StartSimulation, SimTime, StopSimulation;

FROM RandMod IMPORT RandomObj;

FROM StatMod IMPORT IStatObj, ITimedStatObj, TSINTEGER,

SREAL, RStatObj;

FROM IOMod IMPORT StreamObj, ALL FileUseType;

FROM ListMod IMPORT QueueList;

TYPE

Kolejka = OBJECT(QueueList); FORWARD;

OtoczenieObj = OBJECT(RandomObj)

lambda: REAL;

kolejka: KolejkaObj;

liczbaKlientow: INTEGER;

ASK METHOD Init(IN lbd: REAL; IN kol: KolejkaObj;

IN lk: INTEGER);

TELL METHOD GenerujKlientow();

END OBJECT;

GniazdoObj = OBJECT(RandomObj)

mi: REAL;

kolejka: KolejkaObj;

zajete: BOOLEAN;

czasObslugi: SREAL;

ASK METHOD Init(IN m: REAL; IN kol: KolejkaObj);

TELL METHOD Obsluguj();

END OBJECT;

KlientRec = RECORD

czasWej: REAL;

END RECORD;

KolejkaObj = OBJECT(QueueList)

maxDlugosc: INTEGER;

gniazdo: GniazdoObj;

dlugosc: TSINTEGER;

ASK METHOD Init(IN maxdl: INTEGER;

IN gnd: GniazdoObj);

ASK METHOD Wstaw(klient: KlientRec);

END OBJECT;

OBJECT OtoczenieObj

ASK METHOD Init(IN lbd: REAL; IN kol: KolejkaObj;

IN lk: INTEGER);

BEGIN

lambda := lbd;

liczbaKlientow := lk;

kolejka := kol;

END METHOD;

TELL METHOD GenerujKlientow();

VAR i: INTEGER;

kl: KlientRec;

BEGIN

FOR i := 1 TO liczbaKilentow

WAIT DURATION Exponential(1.0 / lambda)

ON INTERRUPT

END WAIT;

NEW(kl);

ASK kolejka TO Wstaw(kl);

END FOR;

END METHOD;

END OBJECT;

OBJECT GniazdoObj

ASK METHOD Init(IN m: REAL; IN kol: KolejkaObj);

BEGIN

mi := m;

kolejka := kol;

END METHOD;

TELL METHOD Obsluguj();

VAR kl: KlientRec;

BEGIN

zajete := TRUE;

WHILE ASK kolejka TO numberIn > 0

kl := ASK kolejka TO Remove();

WAIT DURATION Exponential(1.0 / mi)

ON INTERRUPT

END WAIT;

czasObslugi := SimTime – kl.czasWej;

DISPOSE(kl);

END WHILE;

zajete := FALSE;

END METHOD;

END OBJECT;

OBJECT KolejkaObj

ASK METHOD Init(IN maxdl: INTEGER; IN gnd: GniazdoObj);

BEGIN

maxDlugosc := maxdl;

gniazdo := gnd;

END METHOD;

ASK METHOD Wstaw(klient: KlientRec);

BEGIN

IF maxDlugosc > numberIn

INC(dlugosc);

klient.czasWej := SimTime;

Add(klient);

IF NOT ASK gniazdo TO zajete

TELL gniazdo TO Obsluguj;

END IF;

ELSE

DISPOSE(klient);

END IF;

END METHOD;

END OBJECT;

VAR

gen: GeneratorObj;

gzd: GniazdoObj;

kol: KolejkaObj;

plik: StreamObj;

monITS: ITimedStatObj;

monRS: RStatObj;

BEGIN

NEW(gen);

NEW(gzd);

NEW(kol);

ASK gen TO Init(1.5, kol, 1000);

ASK gzd TO Init(2.0, kol);

ASK kol TO Init(10, gzd);

TELL gen TO GenerujKlientow();

StartSimulation;

NEW(plik);

ASK plik TO Open(„wyniki.txt”, Output);

ASK plik TO WriteString(„srednia dlugosc kolejki: ”);

monITS := GETMONITOR(ASK kol TO dlugosc, ITimedStatObj);

ASK plik TO WriteReal(ASK monITS TO Mean, 10, 4);

ASK plik TO WriteLn;

ASK plik TO WriteString(„sredni czas obslugi klienta: ”);

monRS := GETMONITOR(ASK gzd TO czasObslugi, RStatObj);

ASK plik TO WriteReal(ASK monRS TO Mean, 10, 4);

ASK plik TO WriteLn;

ASK plik TO Close;

DISPOSE(plik);

DIPOSE(gen);

DIPOSE(gzd);

DIPOSE(kol);

END MODULE.


Wyszukiwarka

Podobne podstrony:
spis lab I sem 2010
III WWL DIAGN LAB CHORÓB NEREK i DRÓG MOCZ
Diagnostyka lab wod elektrolit
ZW LAB USTAWY, OCHRONA
LAB PROCEDURY I FUNKCJE
sprzet lab profilografy
sprzet lab mikromanometry
Mechanika Plynow Lab, Sitka Pro Nieznany
Lab 02 2011 2012
PO lab 5 id 364195 Nieznany
lab pkm 4
MSIB Instrukcja do Cw Lab krystalizacja
lab [5] id 258102 Nieznany
lab 8 9 1
lab 3 2 9
IE RS lab 11 solutions
5 MDE lab nr 5 ogniwa fotogalwaniczne

więcej podobnych podstron