Sprawozdanie Malinowski odt

WOJSKOWA AKADEMIA TECHNICZNA

im. Jarosława Dąbrowskiego



Podstawy symulacji komputerowej







Sprawozdanie z zadania laboratoryjnego







Prowadzący: mgr inż. Michał Kapałka

Sprawozdanie wykonał: Sebastian Malinowski

Grupa: I7E1S1





Treść zadania


Napisać program symulujący działanie sieci SMO.
















Przy realizacji zadania należy określić:

Ti – zmienna losowa oznacząjaca czas pomiędzy kolejnymi napływami zgłoszeń do systemu

Oi – zmienna losowa oznacząjaca czas obsługi pojedynczego zgłoszenia w gnieździe

pi – prawdopodobieństwa przemieszczenia się zgłoszenia po danym łuku

Li – długośc kolejek poszczególnych SMO

ALi – alogrytm kolejek (w przypadku istnienia kolejki z priorytetami należy przyjąć, że zgłoszenia posiadają priorytety)

Mi – liczba stanowisk obsługi w gniazdach

Ri – ilość zgłoszeń jednocześnie napływających do systemu


  1. Rozkłady zmiennych losowych:

    1. Wykładniczy

    2. Erlanga

    3. Normalny

    4. Jednostajny

    5. Trójkątny

    6. Weibulla

  2. Długość kolejek pojedynczych SMO

    1. ograniczone (możliwe straty)

    2. nieograniczone

  3. Algorytm kolejek

    1. FIFO

    2. LIFO

    3. Z priorytetami


Program powinien umożliwić oszacowanie następujących charakterystyk granicznych systemu oraz poszczególnych SMO:



Sposób rozwiązania


Zadanie rozpocząłem od zrobienia dekompozycji obiektowej, w jej wyniku otrzymałem następujące obiekty:


Wyróżnienie takich obiektów pozwala na zbudowanie dowolnego wariantu z zadania. Wystarczy odpowiednio zainicjować poszczególne elementy, aby otrzymać odpowiedni system. Podczas inicjalizacji obiektów ustawiane są wszystkie dane tzn. typ rozkładu zmiennych losowych, dlugości kolejek, algorytmy kolejek itp.

Obiekt SystemObj posiada dostęp do każdego innego obiektu przy pomocy referencji na obiekty, znajdują się w nim także niezbędne zmienne statystyczne, które wykorzystywane są przez obiekt monitorujący. Pozwala to na oszacowanie charakterystyk granicznych systemu.

Działanie systemu rozpoczyna się od wywołania metody typu TELL Dzialaj() przez system. Jedyna co ta metoda robi, to wprowadza w ruch poszczególne SMO oraz wejścia do systemu. Robi to wywołując odpowiednio metody Work() z obiektu SmoObj oraz GenerujZgloszenia() z obiektu WejscieSystemuObj.

Metoda GenerujZgloszenia() tworzy nowe obiekty ZgloszenieObj przypisując im czas wejścia do systemu, dzięki czemu później można obliczyć średni czas przebywania zgłoszenia w systemie oraz odchylenie standardowe. Następnie zgłoszenie kierowane jest do odpowiedniego SMO za pomocą metody Idz(). Numer SMO na które jest kierowane zależy od posiadanej referencji przez wejscie systemu na obiekt SmoObj.

Metoda Work() z obiektu SmoObj wprawia w ruch stanowiska obsługi w danym SMO przy pomocy metody Obsluguj(). Obsluga trwa przez caly czas symulacji. W czasie symulacji możliwe są 2 warianty w tej metodzie: stanowisko będzie obsługiwało zgłoszenie lub czekało na nie. Jeśli nie obsługuje, to wytracany jest czas do momentu uzyskania informacji za pomocą triggera, że w kolejce pojawiło się zgłoszenie. Jak już jest obsługiwane zgłoszenie, to pobierany jest pierwszy element z kolejki, zwiększane wartości zmiennych statystycznych dotyczących ilości zajętych kanałów w danym SMO oraz całym systemie. Dane zgłoszenia zostaje także usunięte z kolejki i tym samym zmieniona zostaje wartość kolejnych zmiennych statystycznych mowiacych o długości kolejki w całym systemie oraz konkretnym SMO. Następnie w zależności od rozkładu wytracany jest pewien czas, mówiący ile dane zgłoszenie jest obsługiwane. Po tym czasie znowu zmienne statystyczne są zmieniane. Za ich pomocą i po tym momencie można już wyznaczyć wszystkie niezbędne charakterystyki dla SMO oraz systemu. Na koniec metody Obsluguj() wywoływana jest metoda Idz() z obiektu ZgloszenieObj().

Metoda Idz() odpowiada za przemieszczanie zgloszenia pomiedzy poszczegolnymi SMO oraz wyjściem z systemu. Jeśli zgłoszenie opuszcza system to ustawiany jest jego czas przebywania w nim oraz czy został obsłużony. Jeśli zgłoszenie może wejść do kolejki danego SMO, to wywoływana jest metoda Dodaj() która, pomijając to co nazwa sugeruje, ustawia także długośc kolejki oraz czas wejścia zgłoszenia do systemu.


Sposób oszacowania charakterystyk


  1. Czas przebywania zgłoszenia w systemie

    Zapisywany jest czas wygenerowania zgłoszenia, co jest równoważne z jego wejściem do systemu. Następnie przy opuszczaniu systemu, odejmowany jest czas opuszczenia od czasu wejścia. W ten sposób osiągany jest czas przebywania zgłoszenia w systemie, który jest zapisany w odpowiedniej zmiennej statystycznej.

  2. Czas przebywania zgłoszenia w SMO

    Przy wejściu do danej kolejki zapisywany czas wejścia oraz po obsłużeniu zgłoszenia czas wyjścia. Za ich pomocą robiona jest różnica i otrzymywany czas przebywania zgłoszenia w systemie.

  3. Liczba zgłoszeń w systemie

    Przez cały czas trwania symulacji zwiększana jest zmienna statystyczna IloscZgloszenWSys. Każde wejście do systemu zwiększa jej wartość o 1, każde wyjście zmniejsza o 1. Zapamiętuje ona ile było zgłoszeń w danej chwili czasu.

  4. Liczba zgłoszeń w SMO

    To samo co wyżej, tyle, że przy użyciu zmiennej IloscZgloszenSMO oraz robione lokalnie dla danego SMO

  5. Liczba zajętych kanałów w systemie

    Zwiększanie lub zmniejszanie zmiennej IloscZajetychKanalowSys przy obsługiwaniu zgłoszenia.

  6. Liczba zajętych kanałów w SMO

    Zwiększanie lub zmniejszanie zmiennej IloscZajetychKanalowSMO przy obsługiwaniu zgłoszenia.

  7. Liczba zgłoszeń w kolejce systemu

    Zwiększanie lub zmniejszanie zmiennej IloscZgloszenWKolejkach przy dodawaniu do kolejki oraz przy obsludze usuwając je z kolejki.

  8. Liczba zgłoszeń w kolejce SMO

    Zwiększanie lub zmniejszanie zmiennej DlugoscKolejki rzy dodawaniu do kolejki oraz przy obsludze usuwając je z kolejki.

  9. Prawdopodobieństwo obsłużenia zgłoszenia w systemie
    Podzielenie ilości obsłużonych zgłoszeń które opuściły system przez całkowitą liczbę zgłoszeń jaka byłą w systemie.

  10. Prawdopodobieństwo obsłużenia zgłoszenia w SMO
    Podobnie jak w punkcie wcześniejszym, biore liczbę obsłużonych pozytywnie zgłoszeń i dziele ją przez wszystkie zgłoszenia jakie weszły do danego SMO


Przy wykorzystaniu obiektów monitorujących obliczyłem śrędnią oraz odchylenie standardowe.











Wnioski


Zadanie to pozwoliło mi poznać metody symulacji przy wykorzystaniu języka MODSIM II. Można było poznać praktyczne zastosowanie metod typu TELL oraz ASK i różnice między nimi. Na podstawie otrzymanego programu widać wykorzystanie czasu w metodach TELL oraz brak tego w metodach ASK. W języku tym znajdują się także interesujące obiekty monitorujące. Pozwalają one na zapamiętanie wartości danej zmiennej w każdej chwili czasu „t”.

MODSIM II jest językiem zorientowanym obiektowo, dzięki czemu można było także dokonać dekompozycji obiektowej, jednakże po dokładniejszym poznaniu składni i technik tego języka oraz lepszego zrozumienia zadania, początkowa dekompozycja znacznie uległa zmianie.

MODSIM II jest także językiem pascalo-podobnym, co z mojego punktu widzenia jest jego wadą, gdyż stosowana syntaktyka jest trochę problematyczna, jednakże po dłuższym spędzeniu czasu nad tym językiem, można się do niej przeyzwyczaić i nawet ją polubić. Największym problemem składniowym w tym języku jest argument wejściowy dla metody, będący tablicą. Kompilator nie pozwala podawać tablicy jako takiej, należy stworzyć typ tablicowy, który dopiero zostanie zaakceptowany.


Wyszukiwarka

Podobne podstrony:

więcej podobnych podstron