Wojskowa Akademia Techniczna
im. Jarosława Dąbrowskiego
Sprawozdanie z projektu
Temat: Symulacja działania sieci SMO
Przedmiot: Podstawy symulacji
Prowadzący: dr inż. Jarosław Rulka
Wykonał: Zachwieja Cezary
Grupa: I7G2S1
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ókątny
1.6.
Weibulla
2.
Długości kolejek pojedynczych SMO
2.1.
ograniczone (możliwe straty)
2.2.
nieograniczone
3.
Algorytm kolejek:
3.1.
FIFO
3.2.
LIFO
3.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.
SMO
SMO
O
2
O
3
SMO
O
1
T
1
p
1
1-p
1
p
2
p
3
Zgodnie z moim numerem (20) na liście studentów grupy wyliczyłem moje
parametry zadania:
Generator z rozkładem: jednostajnym
Gniazdo1 z rozkładem: trójkątnym, 4 kanały
Gniazdo2 z rozkładem: Weibulla, 1 kanały
Gniazdo3 z rozkładem: wykładniczym, 2 kanał
Kolejka1: z priorytetami, nieograniczona (możliwe straty)
Kolejka2: FIFO, ograniczona (możliwe straty)
Kolejka3: LIFO, nieograniczona
Charakterystyki użytych rozkładów:
- rozkład trójkątny:
Gęstość:
- rozkład Weibulla:
Gęstość:
Dystrybuanta:
P(x)=
- rozkład wykładniczy:
Gęstość:
Dystrybuanta:
- rozkład jednostajny:
Gęstość:
Dystrybuanta:
Wynik działania programu
0.085306 [*] Stworzono nowego Studenta Nr 1.
0.085306 [+] Student Nr 1 zostal zakolejkowany do kolejki 1
0.085306 [@] Rozpoczeto obsluge Studenta Nr 1 w okienku 1, stan stanowiska:1
0.189884 [*] Stworzono nowego Studenta Nr 2.
0.189884 [+] Student Nr 2 zostal zakolejkowany do kolejki 1
0.189884 [@] Rozpoczeto obsluge Studenta Nr 2 w okienku 1, stan stanowiska:2
0.286458 [*] Stworzono nowego Studenta Nr 3.
0.286458 [+] Student Nr 3 zostal zakolejkowany do kolejki 1
0.286458 [@] Rozpoczeto obsluge Studenta Nr 3 w okienku 1, stan stanowiska:3
0.381661 [*] Stworzono nowego Studenta Nr 4.
0.381661 [+] Student Nr 4 zostal zakolejkowany do kolejki 1
0.492278 [*] Stworzono nowego Studenta Nr 5.
0.492278 [+] Student Nr 5 zostal zakolejkowany do kolejki 1
0.612886 [*] Stworzono nowego Studenta Nr 6.
0.612886 [+] Student Nr 6 zostal zakolejkowany do kolejki 1
0.713008 [*] Stworzono nowego Studenta Nr 7.
0.713008 [+] Student Nr 7 zostal zakolejkowany do kolejki 1
0.817772 [*] Stworzono nowego Studenta Nr 8.
0.817772 [+] Student Nr 8 zostal zakolejkowany do kolejki 1
0.924585 [*] Stworzono nowego Studenta Nr 9.
0.924585 [+] Student Nr 9 zostal zakolejkowany do kolejki 1
1.026869 [*] Stworzono nowego Studenta Nr 10.
1.026869 [+] Student Nr 10 zostal zakolejkowany do kolejki 1
21.972832 [V] Student: 2 Obsluzony w okienku1
21.972832 [>>] Okienko 1 przekierowuje Studenta Nr 2 do kolejki 2, zmlos=0.924530
21.972832 [+] Student Nr 2 zostaal zakolejkowany do kolejki 2
21.972832 [@] Rozpoczeto obsluge Studenta Nr 10 w okienku 1, stan stanowiska:3
21.972832 [@] Rozpoczeto obsluge studenta nr 2 w okienku 2, stan stanowiska:1
22.713968 [V] Student: 3 Obsluzony w okienku1
22.713968 [>>] Okienko 1 przekierowuje Studenta Nr 3 do kolejki 3, zmlos=0.178295
22.713968 [+] Student Nr 3 zostaal zakolejkowany do kolejki 3
22.713968 [@] Rozpoczeto obsluge Studenta Nr 9 w okienku 1, stan stanowiska:3
22.713968 [@] Rozpoczeto obsluge studenta nr 3 w okienku 3, stan stanowiska:TRUE
29.330609 [V] Student: 1 Obsluzony w okienku1
29.330609 [>>] Okienko 1 przekierowuje Studenta Nr 1 do kolejki 3, zmlos=0.242751
29.330609 [+] Student Nr 1 zostaal zakolejkowany do kolejki 3
29.330609 [@] Rozpoczeto obsluge Studenta Nr 8 w okienku 1, stan stanowiska:3
32.614995 [V] Student: 3 Obsluzony w okienku3
32.614995 [>>] Okienko 3 przekierowuje Studenta Nr 3 do kolejki 1, zmlos=0.924530
32.614995 [+] Student Nr 3 zostal zakolejkowany do kolejki 1
32.614995 [@] Rozpoczeto obsluge studenta nr 1 w okienku 3, stan stanowiska:TRUE
44.489526 [V] Student: 1 Obsluzony w okienku3
44.489526 [X] Student Nr 1 OPUSCIL SYSTEM, zmlos=0.178295
45.179325 [V] Student: 9 Obsluzony w okienku1
45.179325 [>>] Okienko 1 przekierowuje Studenta Nr 9 do kolejki 2, zmlos=0.976369
45.179325 [+] Student Nr 9 zostaal zakolejkowany do kolejki 2
45.179325 [@] Rozpoczeto obsluge Studenta Nr 3 w okienku 1, stan stanowiska:3
45.179325 [@] Rozpoczeto obsluge studenta nr 9 w okienku 2, stan stanowiska:2
48.087740 [V] Student: 2 Obsluzony w okienku2
48.087740 [>>] Okienko 2 przekierowuje Studenta Nr 2 do kolejki 2, zmlos=0.924530
48.087740 [+] Student Nr 2 zostaal zakolejkowany do kolejki 2
48.087740 [@] Rozpoczeto obsluge studenta nr 2 w okienku 2, stan stanowiska:2
51.736523 [V] Student: 10 Obsluzony w okienku1
51.736523 [>>] Okienko 1 przekierowuje Studenta Nr 10 do kolejki 3, zmlos=0.246536
51.736523 [+] Student Nr 10 zostaal zakolejkowany do kolejki 3
51.736523 [@] Rozpoczeto obsluge Studenta Nr 7 w okienku 1, stan stanowiska:3
51.736523 [@] Rozpoczeto obsluge studenta nr 10 w okienku 3, stan stanowiska:TRUE
57.846655 [V] Student: 8 Obsluzony w okienku1
57.846655 [>>] Okienko 1 przekierowuje Studenta Nr 8 do kolejki 2, zmlos=0.851605
57.846655 [+] Student Nr 8 zostaal zakolejkowany do kolejki 2
57.846655 [@] Rozpoczeto obsluge Studenta Nr 6 w okienku 1, stan stanowiska:3
57.846655 [@] Rozpoczeto obsluge studenta nr 8 w okienku 2, stan stanowiska:3
61.150838 [V] Student: 9 Obsluzony w okienku2
61.150838 [X] Student Nr 9 OPUSCIL SYSTEM, zmlos=0.178295
63.474110 [V] Student: 10 Obsluzony w okienku3
63.474110 [X] Student Nr 10 OPUSCIL SYSTEM, zmlos=0.242751
65.055537 [V] Student: 2 Obsluzony w okienku2
65.055537 [X] Student Nr 2 OPUSCIL SYSTEM, zmlos=0.242751
71.758893 [V] Student: 3 Obsluzony w okienku1
71.758893 [>>] Okienko 1 przekierowuje Studenta Nr 3 do kolejki 3, zmlos=0.657957
71.758893 [+] Student Nr 3 zostaal zakolejkowany do kolejki 3
71.758893 [@] Rozpoczeto obsluge Studenta Nr 5 w okienku 1, stan stanowiska:3
71.758893 [@] Rozpoczeto obsluge studenta nr 3 w okienku 3, stan stanowiska:TRUE
80.069530 [V] Student: 7 Obsluzony w okienku1
80.069530 [>>] Okienko 1 przekierowuje Studenta Nr 7 do kolejki 2, zmlos=0.833301
80.069530 [+] Student Nr 7 zostaal zakolejkowany do kolejki 2
80.069530 [@] Rozpoczeto obsluge Studenta Nr 4 w okienku 1, stan stanowiska:3
80.069530 [@] Rozpoczeto obsluge studenta nr 7 w okienku 2, stan stanowiska:2
80.991516 [V] Student: 3 Obsluzony w okienku3
80.991516 [>>] Okienko 3 przekierowuje Studenta Nr 3 do kolejki 1, zmlos=0.976369
80.991516 [+] Student Nr 3 zostal zakolejkowany do kolejki 1
81.870385 [V] Student: 6 Obsluzony w okienku1
81.870385 [>>] Okienko 1 przekierowuje Studenta Nr 6 do kolejki 3, zmlos=0.402373
81.870385 [+] Student Nr 6 zostaal zakolejkowany do kolejki 3
81.870385 [@] Rozpoczeto obsluge Studenta Nr 3 w okienku 1, stan stanowiska:3
81.870385 [@] Rozpoczeto obsluge studenta nr 6 w okienku 3, stan stanowiska:TRUE
85.672674 [V] Student: 8 Obsluzony w okienku2
85.672674 [>>] Okienko 2 przekierowuje Studenta Nr 8 do kolejki 2, zmlos=0.976369
85.672674 [+] Student Nr 8 zostaal zakolejkowany do kolejki 2
85.672674 [@] Rozpoczeto obsluge studenta nr 8 w okienku 2, stan stanowiska:2
93.600388 [V] Student: 6 Obsluzony w okienku3
93.600388 [X] Student Nr 6 OPUSCIL SYSTEM, zmlos=0.246536
94.103978 [V] Student: 5 Obsluzony w okienku1
94.103978 [>>] Okienko 1 przekierowuje Studenta Nr 5 do kolejki 3, zmlos=0.234509
94.103978 [+] Student Nr 5 zostaal zakolejkowany do kolejki 3
94.103978 [@] Rozpoczeto obsluge studenta nr 5 w okienku 3, stan stanowiska:TRUE
97.091435 [V] Student: 7 Obsluzony w okienku2
97.091435 [X] Student Nr 7 OPUSCIL SYSTEM, zmlos=0.246536
104.358175 [V] Student: 3 Obsluzony w okienku1
104.358175 [>>] Okienko 1 przekierowuje Studenta Nr 3 do kolejki 3, zmlos=0.448372
104.358175 [+] Student Nr 3 zostaal zakolejkowany do kolejki 3
104.431169 [V] Student: 5 Obsluzony w okienku3
104.431169 [>>] Okienko 3 przekierowuje Studenta Nr 5 do kolejki 1, zmlos=0.851605
104.431169 [+] Student Nr 5 zostal zakolejkowany do kolejki 1
104.431169 [@] Rozpoczeto obsluge studenta nr 3 w okienku 3, stan stanowiska:TRUE
104.431169 [@] Rozpoczeto obsluge Studenta Nr 5 w okienku 1, stan stanowiska:2
104.553247 [V] Student: 4 Obsluzony w okienku1
104.553247 [>>] Okienko 1 przekierowuje Studenta Nr 4 do kolejki 3, zmlos=0.248779
104.553247 [+] Student Nr 4 zostaal zakolejkowany do kolejki 3
110.224824 [V] Student: 8 Obsluzony w okienku2
110.224824 [>>] Okienko 2 przekierowuje Studenta Nr 8 do kolejki 2, zmlos=0.851605
110.224824 [+] Student Nr 8 zostaal zakolejkowany do kolejki 2
110.224824 [@] Rozpoczeto obsluge studenta nr 8 w okienku 2, stan stanowiska:1
115.356931 [V] Student: 3 Obsluzony w okienku3
115.356931 [>>] Okienko 3 przekierowuje Studenta Nr 3 do kolejki 1, zmlos=0.657957
115.356931 [+] Student Nr 3 zostal zakolejkowany do kolejki 1
115.356931 [@] Rozpoczeto obsluge studenta nr 4 w okienku 3, stan stanowiska:TRUE
115.356931 [@] Rozpoczeto obsluge Studenta Nr 3 w okienku 1, stan stanowiska:2
125.761478 [V] Student: 4 Obsluzony w okienku3
125.761478 [>>] Okienko 3 przekierowuje Studenta Nr 4 do kolejki 1, zmlos=0.833301
125.761478 [+] Student Nr 4 zostal zakolejkowany do kolejki 1
125.761478 [@] Rozpoczeto obsluge Studenta Nr 4 w okienku 1, stan stanowiska:3
131.953872 [V] Student: 8 Obsluzony w okienku2
131.953872 [>>] Okienko 2 przekierowuje Studenta Nr 8 do kolejki 2, zmlos=0.657957
131.953872 [+] Student Nr 8 zostaal zakolejkowany do kolejki 2
131.953872 [@] Rozpoczeto obsluge studenta nr 8 w okienku 2, stan stanowiska:1
132.675515 [V] Student: 5 Obsluzony w okienku1
132.675515 [>>] Okienko 1 przekierowuje Studenta Nr 5 do kolejki 2, zmlos=0.824435
132.675515 [+] Student Nr 5 zostaal zakolejkowany do kolejki 2
132.675515 [@] Rozpoczeto obsluge studenta nr 5 w okienku 2, stan stanowiska:2
143.478549 [V] Student: 3 Obsluzony w okienku1
143.478549 [>>] Okienko 1 przekierowuje Studenta Nr 3 do kolejki 2, zmlos=0.812162
143.478549 [+] Student Nr 3 zostaal zakolejkowany do kolejki 2
143.478549 [@] Rozpoczeto obsluge studenta nr 3 w okienku 2, stan stanowiska:3
151.646278 [V] Student: 5 Obsluzony w okienku2
151.646278 [>>] Okienko 2 przekierowuje Studenta Nr 5 do kolejki 2, zmlos=0.833301
151.646278 [+] Student Nr 5 zostaal zakolejkowany do kolejki 2
151.646278 [@] Rozpoczeto obsluge studenta nr 5 w okienku 2, stan stanowiska:3
154.465034 [V] Student: 4 Obsluzony w okienku1
154.465034 [>>] Okienko 1 przekierowuje Studenta Nr 4 do kolejki 2, zmlos=0.870356
154.465034 [+] Student Nr 4 zostaal zakolejkowany do kolejki 2
154.465034 [@] Rozpoczeto obsluge studenta nr 4 w okienku 2, stan stanowiska:4
156.179805 [V] Student: 8 Obsluzony w okienku2
156.179805 [>>] Okienko 2 przekierowuje Studenta Nr 8 do kolejki 2, zmlos=0.402373
156.179805 [+] Student Nr 8 zostaal zakolejkowany do kolejki 2
156.179805 [@] Rozpoczeto obsluge studenta nr 8 w okienku 2, stan stanowiska:4
160.327031 [V] Student: 3 Obsluzony w okienku2
160.327031 [X] Student Nr 3 OPUSCIL SYSTEM, zmlos=0.234509
171.115931 [V] Student: 5 Obsluzony w okienku2
171.115931 [>>] Okienko 2 przekierowuje Studenta Nr 5 do kolejki 2, zmlos=0.448372
171.115931 [+] Student Nr 5 zostaal zakolejkowany do kolejki 2
171.115931 [@] Rozpoczeto obsluge studenta nr 5 w okienku 2, stan stanowiska:3
171.518813 [V] Student: 4 Obsluzony w okienku2
171.518813 [X] Student Nr 4 OPUSCIL SYSTEM, zmlos=0.248779
180.254175 [V] Student: 8 Obsluzony w okienku2
180.254175 [>>] Okienko 2 przekierowuje Studenta Nr 8 do kolejki 2, zmlos=0.824435
180.254175 [+] Student Nr 8 zostaal zakolejkowany do kolejki 2
180.254175 [@] Rozpoczeto obsluge studenta nr 8 w okienku 2, stan stanowiska:2
194.986687 [V] Student: 5 Obsluzony w okienku2
194.986687 [>>] Okienko 2 przekierowuje Studenta Nr 5 do kolejki 2, zmlos=0.812162
194.986687 [+] Student Nr 5 zostaal zakolejkowany do kolejki 2
194.986687 [@] Rozpoczeto obsluge studenta nr 5 w okienku 2, stan stanowiska:2
205.162134 [V] Student: 8 Obsluzony w okienku2
205.162134 [>>] Okienko 2 przekierowuje Studenta Nr 8 do kolejki 2, zmlos=0.870356
205.162134 [+] Student Nr 8 zostaal zakolejkowany do kolejki 2
205.162134 [@] Rozpoczeto obsluge studenta nr 8 w okienku 2, stan stanowiska:2
220.186838 [V] Student: 5 Obsluzony w okienku2
220.186838 [>>] Okienko 2 przekierowuje Studenta Nr 5 do kolejki 2, zmlos=0.884807
220.186838 [+] Student Nr 5 zostaal zakolejkowany do kolejki 2
220.186838 [@] Rozpoczeto obsluge studenta nr 5 w okienku 2, stan stanowiska:2
224.489329 [V] Student: 8 Obsluzony w okienku2
224.489329 [>>] Okienko 2 przekierowuje Studenta Nr 8 do kolejki 2, zmlos=0.434983
224.489329 [+] Student Nr 8 zostaal zakolejkowany do kolejki 2
224.489329 [@] Rozpoczeto obsluge studenta nr 8 w okienku 2, stan stanowiska:2
240.184832 [V] Student: 5 Obsluzony w okienku2
240.184832 [>>] Okienko 2 przekierowuje Studenta Nr 5 do kolejki 2, zmlos=0.499799
240.184832 [+] Student Nr 5 zostaal zakolejkowany do kolejki 2
240.184832 [@] Rozpoczeto obsluge studenta nr 5 w okienku 2, stan stanowiska:2
245.206711 [V] Student: 8 Obsluzony w okienku2
245.206711 [>>] Okienko 2 przekierowuje Studenta Nr 8 do kolejki 2, zmlos=0.569165
245.206711 [+] Student Nr 8 zostaal zakolejkowany do kolejki 2
245.206711 [@] Rozpoczeto obsluge studenta nr 8 w okienku 2, stan stanowiska:2
262.932928 [V] Student: 5 Obsluzony w okienku2
262.932928 [>>] Okienko 2 przekierowuje Studenta Nr 5 do kolejki 2, zmlos=0.737049
262.932928 [+] Student Nr 5 zostaal zakolejkowany do kolejki 2
262.932928 [@] Rozpoczeto obsluge studenta nr 5 w okienku 2, stan stanowiska:2
264.808090 [V] Student: 8 Obsluzony w okienku2
264.808090 [>>] Okienko 2 przekierowuje Studenta Nr 8 do kolejki 2, zmlos=0.460932
264.808090 [+] Student Nr 8 zostaal zakolejkowany do kolejki 2
264.808090 [@] Rozpoczeto obsluge studenta nr 8 w okienku 2, stan stanowiska:2
277.591058 [V] Student: 5 Obsluzony w okienku2
277.591058 [X] Student Nr 5 OPUSCIL SYSTEM, zmlos=0.108491
282.978982 [V] Student: 8 Obsluzony w okienku2
282.978982 [>>] Okienko 2 przekierowuje Studenta Nr 8 do kolejki 2, zmlos=0.333817
282.978982 [+] Student Nr 8 zostaal zakolejkowany do kolejki 2
282.978982 [@] Rozpoczeto obsluge studenta nr 8 w okienku 2, stan stanowiska:1
301.215815 [V] Student: 8 Obsluzony w okienku2
301.215815 [>>] Okienko 2 przekierowuje Studenta Nr 8 do kolejki 2, zmlos=0.339227
301.215815 [+] Student Nr 8 zostaal zakolejkowany do kolejki 2
301.215815 [@] Rozpoczeto obsluge studenta nr 8 w okienku 2, stan stanowiska:1
328.000819 [V] Student: 8 Obsluzony w okienku2
328.000819 [>>] Okienko 2 przekierowuje Studenta Nr 8 do kolejki 2, zmlos=0.948319
328.000819 [+] Student Nr 8 zostaal zakolejkowany do kolejki 2
328.000819 [@] Rozpoczeto obsluge studenta nr 8 w okienku 2, stan stanowiska:1
349.531647 [V] Student: 8 Obsluzony w okienku2
349.531647 [>>] Okienko 2 przekierowuje Studenta Nr 8 do kolejki 2, zmlos=0.641366
349.531647 [+] Student Nr 8 zostaal zakolejkowany do kolejki 2
349.531647 [@] Rozpoczeto obsluge studenta nr 8 w okienku 2, stan stanowiska:1
361.824879 [V] Student: 8 Obsluzony w okienku2
361.824879 [X] Student Nr 8 OPUSCIL SYSTEM, zmlos=0.026295
=========================================================================
SREDNIA DLUGOSC KOLEJKI1: 2.062733 ODCHYLENIE: 2.041758
SREDNIA DLUGOSC KOLEJKI2: 0.939272 ODCHYLENIE: 0.238830
SREDNIA DLUGOSC KOLEJKI3: 0.937224 ODCHYLENIE: 0.242560
SREDNI CZASOBSLUGI: 66.612988 ODCHYLENIE: 20.051582
SREDNIA LICZBA ZAJETYCH KANALOW W OKIENKU1: 1.071024 ODCHYLENIE: 1.330202
SREDNIA LICZBA ZAJETYCH KANALOW W OKIENKU2: 1.544593 ODCHYLENIE: 0.779442
PRAWDOPODOBIENSTWO OBSLUZENIA PRZEZ OKIENKO1: 0.600000
PRAWDOPODOBIENSTWO OBSLUZENIA PRZEZ OKIENKO2: 0.037037
PRAWDOPODOBIENSTWO OBSLUZENIA PRZEZ OKIENKO3: 0.375000
Nacisnij dowolny klawisz...
Kod programu:
MAIN MODULE zadanie;
FROM RandMod IMPORT RandomObj, Random;
FROM IOMod IMPORT ReadKey;
FROM ListMod IMPORT QueueList;
FROM GrpMod IMPORT QueueObj, StackObj, RankedObj;
FROM SimMod IMPORT SimTime, StartSimulation, TriggerObj;
FROM StatMod IMPORT SREAL, RStatObj,ITimedStatObj, TSINTEGER;
FROM IOMod IMPORT StreamObj, ALL FileUseType;
TYPE
GeneratorObj = OBJECT; FORWARD;
Kolejka1Obj = OBJECT; FORWARD;
Kolejka2Obj = OBJECT; FORWARD;
Kolejka3Obj = OBJECT; FORWARD;
Okienko1Obj = OBJECT; FORWARD;
Okienko2Obj = OBJECT; FORWARD;
Okienko3Obj = OBJECT; FORWARD;
StudentObj = OBJECT; FORWARD;
GeneratorObj = OBJECT(RandomObj);
srednia: REAL;
odchylenie: REAL;
GenLos: RandomObj;
Kolejka1: Kolejka1Obj;
showst: INTEGER;
TELL METHOD Generuj(IN LiczbaOsob:INTEGER);
ASK METHOD Ustaw(IN sred: REAL; IN odch: REAL; IN Kol:Kolejka1Obj; IN showst2:INTEGER);
END OBJECT;
Kolejka1Obj = OBJECT(StackObj);
ograniczenie: INTEGER;
dlugosc: TSINTEGER;
okienko1: Okienko1Obj;
przyjete: INTEGER;
odrzucone: INTEGER;
ASK METHOD Wstaw(IN Kl:StudentObj);
ASK METHOD Ustaw(IN okien: Okienko1Obj; IN ogr: INTEGER);
END OBJECT;
Kolejka2Obj = OBJECT(RankedObj);
okienko2: Okienko2Obj;
dlugosc: TSINTEGER;
przyjete: INTEGER;
odrzucone: INTEGER;
ASK METHOD Wstaw(IN Kl:StudentObj);
ASK METHOD Ustaw(IN okien: Okienko2Obj);
END OBJECT;
Kolejka3Obj = OBJECT(QueueObj);
ograniczenie: INTEGER;
dlugosc: TSINTEGER;
przyjete: INTEGER;
odrzucone: INTEGER;
okienko3: Okienko3Obj;
ASK METHOD Wstaw(IN Kl:StudentObj);
ASK METHOD Ustaw(IN okien: Okienko3Obj; IN ogr: INTEGER);
END OBJECT;
Okienko1Obj = OBJECT(RandomObj);
lo: REAL;
hi: REAL;
Kolejka1: Kolejka1Obj;
Kolejka2: Kolejka2Obj;
Kolejka3: Kolejka3Obj;
los:RandomObj;
stanowiska: TSINTEGER;
TELL METHOD Obsluguj();
ASK METHOD Ustaw(IN l: REAL; IN h: REAL; IN Kol1: Kolejka1Obj; IN Kol2:Kolejka2Obj; IN
Kol3:Kolejka3Obj);
END OBJECT;
Okienko2Obj = OBJECT(RandomObj);
min: REAL;
mode: REAL;
max: REAL;
czasprzebywania:SREAL;
los:RandomObj;
Kolejka2: Kolejka2Obj;
stanowiska: TSINTEGER;
TELL METHOD Obsluguj();
ASK METHOD Ustaw(IN mi:REAL; IN mo:REAL; IN ma:REAL; IN kol:Kolejka2Obj);
END OBJECT;
Okienko3Obj = OBJECT(RandomObj);
shape: REAL;
scale: REAL;
czasprzebywania:SREAL;
Kolejka3: Kolejka3Obj;
Kolejka1: Kolejka1Obj;
los:RandomObj;
zajete: BOOLEAN;
TELL METHOD Obsluguj();
ASK METHOD Ustaw(IN sh: REAL; IN sc: REAL; IN kol: Kolejka3Obj; IN kol1: Kolejka1Obj);
END OBJECT;
StudentObj = OBJECT(RandomObj);
Nr: INTEGER;
CzasWejscia: REAL;
Kolejka1:Kolejka1Obj;
show: BOOLEAN;
ASK METHOD ustawCzas();
ASK METHOD usun();
ASK METHOD ustaw(IN numer: INTEGER; IN kol:Kolejka1Obj; IN show2:BOOLEAN);
END OBJECT;
OBJECT GeneratorObj;
ASK METHOD Ustaw(IN sred: REAL; IN odch: REAL; IN Kol:Kolejka1Obj; IN showst2:INTEGER);
BEGIN
srednia:=sred;
odchylenie:=odch;
Kolejka1:=Kol;
showst:=showst2;
END METHOD;
TELL METHOD Generuj(IN LiczbaOsob:INTEGER);
VAR
i:INTEGER;
st:StudentObj;
showst2:BOOLEAN;
BEGIN
FOR i:=1 TO LiczbaOsob BY 1
WAIT DURATION Normal(srednia,odchylenie);
END WAIT;
NEW(st);
IF (showst = i) OR (showst = 0)
showst2:=TRUE;
ELSE
showst2:=FALSE;
END IF;
ASK st TO ustaw(i,Kolejka1,showst2);
IF ASK st TO show
OUTPUT(SimTime," [*] Stworzono nowego Studenta Nr ", ASK st TO Nr,".");
END IF;
ASK Kolejka1 TO Wstaw(st);
END FOR;
END METHOD;
END OBJECT;
OBJECT Kolejka1Obj;
ASK METHOD Wstaw(IN student:StudentObj);
BEGIN
IF ograniczenie > numberIn;
Add(student);
ASK student TO ustawCzas;
IF ASK student TO show
OUTPUT(SimTime, " [+] Student Nr ", ASK student TO Nr, " zostal zakolejkowany do
kolejki 1");
END IF;
dlugosc:=numberIn;
IF ASK okienko1 TO stanowiska < 3
INC(przyjete);
TELL okienko1 TO Obsluguj;
ELSE
INC(odrzucone);
END IF;
ELSE
IF ASK student TO show
OUTPUT(SimTime, " [<<] Student Nr ", ASK student TO Nr," zostal odrzucony z
kolejki1");
END IF;
DISPOSE(student);
END IF;
END METHOD;
ASK METHOD Ustaw(IN gnd:Okienko1Obj; IN ogr:INTEGER);
BEGIN
okienko1:=gnd;
ograniczenie:=ogr;
END METHOD;
END OBJECT;
OBJECT Kolejka2Obj;
ASK METHOD Wstaw(IN student:StudentObj);
BEGIN
Add(student);
IF ASK student TO show
OUTPUT(SimTime, " [+] Student Nr ", ASK student TO Nr, " zostaal zakolejkowany do
kolejki 2");
END IF;
dlugosc:=numberIn;
IF ASK okienko2 TO stanowiska < 4
INC(przyjete);
TELL okienko2 TO Obsluguj;
ELSE
INC(odrzucone);
END IF;
END METHOD;
ASK METHOD Ustaw(IN gnd: Okienko2Obj);
BEGIN
okienko2:=gnd;
END METHOD;
END OBJECT;
OBJECT Kolejka3Obj;
ASK METHOD Wstaw(IN student:StudentObj);
BEGIN
IF ograniczenie > numberIn;
Add(student);
IF ASK student TO show
OUTPUT(SimTime, " [+] Student Nr ", ASK student TO Nr, " zostaal zakolejkowany do
kolejki 3");
END IF;
dlugosc:=numberIn;
IF NOT ASK okienko3 TO zajete
INC(przyjete);
TELL okienko3 TO Obsluguj;
ELSE
INC(odrzucone);
END IF;
ELSE
IF ASK student TO show
OUTPUT(SimTime, " [<<] Student Nr ", ASK student TO Nr," zostal odrzucony z
kolejki3");
END IF;
DISPOSE(student);
END IF;
END METHOD;
ASK METHOD Ustaw(IN gnd: Okienko3Obj; IN ogr:INTEGER);
BEGIN
okienko3:=gnd;
ograniczenie:=ogr;
END METHOD;
END OBJECT;
OBJECT Okienko1Obj;
ASK METHOD Ustaw(IN l: REAL; IN h: REAL; IN Kol1: Kolejka1Obj; IN Kol2:Kolejka2Obj; IN
Kol3:Kolejka3Obj);
BEGIN
lo:=l;
hi:=h;
Kolejka1:=Kol1;
Kolejka2:=Kol2;
Kolejka3:=Kol3;
NEW(los);
stanowiska:=0;
END METHOD;
TELL METHOD Obsluguj();
VAR
st:StudentObj;
zmlos:REAL;
BEGIN
WHILE ASK Kolejka1 TO numberIn > 0
INC(stanowiska);
st:=ASK Kolejka1 TO Remove();
IF ASK st TO show
OUTPUT(SimTime, " [@] Rozpoczeto obsluge Studenta Nr ", ASK st TO Nr," w okienku
1, stan stanowiska:", stanowiska);
END IF;
WAIT DURATION UniformReal(lo,hi)
ON INTERRUPT
END WAIT;
IF ASK st TO show
OUTPUT(SimTime, " [V] Student: ", ASK st TO Nr, " Obsluzony w okienku1");
END IF;
zmlos:=ASK los Sample();
IF zmlos > 0.7
IF ASK st TO show
OUTPUT(SimTime, " [>>] Okienko 1 przekierowuje Studenta Nr ", ASK st TO
Nr," do kolejki 2, zmlos=", zmlos);
END IF;
ASK Kolejka2 TO Wstaw(st);
ELSE
IF ASK st TO show
OUTPUT(SimTime, " [>>] Okienko 1 przekierowuje Studenta Nr ", ASK st TO
Nr," do kolejki 3, zmlos=", zmlos);
END IF;
ASK Kolejka3 TO Wstaw(st);
END IF;
DEC(stanowiska);
END WHILE;
END METHOD;
END OBJECT;
OBJECT Okienko2Obj;
ASK METHOD Ustaw(IN mi:REAL; IN mo:REAL; IN ma:REAL; IN kol:Kolejka2Obj);
BEGIN
min:=mi;
mode:=mo;
max:=ma;
Kolejka2:=kol;
stanowiska:=0;
NEW(los);
END METHOD;
TELL METHOD Obsluguj();
VAR
st:StudentObj;
zmlos:REAL;
BEGIN
INC(stanowiska);
WHILE ASK Kolejka2 TO numberIn > 0
st:=ASK Kolejka2 TO Remove();
IF ASK st TO show
OUTPUT(SimTime, " [@] Rozpoczeto obsluge studenta nr ", ASK st TO Nr," w okienku
2, stan stanowiska:", stanowiska);
END IF;
WAIT DURATION Triangular(min,mode,max)
ON INTERRUPT
END WAIT;
IF ASK st TO show
OUTPUT(SimTime, " [V] Student: ", ASK st TO Nr, " Obsluzony w okienku2");
END IF;
zmlos:=ASK los Sample();
IF zmlos > 0.3
IF ASK st TO show
OUTPUT(SimTime, " [>>] Okienko 2 przekierowuje Studenta Nr ", ASK st TO
Nr," do kolejki 2, zmlos=", zmlos);
END IF;
ASK Kolejka2 TO Wstaw(st);
ELSE
IF ASK st TO show
OUTPUT(SimTime, " [X] Student Nr ", ASK st TO Nr, " OPUSCIL SYSTEM,
zmlos=", zmlos);
END IF;
czasprzebywania:=SimTime - ASK st TO CzasWejscia;
ASK st TO usun();
END IF;
END WHILE;
DEC(stanowiska);
END METHOD;
END OBJECT;
OBJECT Okienko3Obj;
ASK METHOD Ustaw(IN sh: REAL; IN sc: REAL; IN kol: Kolejka3Obj; IN kol1: Kolejka1Obj);
BEGIN
shape:=sh;
scale:=sc;
Kolejka3:=kol;
NEW(los);
Kolejka1:=kol1;
zajete:=FALSE;
END METHOD;
TELL METHOD Obsluguj();
VAR
st:StudentObj;
zmlos:REAL;
BEGIN
zajete:=TRUE;
WHILE ASK Kolejka3 TO numberIn > 0
st:=ASK Kolejka3 TO Remove();
IF ASK st TO show
OUTPUT(SimTime, " [@] Rozpoczeto obsluge studenta nr ", ASK st TO Nr," w okienku
3, stan stanowiska:", zajete);
END IF;
WAIT DURATION Weibull(shape,scale)
ON INTERRUPT;
END WAIT;
IF ASK st TO show
OUTPUT(SimTime, " [V] Student: ", ASK st TO Nr, " Obsluzony w okienku3");
END IF;
zmlos:=ASK los Sample();
IF zmlos > 0.4
IF ASK st TO show
OUTPUT(SimTime, " [>>] Okienko 3 przekierowuje Studenta Nr ", ASK st TO
Nr," do kolejki 1, zmlos=", zmlos);
END IF;
ASK Kolejka1 TO Wstaw(st);
ELSE
IF ASK st TO show
OUTPUT(SimTime, " [X] Student Nr ", ASK st TO Nr, " OPUSCIL SYSTEM,
zmlos=", zmlos);
END IF;
czasprzebywania:=SimTime - ASK st TO CzasWejscia;
ASK st TO usun();
END IF;
END WHILE;
zajete:=FALSE;
END METHOD;
END OBJECT;
OBJECT StudentObj;
ASK METHOD ustaw(IN numer: INTEGER; IN kol:Kolejka1Obj; IN show2:BOOLEAN);
BEGIN
Nr:=numer;
show:=show2;
Kolejka1:=kol;
END METHOD;
ASK METHOD usun();
BEGIN
DISPOSE(SELF);
END METHOD;
ASK METHOD ustawCzas();
BEGIN
CzasWejscia:=SimTime;
END METHOD;
END OBJECT;
VAR
okienko1:Okienko1Obj;
okienko2:Okienko2Obj;
okienko3:Okienko3Obj;
kolejka1:Kolejka1Obj;
kolejka2:Kolejka2Obj;
kolejka3:Kolejka3Obj;
generator:GeneratorObj;
ch:CHAR;
srednia,odchylenie,lo,hi,min,mean,max,shape,scale,praw1,praw2,praw3:REAL;
ogr1,ogr2,losob,stwatch:INTEGER;
monITS1, monITS2, monITS3, monSTA1, monSTA2: ITimedStatObj;
monRS1, monRS2: RStatObj;
BEGIN
NEW(okienko1);
NEW(okienko2);
NEW(okienko3);
NEW(kolejka1);
NEW(kolejka2);
NEW(kolejka3);
NEW(generator);
stwatch:=0;
srednia:=0.1;
odchylenie:=0.01;
ogr1:=30;
ogr2:=3;
lo:=20.0;
hi:=30.0;
min:=10.0;
mean:=20.0;
max:=30.0;
shape:=17.0;
scale:=11.5;
losob:=10;
ASK generator TO Ustaw(srednia, odchylenie, kolejka1,stwatch);
ASK kolejka1 TO Ustaw(okienko1, ogr1);
ASK okienko1 TO Ustaw(lo,hi,kolejka1,kolejka2,kolejka3);
ASK kolejka2 TO Ustaw(okienko2);
ASK okienko2 TO Ustaw(min,mean,max,kolejka2);
ASK kolejka3 TO Ustaw(okienko3, ogr2);
ASK okienko3 TO Ustaw(shape,scale,kolejka3,kolejka1);
TELL generator TO Generuj(losob);
StartSimulation();
monITS1 := GETMONITOR(ASK kolejka1 TO dlugosc, ITimedStatObj);
monITS2 := GETMONITOR(ASK kolejka2 TO dlugosc, ITimedStatObj);
monITS3 := GETMONITOR(ASK kolejka3 TO dlugosc, ITimedStatObj);
monSTA1 := GETMONITOR(ASK okienko1 TO stanowiska, ITimedStatObj);
monSTA2 := GETMONITOR(ASK okienko2 TO stanowiska, ITimedStatObj);
monRS1 := GETMONITOR(ASK okienko2 TO czasprzebywania, RStatObj);
monRS1 := GETMONITOR(ASK okienko3 TO czasprzebywania, RStatObj);
OUTPUT
("=========================================================================");
OUTPUT ("SREDNIA DLUGOSC KOLEJKI1: ",ASK monITS1 TO Mean(), " ODCHYLENIE: ", ASK
monITS1 TO StdDev());
OUTPUT ("SREDNIA DLUGOSC KOLEJKI2: ",ASK monITS2 TO Mean(), " ODCHYLENIE: ", ASK
monITS2 TO StdDev());
OUTPUT ("SREDNIA DLUGOSC KOLEJKI3: ",ASK monITS3 TO Mean(), " ODCHYLENIE: ", ASK
monITS3 TO StdDev());
OUTPUT ("SREDNI CZASOBSLUGI: ",ASK monRS1 TO Mean(), " ODCHYLENIE: ", ASK monRS1
TO StdDev());
OUTPUT ("SREDNIA LICZBA ZAJETYCH KANALOW W OKIENKU1: ", ASK monSTA1 TO Mean(),
" ODCHYLENIE: ", ASK monSTA1 TO StdDev());
OUTPUT ("SREDNIA LICZBA ZAJETYCH KANALOW W OKIENKU2: ", ASK monSTA2 TO Mean(),
" ODCHYLENIE: ", ASK monSTA2 TO StdDev());
praw1 := FLOAT(ASK kolejka1 TO odrzucone)/FLOAT(ASK kolejka1 TO przyjete + ASK kolejka1 TO
odrzucone);
OUTPUT ("PRAWDOPODOBIENSTWO OBSLUZENIA PRZEZ OKIENKO1: ", praw1);
praw2 := FLOAT(ASK kolejka2 TO odrzucone)/FLOAT(ASK kolejka2 TO przyjete + ASK kolejka2 TO
odrzucone);
OUTPUT ("PRAWDOPODOBIENSTWO OBSLUZENIA PRZEZ OKIENKO2: ", praw2);
praw3 := FLOAT(ASK kolejka3 TO odrzucone)/FLOAT(ASK kolejka3 TO przyjete + ASK kolejka3 TO
odrzucone);
OUTPUT ("PRAWDOPODOBIENSTWO OBSLUZENIA PRZEZ OKIENKO3: ", praw3);
DISPOSE(okienko1);
DISPOSE(okienko2);
DISPOSE(okienko3);
DISPOSE(kolejka1);
DISPOSE(kolejka2);
DISPOSE(kolejka3);
DISPOSE(generator);
OUTPUT ("Nacisnij dowolny klawisz...");
ch:=ReadKey();
END MODULE.