GPSS

General Purpose Simulation System ( GPS ) är ett allmänt programmeringsspråk för diskret tidssimulering , där en simuleringsklocka avancerar i diskreta steg. Ett system modelleras när transaktioner kommer in i systemet och skickas från en tjänst (representerad av block) till en annan. Det används främst som ett processflödesorienterat simuleringsspråk; detta är särskilt väl lämpat för problem som en fabrik .

Historia

GPSS utvecklades av IBM:s Geoffrey Gordon i början av 1960-talet. Han döpte det till G ordons P rogrammerbara simuleringssystem . Namnet ändrades när IBM bestämde sig för att släppa det som en produkt.

"General Purpose"-delen av det nya namnet var att skapa en standard för väntkösimuleringar.

De ursprungliga utgåvorna var för IBMs stordatorer 7044 och 7090 . Därefter kom det utsläpp för IBM 360 , Univac 1108 och CDC.

Med tiden utvecklades andra implementeringar, på andra språk och inriktade på olika storlekssystem, inklusive DEC :s VAX, en specialiserad APL -version för storskaliga Univac-system, och Macintosh , bland annat.

JGPSS

J GPSS (Java General Purpose Simulation System) är ett Java -baserat verktyg som utvecklades för att lära ut GPSS-simuleringsspråket.

Språkbeskrivning

GPSS liknar en LEGO- struktur där klossar väljs av modellmodellen för specifika funktioner för att imitera ett visst system.

Språket är varken procedurmässigt, objektorienterat eller funktionellt programmerat. Världen simuleras med enheter som rör sig genom modellen. Dessa enheter, som kallas Transaktioner , är tänkta att flytta från Block till Block , där ett Block är en kodrad och representerar enhetsåtgärder som påverkar själva Transaktionen eller andra enheter.

Block kan vara anläggningsorienterade (som maskiner i en arbetsbutik) eller transaktionsorienterade (sådana delar av pågående arbete, signaler i elektroniska komponenter eller dokument i ett byråkratiskt förfarande). GPSS håller automatiskt reda på statistik som kommer i fast form i slutet av en simulering som standardrapport. GPSS är en av de äldsta språkkandidaterna för det första objektorienterade tillvägagångssättet, eftersom även om transaktioner verkligen är instanser av modellobjekt, är block metoder i det moderna konceptet OOP.

Entiteter kan brett klassificeras i Resurser, Beräkningsenheter och Statistiska enheter. Resurser som anläggningar och lager representerar begränsade kapacitetsresurser. Beräkningsenheter, som Ampervariables (variabler), funktioner och slumpgeneratorer används för att representera tillståndet för transaktioner eller delar av deras miljö. Statistiska enheter, som köer eller tabeller (histogram) samlar in statistisk information av intresse.

Exempelkod

Följande exempel, hämtat från Simulering med GPSS , är "Hej världen!" av GPSS och kommer att illustrera huvudkoncepten.

Syftet är att simulera en dags drift av en frisörsalong. Kunder anländer i ett slumpmässigt konstant flöde, går in i butiken, köar om frisören är upptagen, klipper sig efter först till kvarn-principen och lämnar sedan butiken. Vi vill veta den genomsnittliga och maximala väntekön samt antalet kunder.

SIMULERA ; Definiera modell * * Modellsegment 1 * GENERERA 18,6 ; Kunden anländer var 18:e ±6 min KÖ Stolar ; Ange raden SEIZE Joe ; Fånga frisören DEPART Stolar ; Lämna linjen ADVANCE 16,4 ; Klipp av håret på 16±4 min RELEASE Joe ; Frisör frisör AVSÄTT ; Lämna butiken * * Modell segment 2 * GENERATE 480 ; Timern anländer vid tidpunkten = 480 mn AVSLUTA 1 ; Stäng av körningen * * Styrkort * START 1 ; Starta en körning END ; Slutmodell

"Programmet" består av SIMULATE- och END -satserna och är uppdelat i "modellsegment" och "kontrollkort".

Det första segmentet modellerar kunder. GENERATE - blocket skapar ett flöde av transaktioner och schemalägger dem för att komma in i modellen med en inter-ankomsttid jämnt fördelad över intervallet 18±6. Det är programmerarens ansvar att tolka dessa transaktioner som kunder och att förstå att tiden ska räknas i minuter. Transaktionerna börjar existera i GENERATE -blocket och går från block till block, enligt vissa regler, tills de når en TERMINATE som tar bort dem från modellen.

Normalt går transaktioner från ett block till nästa, så kundtransaktionerna lämnar GENERATE- blocket för att gå in i QUEUE Chairs- blocket. Detta block simulerar en väntekö och samlar in statistik i enlighet med detta. I exemplet materialiserar det sig en rad stolar och i slutet av simuleringen kommer vi att veta bland annat den maximala köstorleken (hur många stolar som behövs) och den genomsnittliga väntetiden. QUEUE - blocket kräver namnet på kön som en parameter, eftersom mer än en kö kan finnas i modellen. Var och en är associerad med ett DEPART -block, som utlöses när transaktionen lämnar kön. GPSS kommer ihåg vilka transaktioner som står i kön, så att det är möjligt att veta den genomsnittliga tidsåtgången, och för att kontrollera att ingen buggytransaktion lämnar en kö utan att tidigare ha gått in i den.

Efter QUEUE chairs -blocket kommer transaktionen att försöka fortsätta till SEIZE Joe -blocket, ett block som simulerar infångandet av anläggningen som heter Joe. Faciliteter modellerar enstaka servrar med kapacitet ett. Om anläggningen är upptagen SEIZE att neka transaktionsförsöket rätten att gå in. I exemplet kommer kunden att vänta i KÖ- blocket. Om det är gratis, eller så snart det blir tillgängligt, kommer transaktionen att tillåtas att fånga anläggningen, markera den som upptagen för andra transaktioner och börja räkna servicetiden och annan statistik, tills samma transaktion passerar motsvarande RELEASE Joe blockera.

SEIZE / RELEASE - paren är länkade av anläggningens namn, eftersom många oberoende anläggningar kan finnas i modellen. De kan modellera operatörer, som en frisör, en reparatör, en agent, men också utrustning, som en kran, en bensinstation, ett auktorisationsdokument, etc., faktiskt vad som helst med kapacitet ett. För att simulera flera parallella servrar, som ett team på fem barberare, eller en ugn med en kapacitet på 10, använder GPSS enheter som heter STORAGE s.

Efter att en kund har gripit Joe, fortsätter hon till nästa uttalande som är ADVANCE 16,4 , vars uppgift är att frysa enheten under en föreskriven tid, här ett slumpmässigt tal plockat mellan 16-4=12 och 16+4=20mn . Andra tjänstetidsfördelningar är tillgängliga via GPSS FUNCTION (en på något sätt annorlunda begrepp än funktion i andra programmeringsspråk). Under den tiden kommer andra transaktioner att tillåtas röra sig genom modellen, vilket blockerar vissa andra faciliteter som kan finnas i modellen, men inte Joe eftersom denna anläggning är upptagen med den frusna kunden. Efter den föreskrivna tiden kommer kunden att vakna, gå vidare till nästa uttalande, som frigör Joe, och TERMINATE .

Då kommer nästa transaktion på det föregående blocket, det vill säga en kund som sitter på en stol, att kunna SLÅ Joe . För att välja "nästa" transaktion använder GPSS först till kvarn-principen, med prioritet. Andra urvalspolicyer kan programmeras genom direkt manipulering av den framtida händelsekedjan .

Parallellt med detta första segment, som simulerar kundbeteendet, simulerar ett andra modellsegment slutet på dagen. Vid tidpunkten 480mn = 8h genereras en enhet d, som kommer att AVSLUTA i nästa block. Denna gång, TERMINATE som en parameter på 1, vilket betyder att en specialräknare minskas med 1. När den räknaren når 0, stannar programmet och resultatet skrivs ut. Denna speciella räknare ställs in med START- satsen. I exemplet är den inställd på ett, så simuleringen avslutas efter en körning på 480 minuter i simulerad tid.

Utgången innehåller:

ANLÄGGNINGSMEDDELANDE ANTAL MEDELBESLUTNING FÖREBYGGANDE ANVÄNDNING TID/TRANS TRANS. NEJ. TRANS. NEJ. Joe .860 26 15.884 26 KÖ MAXIMAL MEDEL TOTALT NOLL PROCENT MEDEL $AVERAGE TABELL AKTUELLT INNEHÅLL INNEHÅLLSANMÄRKNINGAR NOLLSTID/TRANS TID/TRANSANTAL INNEHÅLL Stolar 1 .160 247 4412A .12A 1 .160 447 12A .12A. /TRANS = MEDELTID/TRANS EXKLUSIVE NOLL ENHETER

Det indikerar att Joe var upptagen 86,0 % av tiden, klippte 26 kunder och att klippningen tog 15,88 minuter i genomsnitt. Joe klippte för övrigt håret på kund nummer 26 när simuleringen stängdes. Inga programmeringsåtgärder vidtogs för att frisören skulle avsluta håret innan han stängde butiken.

Det indikerar också att maximalt 1 kund observerades som väntade på hans tur, i själva verket var antalet väntande kunder i genomsnitt 0,160. Totalt kom 27 kunder i kön, så att kund nummer 27 fortfarande satt och väntade på sin tur när Joe stängde butiken. Av dessa 27 kunder betjänades 12 utan att behöva vänta. Faktum är att kön var tom 44,4 % av tiden. Den genomsnittliga väntetiden var 2,851 min, och den genomsnittliga väntetiden för de 15=27-12 kunder som verkligen väntade var 5,133 min.

Se även

externa länkar