Metody symulacyjne
Mechanizm monitorowania
zmiennych w MODSIM’ie
Monitory - idea
Monitorowanie polega na
ś
cisłym powi
ą
zaniu
pewnych (zdefiniowanych) zachowa
ń
(działa
ń
) z
operacjami dost
ę
pu do zmiennych i/lub ich
modyfikacji.
Powi
ą
zanie to ma charakter ukryty i automatyczny
Powi
ą
zanie to ma charakter ukryty i automatyczny
(działania te s
ą
uruchamiane w sposób
automatyczny i niejawny).
Operacje monitoruj
ą
ce s
ą
odseparowane od operacji
przetwarzania dotycz
ą
cych monitorowanych
zmiennych.
Monitory - zastosowanie
ś
ledzenie zmian warto
ś
ci wybranej zmiennej i
zobrazowanie tych zmian na wykresie
debagowanie – obserwacja warto
ś
ci kluczowych
zmiennych programu bez zmiany logiki programu
(głównego przepływu sterowania w programie)
(głównego przepływu sterowania w programie)
gromadzenie statystyk
dotycz
ą
cych wyników
symulacji (odseparowanie tych operacji od
„czystej” symulacji)
Co mo
ż
emy monitorowa
ć
?
zmienne dowolnego typu:
(wyliczeniowy,
INTEGER
,
REAL
, STRING,
BOOLEAN, typ okrojony, obiektowy, rekordowy,
tablicowy)
pola w obiektach
pola w obiektach
pola w rekordach
Składnia deklaracji obiektu monitora
Składnia definicji metod monitoruj
ą
cych
Własno
ś
ci monitorów
tylko monitor mo
ż
e zawiera
ć
metody typu: LMONITOR i
RMONITOR;
monitor mo
ż
e posiada
ć
dowoln
ą
liczb
ę
metod:
left-hand i right-hand. Je
ś
li jest wi
ę
cej ni
ż
jedna metoda
okre
ś
lonego rodzaju, wtedy s
ą
one wywoływane w
kolejno
ś
ci zadeklarowania;
kolejno
ś
ci zadeklarowania;
monitor mo
ż
e dziedziczy
ć
z innych obiektów, przy czym
obiektem bazowym mo
ż
e by
ć
zarówno typ monitorowy lub
nie;
obiekt, który dziedziczy z obiektu b
ę
d
ą
cego monitorem
musi by
ć
koniecznie monitorem tego samego typu danych
monitorowanych;
monitor mo
ż
e by
ć
statyczny lub dynamiczny;
Struktura obiektu monitora
Trzy specjalne wielko
ś
ci zdefiniowane w monitorze:
VALUE
– dost
ę
pna ze wszystkich metod
monitoruj
ą
cych
NEWVALUE
– dost
ę
pna z metod typu
LMONITOR
LMONITOR
UPDATEVALUE
– funkcja wywoływana z metod
typu LMONITOR i modyfikuj
ą
ca warto
ść
zmiennej
NEWVALUE
Deklaracja zmiennych monitorowanych
VAR
dlugosc : LMONITORED INTEGER;
czas : LRMONITORED REAL BY MonitorType;
Uwaga: w ten sam sposób deklarujemy monitorowane pola obiektów i
rekordów.
Deklaracja typów monitorowanych
TYPE
TypMonit1 = LMONITORED INTEGER;
TypMonit2 = LRMONITORED REAL;
Uwaga: typ obiektu monitora musi by
ć
zgodny z typem monitorowanej zmiennej.
Kolejno
ść
wywołania metod monitorujacych
TYPE MonitorSample = MONITOR INTEGER OBJECT
LMONITOR METHOD SetNewValue;
RMONITOR METHOD GetOldValue;
END ONJECT;
OBJECT MonitorSample
LMONITOR METHOD SetNewValue;
BEGIN
OUTPUT(„SetNewValue to „, NEWVALUE);
END METHOD;
END METHOD;
RMONITOR METHOD GetOldValue;
BEGIN
OUTPUT(„GetOldValue, which is „, VALUE);
END METHOD;
END OBJECT;
VAR
queuelen : LRMONITORED INTEGER BY MonitorSample;
BEGIN
queuelen := 0;
queuelen := queuelen + 1;
END MODULE.
SetNewValue to 0
GetOldValue, which is 0
SetNewValue to 1
Typy monitorów statystycznych
MODSIM dostarcza cztery podstawowe typy
monitorów statystycznych typów liczbowych:
Dla zmiennych typu całkowitoliczbowego
IStatObj
;
ITimedStatObj
;
ITimedStatObj
;
Dla zmiennych typu rzeczywistego
RStatObj
;
RTimedStatObj
;
Uwaga: obiekty zdefiniowane w module StatMod.
Typy monitorowanych statystycznie zmiennych
Sze
ść
monitorowanych typów danych liczbowych:
SINTEGER
= LMONITORED INTEGER BY IStatObj;
TSINTEGER
= LMONITORED INTEGER BY
ITimedStatObj;
BINTEGER
= LMONITORED INTEGER BY IStatObj,
BINTEGER
= LMONITORED INTEGER BY IStatObj,
ITimedStatObj;
SREAL
= LMONITORED REAL BY RStatObj;
TSREAL
= LMONITORED REAL BY RTimedStatObj;
BREAL
= LMONITORED REAL BY RStatObj,
RTimedStatObj;
Uwaga: obiekty zdefiniowane w module StatMod.
Rodzaje zbieranych statystyk
Do statystyk wyznaczanych automatycznie nale
żą
:
Licznik (liczba obserwacji)
Count
Maksimum
Maximum
Minimum
Minimum
Suma
Sum
Suma
Sum
Warto
ść
ś
rednia
Mean
Suma kwadratów
SumOfSquares
Ś
rednia kwadratowa
MeanSquare
Wariancja
Variance
Odchylenie standardowe
StdDev
Histogram
Histogram
Statystyki wa
ż
one czasem
t
0
1
2
10
30
100
x
i
Przebieg zmian liczby zada
ń
w kolejce
1
3
2
1
0
1
1
=
+
+
=
⋅
=
∑
=
n
i
i
n
x
n
X
∑
∑
=
=
∆
=
=
⋅
+
⋅
+
⋅
=
∆
⋅
⋅
=
n
i
i
n
i
i
i
n
t
T
t
x
T
X
1
1
*
6
,
1
100
70
2
20
1
10
0
1
Przebieg zmian liczby zada
ń
w kolejce
Histogramy
Histogramy s
ą
zbierane automatycznie jak i inne statystyki
(nale
ż
y jednak najpierw ustawi
ć
pewne parametry).
ASK waitingTime TO SetHistogram(low, high, interval);
Odwoływanie si
ę
do histogramu jest identyczne jak do tablicy.
FOR i:=0 TO 21
OUTPUT(ASK waitingTime TO GetHistogram[i]);
END FOR;
Wbudowane procedury i funkcje (1/2)
ADDMONITOR
(IN monVar : AnyMonitoredVar;
IN monObj : AnyMonitorObjectVar)
kojarzy obiekt monitora monObj z monitorowan
ą
zmienn
ą
monVar z
jednoczesn
ą
aktywacj
ą
monitora
REMOVEMONITOR
(IN monVar : AnyMonitoredVar;
IN monObj : AnyMonitorObjectVar)
usuwa skojarzenie obiekt monitora monObj z monitorowan
ą
zmienn
ą
monVar
ACTIVATE
(IN monVar : AnyMonitoredVar;
IN monType : AnyMonitorObjectType):
<montype> object reference
aktywuje działanie monitora podanego typu monType dla wskazanej i
skojarzonej z nim zmiennej monitorowanej monVar
Wbudowane procedury i funkcje (2/2)
DEACTIVATE
(IN monVar : AnyMonitoredVar;
IN monType : AnyMonitorObjectType):
<montype> object reference
dezaktywuje działanie monitora podanego typu monType dla wskazanej i
skojarzonej z nim zmiennej monitorowanej monVar
GETMONITOR
(IN monVar : AnyMonitoredVar;
IN monType : AnyMonitorObjectType):
IN monType : AnyMonitorObjectType):
<montype> object reference
zwraca referencj
ę
na obiekt monitora podanego typu monType skojarzonego
z zadan
ą
zmienn
ą
monitorowan
ą
monVar
Sposób wykorzystania
TYPE
MyMonitoredType = LMONITORED REAL;
VAR
monVar1 : MyMonitoredType;
monVar2 : SREAL; {LMONITORED REAL BY RStatObj}
mon1, mon2 : RStatObj;
BEGIN
. . .
. . .
monVar2 := 10.0;
NEW(mon1);
ADDMONITOR
(monVar1, mon1); {automatycznie zostaje aktywowany}
monVar1 := 20.0;
. . .
OUTPUT(ASK
GETMONITOR
(monVar2, RStatObj) TO Mean);
OUTPUT(ASK mon1 TO StdDev);
DEACTIVATE
(mon1);
. . .
REMOVEMONITOR
(monVar1, mon1);
DISPOSE(mon1);
Klasa bazowa monitora statystycznego
StatObj = OBJECT
Count : INTEGER
Sum : REAL
SumOfSquares: REAL
low
: INTEGER
high : INTEGER
interval : INTEGER
ASK METHOD ObjTerminate
ASK METHOD SetHistogram(IN Low : INTEGER;
IN High : INTEGER;
IN High : INTEGER;
IN Interval : INTEGER)
ASK METHOD GetHistogram() : histogram
ASK METHOD Mean() : REAL
ASK METHOD MeanSquare() : REAL
ASK METHOD Variance() : REAL
ASK METHOD StdDev() : REAL
ASK METHOD Reset
PRIVATE
Histogram
: histogram;
ASK METHOD UpdateHistogram(IN value : REAL)
END OBJECT;