GPSS
System symulacji ogólnego przeznaczenia ( GPSS ) to język programowania ogólnego przeznaczenia do symulacji czasu dyskretnego , w którym zegar symulacji przesuwa się w dyskretnych krokach. System jest modelowany, gdy transakcje wchodzą do systemu i są przekazywane z jednej usługi (reprezentowanej przez bloki) do drugiej. Jest używany głównie jako język symulacji zorientowany na przepływ procesów; jest to szczególnie przydatne w przypadku problemów, takich jak fabryka .
Historia
GPSS został opracowany przez Geoffreya Gordona z IBM na początku lat 60. Nazwał go Programowalnym Systemem Symulacji Gordona . _ _ Nazwa została zmieniona, gdy IBM zdecydował się wypuścić ją jako produkt.
Część nowej nazwy „ogólnego przeznaczenia” polegała na stworzeniu standardu symulacji kolejek oczekujących.
Oryginalne wersje były przeznaczone dla komputerów mainframe IBM 7044 i 7090 . Następnie pojawiły się wydania dla IBM 360 , Univac 1108 i CDC.
Z biegiem czasu opracowano inne implementacje, w innych językach i ukierunkowane na systemy o różnych rozmiarach, w tym między innymi VAX firmy DEC , wyspecjalizowaną wersję APL dla wielkoskalowych systemów Univac i Macintosh .
JGPSS
J GPSS (Java General Purpose Simulation System) to narzędzie oparte na Javie , które zostało opracowane w celu nauczania języka symulacji GPSS.
Opis języka
GPSS przypomina strukturę LEGO , w której modelarz wybiera klocki do określonych funkcji, aby naśladować konkretny system.
Język nie jest programowaniem proceduralnym, obiektowym ani funkcjonalnym. Świat jest symulowany z elementami poruszającymi się po modelu. Te jednostki, zwane Transactions , są wyobrażane jako przechodzące od Block do Block , gdzie Blok jest linią kodu i reprezentuje akcje jednostkowe, które wpływają na samą Transakcję lub inne jednostki.
Bloki mogą być zorientowane na obiekty (takie jak maszyny w warsztacie) lub zorientowane na transakcje (takie jak części produkcji w toku, sygnały w elementach elektronicznych lub dokumenty w procedurze biurokratycznej). GPSS automatycznie śledzi statystyki, które na koniec symulacji przedstawiają w ustalonej formie jako standardowy raport. GPSS jest jednym z najstarszych kandydatów na język pierwszego podejścia obiektowego, ponieważ podczas gdy transakcje są naprawdę instancjami obiektów modelowych, bloki są metodami we współczesnej koncepcji OOP.
Podmioty można ogólnie podzielić na Zasoby, Jednostki obliczeniowe i Jednostki statystyczne. Zasoby, takie jak Obiekty i Magazyny , reprezentują zasoby o ograniczonej pojemności. Jednostki obliczeniowe, takie jak Ampervariables (zmienne), Funkcje i generatory losowe są używane do reprezentowania stanu Transakcji lub elementów ich środowiska. Jednostki statystyczne, takie jak kolejki lub tabele (histogramy), zbierają interesujące informacje statystyczne.
Przykładowy kod
Poniższy przykład, zaczerpnięty z Simulation using GPSS , to „Witaj, świecie!” GPSS i zilustruje główne koncepcje.
Celem jest symulacja jednego dnia pracy zakładu fryzjerskiego. Klienci przybywają w losowym, stałym napływie, wchodzą do sklepu, ustawiają się w kolejce, jeśli fryzjer jest zajęty, obcinają włosy na zasadzie „kto pierwszy, ten lepszy”, a następnie opuszczają sklep. Chcemy poznać średnią i maksymalną kolejkę oczekujących oraz liczbę klientów.
SYMULUJ ; Zdefiniuj model * * Segment modelu 1 * GENERUJ 18,6 ; Przyjazd klienta co 18±6 min KOLEJKA Krzesła ; Wpisz wiersz SEIZE Joe; Schwytaj fryzjera DEPART Krzesła; Opuść linię ADVANCE 16,4 ; Strzyżenie włosów w 16±4 min RELEASE Joe ; Uwolnij fryzjera ZAKOŃCZENIE ; Wyjdź ze sklepu * * Model segmentu 2 * GENERATE 480 ; Timer dociera do czasu = 480 min TERMINATE 1 ; Wyłącz bieg * * Karty kontrolne * START 1 ; Rozpocznij jeden bieg KONIEC ; Model końcowy
„Program” zawiera się pomiędzy instrukcjami SIMULATE
i END
i jest podzielony na „segmenty modelu” i „karty kontrolne”.
Pierwszy segment modeluje klientów. Blok GENERATE
tworzy przepływ Transakcji i planuje ich wprowadzenie do modelu z czasem między nadejściami równomiernie rozłożonym w przedziale 18±6. Programista jest odpowiedzialny za interpretację tych transakcji jako klientów i zrozumienie, że czas ma być liczony w minutach. Transakcje rozpoczynają swój byt w GENERATE
i przechodzą od bloku do bloku, zgodnie z określonymi zasadami, aż do osiągnięcia TERMINATE, który
usuwa je z modelu.
Zwykle transakcje przechodzą z jednego bloku do następnego, więc transakcje klientów opuszczą blok GENERATE
, aby wejść do bloku KOLEJKA KRZESŁA
. Ten blok symuluje kolejkę oczekujących i odpowiednio zbiera statystyki. W tym przykładzie materializuje linię krzeseł, a na koniec symulacji poznamy między innymi maksymalną wielkość kolejki (ile krzeseł jest potrzebnych) oraz średni czas oczekiwania. Blok QUEUE
wymaga nazwy kolejki jako parametru, ponieważ w modelu może istnieć więcej niż jedna kolejka. Każdy z nich jest powiązany z DEPART
blok, który jest wyzwalany, gdy transakcja opuszcza kolejkę. GPSS zapamiętuje, które transakcje znajdują się w kolejce, dzięki czemu można poznać średni czas spędzony i sprawdzić, czy żadna błędna transakcja nie opuszcza kolejki bez uprzedniego do niej wejścia.
Po bloku krzeseł w KOLEJCE
transakcja spróbuje przejść do bloku SEIZE Joe
, bloku symulującego przejęcie obiektu o nazwie Joe. Obiekty modelują pojedyncze serwery o pojemności jeden. Jeśli obiekt jest zajęty, SEIZE
odmówi próbującej transakcji prawa do wejścia. W przykładzie klient będzie czekał w KOLEJCE
blok. Jeśli jest bezpłatny lub gdy tylko stanie się dostępny, transakcja będzie mogła przejąć obiekt, oznaczyć go jako zajęty dla innych transakcji i zacząć liczyć czas obsługi i inne statystyki, dopóki ta sama transakcja nie przejdzie odpowiedniego RELEASE Joe
blok.
SEIZE / RELEASE
są połączone nazwą obiektu, ponieważ w modelu może istnieć wiele niezależnych obiektów .
Mogą modelować operatorów, takich jak fryzjer, mechanik, agent, ale także elementy wyposażenia, takie jak dźwig, stacja benzynowa, dokument autoryzacyjny itp., Właściwie wszystko, co ma pojemność jeden. Aby symulować wiele równoległych serwerów, takich jak zespół pięciu fryzjerów lub piec o pojemności 10 osób, GPSS używa bytów o nazwie STORAGE
s.
Po tym, jak klient złapie Joe, przechodzi do następnego polecenia, którym jest ADVANCE 16,4
, którego zadaniem jest zamrożenie podmiotu na określony czas, tutaj losowa liczba wybrana między 16-4=12 a 16+4=20mn . Inne rozkłady czasu obsługi są dostępne za pośrednictwem FUNKCJI GPSS
(w jakiś sposób inne pojęcie niż funkcja w innych językach programowania). W tym czasie inne transakcje będą mogły przechodzić przez model, blokując niektóre inne obiekty, które mogą istnieć w modelu, ale nie Joe, ponieważ ten obiekt jest zajęty przez zamrożonego klienta. Po wyznaczonym czasie klient się obudzi, przejdzie do następnego wyciągu, który uwolni Joe i ZAKOŃCZENIE
.
Wtedy następna transakcja na poprzednim bloku, czyli klient siedzący na krześle, będzie mógł SEIZE Joe
. Aby wybrać „następną” transakcję, GPSS stosuje zasadę „kto pierwszy, ten lepszy”, z priorytetem. Inne zasady wyboru można zaprogramować przez bezpośrednie manipulowanie łańcucha przyszłych zdarzeń .
Równolegle do tego pierwszego segmentu, symulującego zachowanie klienta, drugi segment modelu symuluje koniec dnia. W czasie 480mn = 8h jednostka jest GENEROWANA
d, która ZAKOŃCZY SIĘ
w następnym bloku. Tym razem TERMINATE
jako parametr o wartości 1, co oznacza, że licznik specjalny jest zmniejszany o 1. Gdy ten licznik osiągnie 0, program zatrzymuje się i drukowane są dane wyjściowe. Ten specjalny licznik jest ustawiany za pomocą START
. W przykładzie jest on ustawiony na jeden, więc symulacja zakończy się po jednym przebiegu 480 min w symulowanym czasie.
Wyjście zawiera:
ŚREDNIA LICZBA OBIEKTU ŚREDNIA ZAJĘCIA WYPRZEDZAJĄCE WYKORZYSTANIE WEJŚCIA CZAS/TRAN TRANS. NIE. TRANS. NIE. Joe .860 26 15,884 26 KOLEJKA MAKSYMALNA ŚREDNIA RAZEM ZERO PROCENT ŚREDNIA $ŚREDNIA TABELA BIEŻĄCA TREŚĆ WPISY TREŚĆ WPISY ZERO CZAS/TRANS CZAS/TRANS LICZBA SPIS TREŚCI Krzesła 1 .160 27 12 44,4 2,851 5,133 1 $ŚREDNI CZAS/TRANS = ŚREDNI CZAS/TRANS Z WYŁĄCZENIEM ZERO PODMIOTÓW
Oznacza to, że Joe był zajęty przez 86,0% czasu, strzyżył 26 klientów, a strzyżenie to trwało średnio 15,88 minuty. Nawiasem mówiąc, Joe obcinał włosy klientowi numer 26, kiedy symulacja została zamknięta. Nie przewidziano żadnych zapisów programowych, aby fryzjer dokończył strzyżenie przed zamknięciem sklepu.
Wskazuje to również, że zaobserwowano maksymalnie 1 klienta oczekującego na swoją kolej, w rzeczywistości liczba oczekujących klientów wynosiła średnio 0,160. W sumie do kolejki weszło 27 klientów, więc klient numer 27 nadal siedział i czekał na swoją kolej, kiedy Joe zamknął sklep. Z tych 27 klientów 12 zostało obsłużonych bez konieczności czekania. W rzeczywistości kolejka była pusta przez 44,4% czasu. Średni czas oczekiwania wyniósł 2,851 min, a średni czas oczekiwania dla 15=27-12 klientów, którzy naprawdę czekali, wyniósł 5,133 min.
Zobacz też
Linki zewnętrzne
- oprogramowania Wolverine GPSS/H
- Minuteman Software , firma dostarczająca kilka wdrożeń
- aGPSS: PC&Mac: Przeznaczony dla edukacji i profesjonalistów
- JGPSS System symulacji Java ogólnego przeznaczenia.
- GPSS360 Online GPSS360 — potomek oryginalnego GPSS