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 (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)
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 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;
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
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;
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
;
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,
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
Wartość średnia
Mean
Suma kwadratów
SumOfSquares
Średnia kwadratowa
MeanSquare
Wariancja
Variance
Odchylenie standardowe
StdDev
Histogram
Histogram
Statystyki ważone czasem
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
t
0
1
2
10
30
100
x
i
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):
<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 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;