A GPSS programozási nyelv

Példaprogramok

Gépsor szimulációja

A feladat.

Egy üzemben három új gépet állítanak be. Ezek ugyanazokon a munkadarabokon három egymást követő feldolgozást hajtanak végre. A tevékenységek egymáshoz szorosan nem kapcsolódnak, így várható, hogy a munkadarabok az egyes gépek között várakozni fognak. Milyen sorbanállási viszonyok alakulnak ki? Mennyire lesznek az egyes gépek kihasználva? Hány percig fog tartani a munkadarabok feldolgozása a gépsoron? Ilyen, és ehhez hasonló kérdésekre várjuk a feleletet.

Korábbi tapasztalatokból ismerjük, hogy a munkadarabok a gépsorhoz várhatólag 60..160 min időközökben, jó közelítéssel egyenletes eloszlásban érkeznek. Háromféle munkadarab van: a), b), és c) típus. Ezeket az 1. és a 3. gép azonosan, a 2. gép viszont fajtájuknak megfelelően dolgozza fel. A munkadarabok típusok szerint össze-vissza érkeznek, de átlagosan egyötödük b), 50%-uk pedig c) típusú. A gyári prospektusokból ismerjük a gépek teljesítőképességét:

Gépek Feldolgozási idő
1. 70 min.
2. Munkadarabtól függően: a) típus: 20 min, b) típus: 80 min, c) típus:120 min.
3. Egyedi beállításoktól függően 30..90 min.

A modell.

A modellben a három gépet egy-egy kiszolgálóegység testesíti meg. Ezeket a GEP1, GEP2, GEP3 szimbólumokkal látjuk el. Mindegyik előtt sorstatisztikát mérünk ki (SOR1, SOR2, SOR3). A munkadarabok típusonkénti eloszlását egy lépcsős függvénnyel (ELOSZ) szimuláljuk. A munkadarabok áthaladásának idejét az 1-es gyakorisági táblázattal figyeljük. Mivel a gépek csatlakozása soros, így a modell sem túl bonyolult. A szimulációt 1000 munkadarabra végezzük el.

Az eredeti program

BLOCK CARD
NUMBER *LOC OPERATION A,B,C,D,E,F,G COMMENTS NUMBER
SIMULATE 1
2
1 GENERATE 110,50 Munkadarabok erkezese 3
2 QUEUE SOR1 Sorbanallas az 1. gep elott 4
3 SEIZE GEP1 A gep lefoglalasa 5
4 DEPART SOR1 Kilepes a sorbanallasbol 6
5 ADVANCE 70 A feldolg. 70 percig tart 7
6 RELEASE GEP1 tavozas a geprol 8
* 9
7 QUEUE SOR2 10
8 SEIZE GEP2 11
9 DEPART SOR2 12
10 ADVANCE FN$ELOSZ a feldolg. idejet az 1. fuggveny 13
11 RELEASE GEP2 hatarozza meg 14
* 15
12 QUEUE SOR3 16
13 SEIZE GEP3 17
14 DEPART SOR3 18
15 ADVANCE 60,30 a feldolg. ideje a 30..90 inter- 19
16 RELEASE GEP3 vallumban veletlenszeru 20
17 TABULATE 1 a futasi ido tablazasa 21
18 TERMINATE 1 a munkadarab kilep a modellbol 22
* 23
1 TABLE M1,100,25,20 24
ELOSZ FUNCTION RN1,D3 25
0.3,20/0.5,80/1.,120 26
* 27
START 1000 a modellen vegigfuto tranzakciok 28
END szama = 1000 29

Eredmények

RELATIVE CLOCK 109545 ABSOLUTE CLOCK 109545

BLOCK COUNTS

BLOCK CURRENT TOTAL BLOCK CURRENT TOTAL
1 0 1002 11 0 1001
2 0 1002 12 1 1000
3 0 1002 13 0 1000
4 0 1002 14 0 1000
5 0 1002 15 0 1000
6 0 1002 16 0 1000
7 0 1002 17 0 1000
8 0 1002 18 0 1000
9 0 1002
10 1 1001


FACILITY AVERAGE
UTILIZATION
NUMBER
ENTRIES
AVERAGE
TIME/TRANS
SEIZING
TRANS. NO.
PREEMPTING
TRANS. NO.
GEP1 .640 1002 70.000
GEP2 .744 1002 81.297 12
GEP3 .545 1000 59.668


QUEUE MAXIMUM
CONTENTS
AVERAGE
CONTENTS
TOTAL
ENTRIES
ZERO
ENTRIES
PERCENT
ZEROS
AVERAGE
TIME/TRANS
SAVERAGE
TIME/TRANS
SOR1 1 .005 1002 903 90.11 .543 5.495
SOR2 5 .274 1002 531 52.99 29.966 63.749
SOR3 3 .090 1001 725 72.42 9.891 35.783

TABLE 1

ENTRIES IN TABLE MEAN ARGUMENT STANDARD DEVIATION SUM OF ARGUMENTS
1000 251.414 73.937 251414.000


UPPER
LIMIT
OBSERVED
FREQUENCY
PERCENT
OF TOTAL
CUMULATIVE
PERCENTAGE
CUMULATIVE
REMAINDER
MULTIPLE
OF MEAN
DEVIATION
FROM MEAN
100 0 .00 .0 100.0 .398 -2.047
125 1 .10 .1 99.9 .497 -1.709
150 46 4.60 4.7 95.3 .597 -1.371
175 57 5.70 10.4 89.6 .696 -1.033
200 106 10.60 21.0 79.0 .796 -.695
225 127 12.70 33.7 66.3 .895 -.357
250 222 22.20 55.9 44.1 .994 -.019
275 200 20.00 75.9 24.1 1.094 .319
300 96 9.60 85.5 14.5 1.193 .657
325 45 4.50 90.0 10.0 1.293 .995
350 28 2.80 92.8 7.2 1.392 1.333
375 19 1.90 94.7 5.3 1.492 1.671
400 7 .70 95.4 4.6 1.591 2.009
425 7. .70 96.1 3.9 1.690 2.347
450 10 1.00 97.1 2.9 1.790 2.685
475 9 .90 98.0 2.0 1.889 3.024
500 7 .70 98.7 1.3 1.989 3.362
525 2 .20 99.2 .8 2.188 4.038
550 2 .20 99.2 .8 2.188 4.038
OVERFLOW 8 .80 100.0 .0

AVERAGE VALUE OF OVERFLOW 577.87

Az eredmények kiértékelése.Első végignézésre valószínűsíthetjük, hogy a modell jól futott le (pl. a hibajelzések hiányából, a teljes blokkszámlálók értékeiből, stb.). Az eredményeket nézve megállapítható, hogy a három gép átlagos kihasználtsága közel azonos, bár kissé alacsony, de egyik sincs a többihez képest jobban megterhelve. Talán csak a 3. gépnek (54,5 %) vannak még nagyobb mértékű kihasználatlan tartalékai (ha nem túlságosan speciális célgép, akkor más forrásból származó munkadarabokat is fel lehetne itt dolgoztatni). Vannak további kihasználatlan tartalékok is, következésképpen az egész gépsor nagyobb terhelést is elbírna.
A sorstatisztikákat vizsgálva feltűnő a nulla késleltetésű tranzakciók nagy aránya. Ez jó vagy közepes gépleterheltségeket tekintve inkább a jó ütemezésnek, a gépek harmonikus kapcsolódásának köszönhető. Érdemes lenne nagyobb leterheltség (a munkadarabok sűrűbb érkezése) mellet is megvizsgálni a sorbanállási viszonyokat. A 2. gép előtt kialakuló sor a leghosszabb (itt az átlagos várakozás 30 perc is lehet), de ez az esetenkénti hosszú feldolgozással magyarázható. A 3. sorstatisztika furcsasága a kicsi átlagos hossz (0,09 munkadarab) és az ehhez képest nagy maximális hossz (3 munkadarab): ennek oka a második gépről lekerülő munkadarabok rendszertelensége lehet.
A gyakorisági táblázat megadja, hogy az átfutási idő átlagosan kb. 250 min. Az átfutási idő eloszlása azonban széthúzódik, ha nem is túlságosan (a szórás 74 min). Látható, hogy a minimális idő közelében csak 1 tranzakció futott, míg a maximális idő akár a 600 min-t is elérheti. A esetek kétharmadában viszont az átfutási idő 200..300 perc között maradt.

Következtetések. A gépsor beállítása teljesítményben bírni fogja a leterhelést, sőt még kapacitásfeleslegek is mutatkozni fognak. Célszerű lenne még más leterhelési variánsokat is szimulálni.

Programozási változatok. Ugyanezt a modellt még két másik programváltozatban is bemutatjuk. Az első a sorstatisztikát felhasználói listákkal helyettesíti, és a gépek kezelését ciklusban, indirekt címzéssel intézi. A másik a makrók alkalmazásával rövidíti le a programot.

A második változat

BLOCK CARD
NUMBER *LOC OPERATION A,B,C,D,E,F,G COMMENTS NUMBER
SIMULATE 1
* 2
1 GENERATE 110,50 3
2 ASSIGN 7,3 ciklusszamlalo 4
3 CIKL ASSIGN 1+,1 feld. hely es sa. sorszama 5
4 ASSIGN 3,FN2 Feldolgozasi ido 6
5 LINK *1,P3,FELD Felvitel a felhasznaloi listaba a 7
* Feldolg. ido szerint 8
6 FELD SEIZE *1 9
7 ADVANCE *3 10
l8 RELEASE *1 Felszabaditja a feld. helyet 11
9 UNLINK *1,FELD,1 Tavozik a felhasznaloi listabol 12
* 13
10 LOOP 7,CIKL a ciklus vege 14
11 TABULATE 1 15
12 TERMINATE 1 16
* 17
1 TABLE M1,100,25,20 18
ELOSZ FUNCTION RN1,D3 19
0.3,20/0.5,80/1.,120 20
2 FUNCTION P1,M3 21
V2/FN$ELOSZ/FN3 22
3 FUNCTION RN2,C2 23
0,30/1,91 24
2 VARIABLELE 70 25
* 26
START 1000 27
END 28

A harmadik változat

BLOCK CARD
NUMBER *LOC OPERATION A,B,C,D,E,F,G COMMENTS NUMBER
SIMULATE 1
* 2
FELD STARTMACRO a ’feld’ makro egy gep lefoglalasat 3
QUEUE #A es az elotte levo sorbanallast 4
SEIZE #B allitja ossze 5
DEPART #A 6
ADVANCE #C,#D 7
RELEASE #B 8
ENDMACRO 9
* 10
1 GENERATE 110,50 11
FELD MACRO SOR1,GEP1,70,0 12
FELD MACRO SOR2,GEP2,FN$ELOSZ,0 13
FELD MACRO SOR3,GEP3,60,30 14
17 TABULATE 1 15
18 TERMINATE 1 16
* 17
1 TABLE M1,100,25,20 18
ELOSZ FUNCTION RN1,D3 19
0.3,20/0.5,80/1.,120 20
* 21
START 1000 22
END 23

Útkereszteződés szimulációja

A feladat

Egy kisebb útkereszteződésben közlekedési lámpát szerelnek fel. Milyen időközönként váltson a lámpa, hogy minél jobb legyen az áteresztő-képesség, rövidebbek a várakozási sorok?

Forgalomszámlálási adatokból ismerjük, hogy az útkereszteződéshez közeledő autók exponenciális eloszlás szerint érkeznek. Érkezésük várható időköze: az első utcánál északi irányból 30 s, déli irányból 37 s; a második utcánál keleti irányból 12 s, nyugati irányból 10 s.

A kereszteződésen egy autó átlagosan 3 s alatt halad át (figyelembe véve a felgyorsulást és a követési távolságot is).
A lámpák váltásának ciklusát kb.100..120 s-osra tervezzük!

A modell

A modellt négy, viszonylag független alrendszerre bontjuk: a két utca forgalmára, a lámpák váltására, és az idő figyelésére. A szimulációt 10 h időtartamra végezzük. Ezt megelőzi egy egyórás bevezető futás, hogy a szimuláció ne üres utcákkal, ne egy kitüntetett lámpaállással kezdődjön, hanem már közelítően stacioner állapotban.

Az egyes utcák szimulációjánál csak a legforgalmasabb irányt vesszük figyelembe. Az autók az útkereszteződésen csak akkor haladhatnak át, ha a lámpa zöldet mutat, és az előző kocsi már elhagyta a kereszteződést. Ha e feltételek valamelyike nem teljesül, az autó a sorstatisztikában (AUTO1 vagy AUTO2) várakozni kényszerül. A kocsik egymás utáni áthaladásakor a sorstatisztika előremozdítását programozni nem kell, ez automatikus.

A lámpa váltásának szimulálásához egy állandóan körben futó tranzakciót használunk fel. Ez nemcsak a lámpa állását változtatgatja (1. utcának zöldet az S, pirosat az R állás jelent; a 2. utcára értelemszerűen a fordítottja érvényes), hanem a kereszteződést is lefoglalja a keresztező irányokban (vagy akár mindkét irányban). A modellben a sárga állást holtidőnek tekintjük.

A szimulációt a lámpa váltásának három változatával futtattuk le:

1. utcának zöld 1. utcának piros
30 s 90 s
40 s 70 s
50 s 55 s

Ehhez felhasználtuk a blokkok újradefiniálásának lehetőségét.

A program

BLOCK NUMBER *LOC OPEREATION A,B,C,D,E,F,G COMMENTS CARD NUMBER
SIMULATE 1
UNLIST ABS 2
* 3
* ÚTKERESZTEZŐDÉS SZIMULÁCIÓJA 4
* 5
EXP FUNCTION RN1,C24 6
.0,.0/.1,.104/.2,.222/.3,.355/.4,.509/.5,.69/.6,.915/.7,1.2/.75,1.38/ 7
.8,1.6/.84,1.83/.88,2.12/.9,2.31/.92,2.52/.94,2.81/.95,2.99/.96,3.2/ 8
.97,3.5/.98,3.9/.99,4.6/.995,5.3/.998,6.2/.999,7/.9999,8 9
* 10
* kocsik az egyik irányból 11
* 12
1 GENERATE 30,FN$EXP átlagos követési idő=30 sec 13
2 QUEUE AUTO1 beállás a sorba 14
3 SEIZE UTCA1 a sorból kilépni csak akkor lehet, 15
4 GATE LS LAMPA ha 1./ a kereszteződésben nincs autó 16
5 DEPART AUTO1 2./a lámpa zöldet (s) mutat 17
6 ADVANCE 3 3 sec az áthaladási idő 18
7 RELEASE UTCA1 19
8 TERMINATE 20
* 21
* kocsik a másik irányból 22
* 23
9 GENERATE 10,FN$EXP átlagos követési idő =10 sec 24
10 QUEUE AUTO2 25
11 SEIZE UTCA2 26
12 GATE LR LAMPA a zöldet ebben az irányban ’r’ jelzi 27
13 DEPART AUTO2 28
14 ADVANCE 3 29
15 RELEASE UTCA2 30
16 TERMINATE 31
* 32
* a közlekedési lámpa állása 33
* 34
17 GENERATE 1,,,1,1 a zöldnek egy lesz a prioritása 35
18 SEIZE UTCA1 alapállapot, hogy az útkereszteződés 36
19 SEIZE UTCA2 mindkét irányban foglalt 37
20 LAMPA LOGIC S LAMPA a lámpa zöldre vált az 1. irány felé 38
21 RELEASE UTCA1 39
22 ZOLD ADVANCE 30 az 1. irányban 30 sec-ig zöld 40
23 LOGIC R LAMPA a lámpa pirosra vált az 1. irány felé 41
24 SEIZE UTCA1 42
25 RELEASE UTCA2 az 1. irányban 90 sec-ig piros 43
26 PIROS ADVANCE 90 44
27 SEIZE UTCA2 a lámpa újrakezdi a ciklust 45
28 TRANSFER ,LAMPA 46
* 47
* segédóra a szimuláció időtartamához 48
* 49
29 GENERATE 3600 a tranzakciók az órák múlását mutatják 50
30 TERMINATE 1 51
* 52
START 1,NP 1 órás bevezető futás 53
RESET 54
START 10 a szimuláció időtartama 10 óra 55
QUE TITLE ,AZ AUTOK VARAKOZASA A LAMPA ELOTT: 56
SPACE 1 57
QUE INCLUDE Q$UTCA1-Q$UTCA2/1,7,2 58
SPACE 3 59
CLEAR 60
22 ZOLD ADVANCE 40 61
MULTIPLE DEFINITION OF SYMBOL IN ABOVE CARD
26 PIROS ADVANCE 70 62
MULTIPLE DEFINITION OF SYMBOL IN ABOVE CARD
START 1,NP 63
RESET 64
START 10 65
QUE TITLE ,AZ AUTOK VARAKOZASA A LAMPA ELOTT: 66
SPACE 1 67
QUE INCLUDE Q$UTCA1-Q$UTCA2/1,7,2 68
SPACE 3 69
CLEAR 70
22 ZOLD ADVANCE 50 71
MULTIPLE DEFINITION OF SYMBOL IN ABOVE CARD
26 PIROS ADVANCE 55 72
MULTIPLE DEFINITION OF SYMBOL IN ABOVE CARD
START 1,NP 73
RESET 74
START 10 75
QUE TITLE ,AZ AUTOK VARAKOZASA A LAMPA ELOTT: 76
SPACE 1 77
INCLUDE Q$UTCA1-Q$UTCA2/1,7,2 78
END 79

Eredmények

BLOCK NUMBER SYMBOL REFERENCES BY CARD NUMBER
20 LAMPA 28
26 PIROS
22 ZOLD

FACILITY SYMBOLS AND CORRESPONDING NUMBER
1 UTCA1
2 UTCA2

QUEUE SYMBOLS AND CORRESPONDING NUMBERS
1 AUTO1
2 AUTO2

LOGIC SWITCH SYMBOLS AND CORRESPONDING NUMBERS
1 LAMPA

FUNCTION SYMBOLS AND CORRESPONDING NUMBERS
1 EXP

**** ASSEMBLY TIME = .17 MINUTES ****

AZ AUTOK VARAKOZASA A LAMPA ELOTT:

QUEUE AVERAGE
TIME/TRANS
MAXIMUM
CONTENTS
AUTO1 38.683 10
AUTO2 6.716 10

AZ AUTOK VARAKOZASA A LAMPA ELOTT:

QUEUE AVERAGE
TIME/TRANS
MAXIMUM
CONTENTS
AUTO1 25.148 7
AUTO2 11.716 11

AZ AUTOK VARAKOZASA A LAMPA ELOTT:

QUEUE AVERAGE
TIME/TRANS
MAXIMUM
CONTENTS
AUTO1 16.212 7
AUTO2 18.458 13

***** TOTAL RUN TIME (INCLUDING ASSEMBLY) = .92 MINUTES *****

GPSS-kiíratás. A programlista (az abszolút kódolás kiíratását most az UNLIST blokkal letiltottuk), és a szimbólumtáblázat után jelennek meg a szerkesztett kiíratások. Itt most csak az autók kereszteződés előtti átlagos várakozási idejét, ill. a sorstatisztikák maximális hosszát kértük ki.

Az eredmények kiértékelése. Látható, hogy a lámpaváltások idejének változásával hogyan csökken, ill. válik egyenletesebbé a várakozások ideje. Ez nem véletlen. Több szimulációs futást kellett elvégezni (esetenként más és más időkkel, mindig ismerve az előzők eredményeit) ahhoz, hogy a korábbi eredményeket értékelve megállapíthassuk a csökkenés tendenciáját és az egyező várakozási idők feltételét. Itt már csak bizonyos eseteket gyűjtöttünk ki.

Figyelemre méltó, hogy a kocsik érkezési sűrűségével arányos váltási idők (30 s és 90 s) mennyire aszimmetrikus várakozási időket eredményeztek. Ugyanakkor azonban a sorstatisztikák maximális hossza azonos. Az átlagos várakozási idők közel azonos nagyságát ezzel szemben kb. azonos idejű lámpaváltások biztosítják, noha a 2. utcáról mintegy háromszor annyi kocsi érkezik, mint a másik utcából. Ez utóbbi különbség azonban úgy látszik, csak a várakozási sorok hosszában jelentkezik.

Következtetések. Céljainknak a közel azonos időközönként váltó közlekedési lámpa felel meg. Célszerű lenne azonban a továbbiakban megvizsgálni, hogy ha a ciklusidőt 100 s-nél kisebbnél választanánk, nem csökkenne-e le még jobban az átlagos várakozási idő. Megvizsgálható az is, hogy a 13 autóból álló (igaz, hogy maximális) várakozási sor nem túl hosszú-e, nem lóg-e bele valamely előző útkereszteződésbe (ennek elkerülésére vagy a lámpaváltásokat kellene felgyorsítani, vagy visszatérni aszimmetrikusabb várakozási időkhöz).