Metody symulacyjne
Metody symulacyjne
J
Ę
ZYK SYMULACYJNY MODSIM
biblioteki
biblioteki
Plan prezentacji
Plan prezentacji
Wybrane biblioteki:
– IOMod – operacje wejścia/wyjścia
– RandMod – generowanie liczb pseudolosowych
– StatMod – monitory statystyczne
– ListMod – zarządzanie złożonymi strukturami z
rekordami
– GrpMod –zarządzanie złożonymi strukturami z
obiektami
– SimMod – operacje związane z symulacją
IOMod
IOMod –
– operacje wejścia/wyjścia (1/4)
operacje wejścia/wyjścia (1/4)
Typ wyliczeniowy dla trybu pracy strumienia
danych
FileUseType
= (
Input
,
Output
,
InOut
,
Append
,
Update
,
CreateBinary
);
– tryb tekstowy strumienia danych: InPut, OutPut,
– tryb tekstowy strumienia danych: InPut, OutPut,
InOut, Append,
– tryb binarny: Update, CreateBinary,
IOMod
IOMod –
– operacje wejścia/wyjścia (2/4)
operacje wejścia/wyjścia (2/4)
PROCEDURE ReadKey() : CHAR;
PROCEDURE FileExists(IN fname: STRING) : BOOLEAN;
PROCEDURE DeleteFile(IN fname: STRING);
PROCEDURE FileSize(IN fname: STRING) : INTEGER;
StreamObj = OBJECT
StreamObj = OBJECT
eof: BOOLEAN;
ioResult: INTEGER;
fileName: STRING;
ASK METHOD Open(IN fname: STRING; IN ioDirection: FileUseType);
ASK METHOD Close;
ASK METHOD Delete;
ASK METHOD IsOpen() : BOOLEAN;
IOMod
IOMod –
– operacje wejścia/wyjścia (3/4)
operacje wejścia/wyjścia (3/4)
ASK METHOD ReadChar(OUT ch: CHAR);
ASK METHOD ReadInt(OUT n: INTEGER);
ASK METHOD ReadReal(OUT x: REAL);
ASK METHOD ReadString(OUT str: STRING);
ASK METHOD ReadLine(OUT str: STRING);
ASK METHOD ReadLine(OUT str: STRING);
ASK METHOD ReadBlock(IN buffer: ANYREC; IN size: INTEGER;
IN blocknum : INTEGER);
IOMod
IOMod –
– operacje wejścia/wyjścia (4/
operacje wejścia/wyjścia (4/4
4))
ASK METHOD WriteChar(IN ch: CHAR);
ASK METHOD WriteInt(IN num, fieldwidth: INTEGER);
ASK METHOD WriteHex(IN num, fieldwidth: INTEGER);
ASK METHOD WriteReal(IN num: REAL; IN fieldwidth, precision: INTEGER);
ASK METHOD WriteExp(IN num: REAL; IN fieldwidth, precision: INTEGER);
ASK METHOD WriteString(IN str: STRING);
ASK METHOD WriteString(IN str: STRING);
ASK METHOD WriteLn;
ASK METHOD WriteBlock(IN buffer : ANYREC; IN size: INTEGER;
IN blocknum: INTEGER);
ASK METHOD GetPosition() : INTEGER;
ASK METHOD Position(IN moveTo: INTEGER);
END OBJECT;
RandMod
RandMod –
– generowanie liczb
generowanie liczb
pseudolosowych (1/3)
pseudolosowych (1/3)
PROCEDURE Random() : REAL;
PROCEDURE FetchSeed(IN SimscriptSeedNumber: INTEGER) : INTEGER;
RandomObj = OBJECT
originalSeed,
currentSeed: INTEGER;
currentSeed: INTEGER;
antithetic: BOOLEAN;
ASK METHOD Sample() : REAL;
ASK METHOD SetSeed(IN NewSeed: INTEGER);
ASK METHOD Reset();
RandMod
RandMod –
– generowanie liczb
generowanie liczb
pseudolosowych (2/3)
pseudolosowych (2/3)
ASK METHOD UniformReal(IN lo, hi: REAL) : REAL;
ASK METHOD UniformInt (IN lo, hi: INTEGER) : INTEGER;
ASK METHOD Exponential(IN mean: REAL) : REAL;
{mean > 0}
ASK METHOD Normal(IN mean, sigma: REAL) : REAL;
{sigma > 0}
{sigma > 0}
ASK METHOD Gamma(IN mean, alpha : REAL) : REAL;
{mean, alpha > 0}
ASK METHOD Beta(IN alpha1, alpha2 : REAL) : REAL;
{alpha1, alpha2 > 0}
ASK METHOD Triangular(IN min, mean, max : REAL) : REAL;
{min < mean < max}
RandMod
RandMod –
– generowanie liczb
generowanie liczb
pseudolosowych (3/
pseudolosowych (3/3
3))
ASK METHOD Erlang(IN mean : REAL; IN K : INTEGER): REAL;
{mean, K > 0}
ASK METHOD LogNormal(IN SDev, Mean : REAL): REAL;
{mean > 0}
ASK METHOD Weibull(IN shape,scale : REAL) : REAL;
{shape, scale > 0}
{shape, scale > 0}
ASK METHOD Poisson(IN mu : REAL) : INTEGER;
{mu > 0}
ASK METHOD Binomial( IN n : INTEGER; IN p : REAL) : INTEGER;
{n (liczba prób) and p (prawdopodobieństwo) n, p > 0}
END OBJECT;
StatMod
StatMod –
– monitory statystyczne (1/4)
monitory statystyczne (1/4)
Typ tablicowy dla histogramów
histogram = ARRAY INTEGER OF REAL;
Klasa bazowa dla monitorów statystycznych
StatObj = OBJECT
Count : INTEGER;
Count : INTEGER;
Sum : REAL;
SumOfSquares : REAL;
low, high, interval: INTEGER;
ASK METHOD SetHistogram(IN Low: INTEGER;
IN High: INTEGER; IN Interval : INTEGER);
StatMod
StatMod –
– monitory statystyczne (2/4)
monitory statystyczne (2/4)
ASK METHOD GetHistogram() : histogram;
ASK METHOD Mean() : REAL;
ASK METHOD MeanSquare() : REAL;
ASK METHOD Variance() : REAL;
ASK METHOD StdDev() : REAL;
ASK METHOD StdDev() : REAL;
ASK METHOD Reset;
PRIVATE
Histogram : histogram;
END OBJECT;
StatMod
StatMod –
– monitory statystyczne (3/4)
monitory statystyczne (3/4)
Typy monitorów statystycznych
IStatObj – monitor statystyczny zmiennych typu INTEGER
ITimedStatObj – monitor statystyczny (ważony czasem)
zmiennych typu INTEGER
RStatObj – monitor statystyczny zmiennych typu REAL
RStatObj – monitor statystyczny zmiennych typu REAL
RTimedStatObj – monitor statystyczny (ważony czasem)
zmiennych typu REAL
StatMod
StatMod –
– monitory statystyczne (4/
monitory statystyczne (4/4
4))
Typy liczbowe monitorowane (statystycznie)
SINTEGER = LMONITORED INTEGER BY IStatObj;
TSINTEGER = LMONITORED INTEGER BY ITimedStatObj;
BINTEGER = LMONITORED INTEGER BY IStatObj,
ITimedStatObj;
ITimedStatObj;
SREAL = LMONITORED REAL BY RStatObj;
TSREAL = LMONITORED REAL BY RTimedStatObj;
BREAL = LMONITORED REAL BY RStatObj, RTimedStatObj;
ListMod
ListMod –
– zarządzanie złożonymi
zarządzanie złożonymi
strukturami z rekordami (1/3)
strukturami z rekordami (1/3)
Klasy kontenerów:
– QueueList
– StackList
– RankedList
– BTreeList
– StatQueueList
– StatStackList
– StatRankedList
– StatBTreeList
ListMod
ListMod –
– zarządzanie złożonymi
zarządzanie złożonymi
strukturami z rekordami (2/3)
strukturami z rekordami (2/3)
Metody wszystkich klas:
ASK METHOD Includes(IN candidate: ANYREC) : BOOLEAN;
ASK METHOD Add(IN NewMember : ANYREC);
ASK METHOD Remove() : ANYREC;
ASK METHOD First() : ANYREC;
ASK METHOD First() : ANYREC;
ASK METHOD Last() : ANYREC;
ASK METHOD Next(IN candidate: ANYREC) : ANYREC;
ASK METHOD Prev(IN candidate: ANYREC) : ANYREC;
ASK METHOD RemoveThis(IN member: ANYREC);
ASK METHOD AddBefore(IN ExistingMember, NewMember:ANYREC);
ASK METHOD AddAfter(IN ExistingMember, NewMember: ANYREC);
ListMod
ListMod –
– zarządzanie złożonymi
zarządzanie złożonymi
strukturami z rekordami (3/
strukturami z rekordami (3/3
3))
Metody tylko dla list uporządkowanych:
ASK METHOD Rank (IN a, b : ANYREC) : INTEGER;
{metoda musi być nadpisana}
Metody tylko dla klas BTree:
ASK METHOD SetOrder(IN degree : INTEGER);
ASK METHOD SetOrder(IN degree : INTEGER);
{ustawia porządek, gdy nie ma elementów w strukturze}
ASK METHOD Key(IN object : ANYREC) : STRING;
{metoda musi być nadpisana}
ASK METHOD Find(IN key : STRING) : ANYREC;
SimMod
SimMod –
– zarządzanie symulacją (1/4)
zarządzanie symulacją (1/4)
Obiekt do synchronizacji procesów:
TriggerObj = OBJECT
WAITFOR METHOD Fire;
TELL METHOD Trigger;
ASK METHOD Release;
ASK METHOD Release;
ASK METHOD InterruptTrigger;
ASK METHOD NumWaiting() : INTEGER;
PRIVATE
triggerList: ANYOBJ;
END OBJECT;
SimMod
SimMod –
– zarządzanie symulacją (2/4)
zarządzanie symulacją (2/4)
Procedury:
PROCEDURE StartSimulation;
PROCEDURE StopSimulation;
{anuluje wszystkie oczekujące aktywności i zwraca sterowanie
do pierwszej instrukcji po StartSimulation}
do pierwszej instrukcji po StartSimulation}
PROCEDURE NumActivities(IN object : ANYOBJ) : INTEGER;
PROCEDURE NumObjPending() : INTEGER;
PROCEDURE NumActPending() : INTEGER;
PROCEDURE NumWAITFOR() : INTEGER;
PROCEDURE ResetSimTime(IN newtime : REAL);
PROCEDURE ActivityOwner(IN activity : ACTID) : ANYOBJ;
SimMod
SimMod –
– zarządzanie symulacją (3/4)
zarządzanie symulacją (3/4)
PROCEDURE ScheduledTime(IN activity : ACTID) : REAL;
{zwraca chwilę wznowienia podanej aktywności}
PROCEDURE ActivityName(IN activity: ACTID) : STRING;
PROCEDURE InterruptMethod(IN activity : ACTID);
PROCEDURE Interrupt(IN object : ANYOBJ;
PROCEDURE Interrupt(IN object : ANYOBJ;
IN methName : STRING);
PROCEDURE InterruptWaitingFor(IN activity : ANYREC);
{interrupts the most imminent activity with that method name}
SimMod
SimMod –
– zarządzanie symulacją (4/
zarządzanie symulacją (4/4
4))
PROCEDURE InterruptAll(IN object : ANYOBJ);
PROCEDURE PendingListDump(IN DoActList: BOOLEAN);
{dumps the pending list showing each object on it. if DoActList is true, it also
dumps each object's activity list}
PROCEDURE PendingListDumpToStream(IN doActivityList :
BOOLEAN; IN stream : StreamObj);
BOOLEAN; IN stream : StreamObj);
PROCEDURE ActivityListDump(IN ProcObj: ANYOBJ);
PROCEDURE SimTime() : REAL;