Sunteți pe pagina 1din 75

Capitolul 2.

Noţiuni introductive privind elaborarea modelului şi execuţia


simulării în limbajul GPSS/H
Obiective:
 Analiza elementelor specifice limbajelor de simulare
 Structura modelului
 Structura datelor şi expresii
 Directive de compilare
 Declaraţii de control.

2.1. Cerinţele limbajelor de simulare; tipuri de limbaje de simulare

Modelul conceptual se implementează pe calculator cu ajutorul unui limbaj de


programare. Dar care este cel mai indicat limbaj de programare? Sunt indicate limbajele de
nivel înalt ca: C, PASCAL, FORTRAN etc. acestui scop?
Limbajele de programare care au fost exemplificate, deşi pot fi folosite pentru
programarea oricărei aplicaţii nu sunt totdeauna practice în cazul unor aplicaţii specifice de
simulare. A apărut astfel necesitatea elaborării unor limbaje specializate, orientate pe
problemă, care conţin declaraţii similare conceptelor teoretice ale simulării. În cadrul acestor
limbaje specializate, modelul şi programul sunt una şi acelaşi lucru. Fazele de verificare şi
validare a modelului devin astfel simultane. Un limbaj de simulare trebuie să ofere
următoarele facilităţi:

 să permită introducerea întârzierilor în sistem sau să permită înregistrare timpului de


simulare şi modificarea ceasului de simulare
 starea modelului să fie modificată numai când au loc evenimente, iar când mai multe
evenimente au loc simultan să existe un sistem de priorităţi
 să conţină un generator de numere aleatoare rapid şi de calitate
 calculelor statistice să se facă de către limbajul de simulare şi acesta să permită
furnizarea unor rapoarte statistice
 utilizatorul să aibă acces la componentele interne şi externe ale modelului
 programul să fie uşor de citit cu posibilităţi de iniţializare, verificare, semnalizarea erorilor
şi depanare.
Câteva exemple de limbaje de simulare pentru sisteme stocastice cu evenimente
discrete sunt:

GPSS/H: prescurtarea de la denumirea englezească General Purpose System


Simulatiom. Acesta a apărut în anul 1961, iniţiat şi dezvoltat de Geoffrey Gordon (IBM), este
unul din cele mai populare limbaje pentru simularea sistemelor discrete, uşor de învăţat şi
utilizat. Versiunea descrisă, GPSS/H, a apărut în 1977, fiind dezvoltat de James Henrikson
(Wolverine Software Corp.). Este un sistem bazat pe evenimente şi tratează sistemul ca
fiind compus din blocuri şi tranzacţii. Acest limbaj este folosit într-o gamă largă de aplicaţii în
sisteme industriale, transporturi, sisteme complexe de calculatoare etc.
SIMSCRIPT II: de asemenea un limbaj orientat pe evenimente, în care modelul este descris
sub forma unor evenimente separate.
SIMULA 67: un limbaj de simulare de scop general, similar limbajului ALGOL 60, care
lucrează cu clase, prototipuri şi obiecte.
MICRO SAINT: unul dintre cele mai noi produse din acest domeniu, dezvoltat sub
WINDOWS care are facilitatea programării aplicaţiei după meniu, instrumente de simulare a
sistemelor discrete, facilităţi de animaţie a modelului, generator de cod propriu al expresiilor

13
logice şi matematice cu toate facilităţile unui limbaj de programare, funcţii incluse şi
posibilităţi de definire a unor funcţii noi.

2.2 Editarea, compilarea şi simularea modelelor GPSS/H

Resursele hardware necesare rulării programului sunt: calculator IBM sau compatibil,
sistem de operare MS-DOS, 1M RAM, unitate floppy-disk de 1.44M sau hard-disk.
Directorul programului de simulare conţine minim următoarele fişiere: gpssh.exe,
gpssherr.msg, profile.hdb.
Rezolvarea unei probleme de simulare cu ajutorul limbajului GPSS/H este împărţită
în trei faze: editarea programului, compilarea şi simularea. Cum programul compilat nu
prezintă utilitate de sine stătător, faza de simulare decurge imediat după cea de compilare.
Editarea programului se poate face cu orice editor de text. Programul conţine o
înşiruire de declaraţii care se editează într-un format fix. Fiecare declaraţie este scrisă pe o
linie nouă, începând dintr-o anumită coloană. Editarea programului se va face după
următoarele reguli:
Etichetele trebuie să înceapă din coloana 1 sau 2 şi pot avea maxim 8 caractere
Operaţiile sunt separate de etichete cel puţin printr-un spaţiu şi pot fi editate din coloana 3.
Operaţii auxiliare sunt introduse pentru suplimentarea operaţiilor şi trebuie separate de
codul operaţiei cel puţin printr-un spaţiu.
Operanzii se separă cu cel puţin un spaţiu de operaţii sau operaţii auxiliare
Comentariile se separă cu cel puţin un spaţiu de operanzi şi nu pot începe după coloana 25.
Când caracterul * este introdus în coloana 1, linia este interpretată comentariu.
Orice caracter alfabetic care face parte din componenţa unei etichete, operaţii sau
operand trebuie editată cu litere mari. Literele din structura comentariilor pot fi mici sau mari.
În fig. 2.1 se consideră un exemplu simplu de program GPSS/H.

*******************************************************************
SIMULATE
*******************************************************************
* Exemplul1 (Crearea si distrugerea tranzactiilor Xacts)
*******************************************************************
GENERATE 15.0,4.5 Tranzactiile sunt generate succesiv
TERMINATE 1 Tranzactiile sunt distruse, fiecare
* reducand valoarea numar. TC cu 1
*******************************************************************
* Declaratii de control
*******************************************************************
START 2 Fixeaza valoarea initiala TC = 2;
* Initializeaza blocul GENERATE;
* Initiaza faza de miscare a
* tranzactiilor Xacts
END Sfârsitul executiei modelului
*******************************************************************
Figura 2.1 Exemplul unui program scris în limbajul GPSS/H

Compilarea programului se face cu una din următoarele comenzi, lansate sub


prompterul sistemului de operare DOS:
> gpssh nume_fiş.ext
> gpssh nume_fiş (dacă extensia fişierului este cea implicită: .gps)
> gpssh nume_fiş tv type nowarn (comandă de compilare cu opţiuni)
> gpssh nume_fiş tvtnw (opţiunile prescurtate şi concatenate)
Lista opţiunilor de compilare şi semnificaţia acestora este prezentată în tabelul 2.1.
Tabelul 2.1 Opţiuni de compilare
14
DICT Determină compilatorul să afişeze dicţionarul variabilelor utilizate în model. NODICT
NODICT invalidează opţiunea şi are efect implicit.
SOURCE Compilatorul afişează fişierul sursă intr-o formă extinsă.
NOSOURCE Nu afişează în ecou fişierul sursă. SOURCE are efect implicit.
TEST Opţiune de simulare în mod test. Cu această opţiune întregul ecran devine fereastră de
dialog.
TV Opţiune de simulare în mod test. Ecranul este împărţit în trei ferestre:
fereastra sursei, fereastra de stare şi fereastra de dialog.
TYPE Determină afişarea pe ecran al raportului mesajelor de avertisment şi a raportului post
simulării.
WARN Determină afişarea raportului mesajelor de avertisment. WARN invalidează opţiunea şi
NOWARN are efect implicit.
XREF Afişează lista referinţelor încrucişate. NOXREF invalidează opţiunea şi are efect implicit
NOXREF
TTNW Prescurtarea opţiunilor TEST TYPE NOWARN
TVTNW Prescurtarea opţiunilor TV TYPE NOWARN

Opţiunile de compilare pot fi editate cu litere mari sau mici. În urma compilării, se generează
într-un fişier cu numele modelului şi extensia .lis un raport de compilare care, în funcţie de
opţiuni, poate conţine: afişarea într-o formă extinsă a sursei, raportul mesajelor de
avertisment şi eroare, raportul efortului de calcul pentru execuţia modelului.
Simularea modelului este consecutivă fazei de compilare şi poate decurge în modul test
dacă este specificată în linia de comandă a compilării opţiunile TEST TV. Simularea în acest
mod este interactivă. În fig. 2.2 se prezintă informaţiile afişate după compilarea programului
din fig. 2.1 cu opţiunile descrise.

BLOCK CURRENT TOTAL ex1.gps SOURCE CODE


----- ------- ----- ------------------------------------------------

1 1 GENERATE 15.0,4.5 Tranzactiile sunt generate succesiv


2 0 TERMINATE 1 Tranzactiile sunt distruse, fiecare
======================================================================
==
S/C: OFF ABS CLOCK: 12.9327 REL CLOCK: 12.9327 TTG: 2
======================================================================
==
XACT: 1 CURBLK: 1 NEXTBLK: 2 CHAINS: CEC PC:

MARK-TIME: 12.9327 MOVE-TIME: 12.9327 PRIORITY: 0


======================================================================
==
WOLVERINE SOFTWARE CORPORATION
ANNANDALE, VIRGINIA 22003-2500, USA
Ready!
:s

Figura 2.2 Informaţiile afişate în modul TEST

Cu opţiunea TV ecranul este împărţit în trei ferestre: fereastra sursei, fereastra de stare şi
fereastra de dialog. Informaţiile conţinute în aceste ferestre sunt prezentate în fig. 2.3-2.5,
considerând exemplul din fig. 2.2.

Fereastra sursei:

15
Locaţiile modelului Coloanele indicã numãrul Sunt afişate declaraţiile
ocupate de blocurile din tranzacţiilor din blocurile blocurilor modelului
partea dreaptã a ferestrei corespunzãtoare
Numele fişierului
modelului
BLOCK CURRENT TOTAL ex1.gps SOURCE CODE
----- ------- ----- ------------------------------------------------

1 1 GENERATE 15.0,4.5 Tranzactiile sunt generate succesiv


2 0 TERMINATE 1 Tranzactiile sunt distruse, fiecare

Figura 2.3 Informaţiile conţinute în fereastra sursei

Fereastra de stare
Indicator al schimbãrii Numãrul de identificare Valorile curente ale Valoarea curentã a
stãrii modelului al tranzacţiei ceasului absolut şi numãrãtorului de gestionare
relativ a terminãrii simulãrii

======================================================================== Lista de evenimente în care


S/C: OFF ABS CLOCK: 12.9327 REL CLOCK: 12.9327 TTG: 2 se gãseşte tranzacţia. În
======================================================================== aceastã situaţie tranzacţia
XACT: 1 CURBLK: 1 NEXTBLK: 2 CHAINS: CEC PC: se gãseşte în lista
evenimentelor curente
MARK-TIME: 12.9327 MOVE-TIME: 12.9327 PRIORITY: 0
========================================================================== Prioritatea
tranzacţiei
Marcheazã timpul absolut la Timpul la care tranzacţia Blocul curent şi urmãtor
care tranzacţia a fost parãseşte blocul. Este afişat al tranzacţiei
generatã numai când tranzacţia aparţine
unui bloc.

Figura 2.4 Informaţiile conţinute în fereastra de stare

Fereastra de dialog
WOLVERINE SOFTWARE CORPORATION
ANNANDALE, VIRGINIA 22003-2500, USA
Ready!
:s

XACT 1 POISED AT BLOCK 2. RELATIVE CLOCK: 12.9327


:
ACT 1 POISED AT BLOCK 2. RELATIVE CLOCK: 12.9327 Mesajul ce însoţeşte
: comanda step: tranzacţia
Prompterul sub care se Prescurtarea comenzii step de 1 stabilã în blocul 2 la
introduc comenzile simulãrii în execuţie a unui singur pas în momentul relativ
modul test simularea modelului 12.9327.
Figura 2.5 Informaţiile conţinute în fereastra de dialog

Fără opţiune de compilare aceasta are loc în modul batch (implicit).Simularea în modul
batch decurge fără intervenţia utilizatorului. La ieşire se generează raportul post simulării
(inclus în fişierul cu numele modelului şi extensie .lis, după raportul compilatorului). Fişierul
rezultat în urma compilării şi simulării in mod batch a modelului din fig. 2.1, este prezentat în
fig. 2.6.
STUDENT GPSS/H RELEASE 2.0 (AY130) 18 Feb 2000 16:57:25 FILE: ex1.gps

16
LINE# STMT# IF DO BLOCK# *LOC OPERATION A,B,C,D,E,F,G COMMENTS

1 1 *******************************************************************
2 2 SIMULATE
3 3 *******************************************************************
4 4 * Exemplul1 (Crearea si distrugerea tranzactiilor Xacts)
5 5 *******************************************************************
6 6 1 GENERATE 15.0,4.5 Tranzactiile sunt generate succesiv
7 7 2 TERMINATE 1 Tranzactiile sunt distruse, fiecare
8 8 * reducand valoarea numar. TC cu 1
9 9 *******************************************************************
10 10 * Declaratii de control
11 11 *
12 12 *******************************************************************
13 13 * START 2 Fixeaza valoarea initiala TC = 2;
14 14 * Initializeaza blocul GENERATE;
15 15 * Initiaza faza de miscare a
16 16 * tranzactiilor Xacts
17 17 END Sfârsitul executiei modelului

STORAGE REQUIREMENTS (BYTES)

COMPILED CODE: 70
COMPILED DATA: 40
MISCELLANEOUS: 0
ENTITIES: 176
COMMON: 10000
-----------------------
TOTAL: 10286
Simulation begins.
Simulation terminated. Absolute Clock: 0.
Elapsed Time Used (SEC)

PASS1: 0.06
---------------------
TOTAL: 0.06
Figura 2.6 Conţinutul fişierului ex1.lis

2.3 Construirea modelului în limbajul GPSS/H

GPSS/H distinge trei clase de instrucţiuni: directive de compilare, executate în timpul


compilării, instrucţiuni de control şi blocuri.
Directivele de compilare sunt executate în timpul compilării în ordine secvenţială. Exemple
de directive de compilare sunt: EQU, LIST, UNLIST, INTEGER, REAL, CHAR*n, VCHAR*n.
Declaraţiile de control au scopul influenţării simulării modelului. Pe lângă instrucţiunile
obligatorii SIMULATE, START şi END alte exemple de instrucţiuni de control sunt: LET,
FUNCTION, OPERCOL, PUTPIC, IF-THEN-ELSE-ELSEIF-ENDIF, GOTO şi DO. Aceste
instrucţiuni fac parte, la fel ca directivele de compilare, din limbajul de programare dar nu
pot influenţa parcurgerea blocurilor de către tranzacţii.
Blocurile sunt folosite pentru reprezentarea resurselor sistemului, prelucrarea informaţiilor şi
luarea deciziilor. Resursele sunt elemente ale modelului: inactive (deoarece aşteaptă
acţiunea tranzacţiilor), statice (pentru că au poziţii fixe), permanente (deoarece există în
model pe toată durata simulării), speciale (pentru că au o funcţie limitată).
Resursele, aspectele logice şi fizice ale sistemului modelat şi informaţiile pe care dorim să le
obţinem determină tipul blocurilor pe care le utilizăm în model. Fiecare dintre acestea are un
mod pre definit de operaţii executate asupra tranzacţiilor care îl parcurg. Blocurile reprezintă
partea “vizibilă” a modelului, în timp ce tranzacţiile, facilităţile, cozile de aşteptare, serverii
17
multipli sunt “invizibile”. Fiecare bloc ocupă în model o locaţie specifică, i se asociază un
anumit cuvânt al operaţiei şi are zero sau mai mulţi operanzi.
Locaţia este un număr natural pe care compilatorul îl asociază fiecărui bloc, necesar în faza
de execuţie a modelului. Utilizatorul are facilitatea de a eticheta unul sau mai multe blocuri
din model. În acest caz eticheta blocului identifică locaţia pe care o ocupă blocul.
Operaţia. Este un cuvânt cheie asociat unui bloc prin care se indică rolul pe care îl
îndeplineşte blocul respectiv în modelarea proceselor. Exemple de operaţii sunt:
GENERATE, ADVANCE, SEIZE, RELEASE, QUEUE, DEPART, TERMINATE, etc.
Operanzi. Furnizează informaţiile necesare operaţiilor. Pentru unele blocuri nu este
necesar să se furnizeze nici un operand explicit. Blocurile respective folosesc operanzi
impliciţi. Blocurile definesc modelul de simulare.

Simularea unui proces implică reprezentarea unei succesiuni de evenimente în timp.


În acest scop, limbajul GPSS/H furnizează un ceas al simulării necesar înregistrării timpului.
Valoarea acestuia este reprezentată sub formă zecimală cu valoarea minimă 0.0.
Semnificaţia unităţii de timp asociată valorii numerice a variabilei rămâne la opţiunea
utilizatorului.
Simularea modelului are loc prin parcurgerea, într-un singur sens, a blocurilor de
către unităţi de trafic, numite tranzacţii.
Tranzacţiile, numite prescurtat şi Xacts, reprezintă evenimente discrete în sistemul
simulat. Acestea sunt elemente ale modelului cu proprietatea că sunt: active, dinamice,
temporare şi universale; sunt active pentru că pot iniţia acţiuni care se execută pe elemente
de model pasive; dinamice pentru că în general nu au poziţii fixate în mediul simulat ci se
deplasează între poziţii pasive; temporare pentru că nu există pe toată durata de simulare ci
sunt generate şi distruse în timpul simulării; universale şi generale pentru că li se pot atribui
orice caracteristici şi/sau atribute şi un ciclu de viaţă definit prin secvenţa de blocurilor prin
care acestea trebuie să treacă. Semnificaţia tranzacţiilor depinde de modelul simulat. Astfel,
în modelul unei secţii de producţie tranzacţiile pot reprezenta piesele în diferite stadii de
prelucrare; într-un sistem informatic tranzacţiile pot fi task-urile procesate în diferite puncte
ale sistemului; în modelul sistemului de ascensoare, tranzacţiile sunt persoanele care
accesează mijloacele de transport. Indiferent de semnificaţia particulară pe care o au
tranzacţiile într-un model, acestora li se asociază un număr natural, pentru identificare şi
opţional parametri numerici.
Referitor la execuţia simulării, limbajul foloseşte următoarele denumiri şi convenţii.
Blocul în care se găseşte la un moment dat tranzacţia poartă numele de blocul curent
(Current Block), iar blocul în care urmează să se deplaseze tranzacţia blocul următor (Next
Block Attempted). Mutarea tranzacţiei din blocul curent are loc la expirarea timpului simulat
de reţinere a tranzacţia. Unele blocuri: SEIZE, GATE, TEST, ENTER pot refuza temporar
tranzacţii şi în felul acesta întârzie parcurgerea modelului. Dacă la momentul de transfer al
tranzacţiei din blocul curent în blocul următor acesta din urmă nu are condiţia de acceptare
a unei noi tranzacţii, atunci tranzacţia refuzată rămâne blocată în blocul curent într-o coadă
de aşteptare, tratată după o anumită regulă, până la acceptarea acesteia. Nu toate blocurile
au posibilitatea de a refuza tranzacţii, dar acest lucru se va detalia la prezentarea blocurilor.
Tranzacţiile sunt create de către două tipuri de blocuri: GENERATE şi SPLIT.
Acestea definesc timpul introducerii tranzacţiilor în model. Ele primesc un număr de
identificare şi în timpul ciclului de viaţă parcurg blocurile modelului, consumând timp de
simulare. În final sunt distruse de două blocuri: TERMINATE şi ASSEMBLE.
Tranzacţiile nu parcurg declaraţiile de control.
Structura generală a unui program GPSS/H este prezentată în fig. 2.7

18
SIMULATE
(Declaraţie de control)

Directive de compilare

Declaraţii de control adiţionale


(opţional)

Blocuri care definesc modelul


propriu-zis

START
(Declaraţie de control)

Declaraţii de control adiţionale


(opţional)

END
(Declaraţie de control)

Figura 2.7 Structura unui program GPSS/H

Din fig. 2.7 rezultă că orice program de simulare trebuie să conţină o serie de
declaraţii de control obligatorii. Aceste sunt: SIMULATE, START, END. Necesitatea lor
rezultă din funcţiile acestor instrucţiuni detaliate în continuare.

SIMULATE. Indică compilatorului să treacă în faza de simulare după compilarea


programului. Declaraţia este ne etichetabilă.

START. Execuţia acestei declaraţii de control are trei efecte:


1. Iniţializează contorul de terminare a simulării (TC), cu valoarea numerică
zecimală a operandului . Acest contor va fi decrementat de fiecare data
când o tranzacţie parcurge un bloc TERMINATE cu valoarea operandului
respectivei declaraţii bloc. Simularea se opreşte când valoarea contorului
de terminare a simulării este zero sau are o valoare negativă.
2. Iniţializează blocurile cu funcţia de generare a tranzacţiilor.
3. Validează începere mişcării tranzacţiilor de la un bloc la altul.

END Are două efecte.


1. Indică sfârşitul fizic al fişierului.
2. Cedarea controlului către sistemul de operare.

2.4 Structura datelor în limbajul GPSS/H


2.4.1 Constante şi ampervariabile

În limbajul GPSS/H se întâlnesc următoarele tipuri de date: logice, numere întregi,


numere reale şi şiruri de caractere. Datele aparţinând uneia din aceste categorii pot fi
definite constante sau variabile (numite amper-variabile după semnul & care precede
caracterele numelui variabilei). O clasificare a tipurilor de date este dată în tabelul 2.2.

Tabelul 2.2 Tipuri de date în GPSS/H


19
Tip Intervalul de valori Exemple
Logice 0; 1 0 – FALSE, 1 - TRUE
Numere întregi:
Byte -27 … 27-1 -128
Jumătate de cuvânt -215 … 215-1 0.21E7
Cuvânt -231 … 231-1
Numere reale Depinde de sistemul de calcul 3.141592, -0.21E7
Şiruri de caractere Orice şir de caractere ‘GPSS/H”

Constante. Sunt reprezentate prin valorile lor şi nu au un nume. Formatul constantelor este
dat în tabelul 2.3.

Tabelul 2.3 Formatul constantelor întregi şi reale

Tip Semn Partea întreagă Partea zecimală Exponent


INTEGER [+ sau -] (0-10 digiţi) - -
REAL [+ sau -] (0-10 digiţi) (0-10 digiţi) E[semn](0-2 digiţi)

Constantele întregi pozitive pot avea un nume de maximum 8 caractere conţinând


litere mari sau cifre, diferit de cuvintele “cheie” utilizate de limbaj. Această denumire îi este
atribuită constantei prin instrucţiunea EQU, directivă de compilare.
Constantele şir de caractere încep şi se termină cu un apostrof. Ele pot avea orice lungime
şi dacă nu încap pe o linie pot continua pe linia următoare, folosind caracterul ‘_’ drept
caracter de continuare. Din acest motiv caracterul de continuare nu poate fi folosit în şir
decât cu funcţia menţionată.

Amper variabile. Limbajul permite cinci tipuri de amper variabile: INTEGER, REAL, CHAR*n,
VCHAR*n şi EXTERNAL. Cu excepţia tipului EXTERNAL, amper variabilele pot fi variabile
scalare sau vectori. Amper variabilele de tipul INTEGER şi REAL sunt similare celor din alte
limbaje de programare. Variabilele de tip CHAR*n şi VCHAR*n sunt de tip şir de caractere
cu lungime fixă sau variabilă n. Variabilele EXTERNAL sunt utilizate pentru interfaţarea cu
rutine scrise în limbajele C sau FORTRAN. Toate variabilele trebuie declarate înaintea
utilizării. Amper variabilele de tip: INTEGER, REAL, CHAR*n şi VCHAR*n pot fi declarate ca
variabile scalare sau ca vectori. Numărul de elemente ale vectorului se introduc sub formă
de constante pozitive întregi. De exemplu, secvenţa următoare:
INTEGER &A,&B,&C(5)
CHAR*4 &CH, &ST(3)
VCHAR*5 &VCH

defineşte două variabile scalare întregi &A şi &B şi &C(5), o variabilă întreagă de tip vector
cu 5 elemente. Variabila &CH are 4 caractere şi &ST(3) conţine trei elemente fiecare având
4 caractere. Variabila &VCH are maximum 5 caractere. Accesul unui element dintr-un vector
se poate face printr-un indice închis între paranteze rotunde. Variabilelor declarate li se pot
atribui valori cu ajutorul comenzilor: LET, BLET şi DO.
Amper variabilele EXTERNAL permit combinarea modelelor GPSS/H cu subrutine scrise în
limbajul C sau FORTRAN. Acestea se definesc prin directiva EXTERNAL şi pot fi nume de
subrutine (apelate cu CALL sau BCALL) sau funcţii care returnează valori “in-line” numai de
tip întreg sau real.

2.4.2 Tipuri de expresii

20
Expresiile sunt formule de calcul ce conţin operanzi, simboluri şi paranteze. Valoarea
expresiei este calculată, dându-se valorile operanzilor. În continuare se descrie sintaxa şi
semantica celor trei tipuri de expresii existente în GPSS/H: aritmetice, logice şi cu şiruri de
caractere.

Expresii aritmetice. Acestea sunt compuse din: constante întregi sau reale, nume şi
simboluri, atribute numerice standard (Standard Numeric Attributes – SNA), atribute logice
standard (Logical Standard Attributes – LSA) şi amper variabile. Tipurile de operaţii permise
sunt prezentate în tabelul 2.4.

Tabelul 2.4 Tipuri de operaţii

Operator Operaţie Operator Operaţie


+ Adunare / Împărţire
- Scădere @ Modulo 2
* Înmulţire

Expresiile sunt analizate de la stânga la dreapta. Înmulţirea, împărţirea şi împărţirea


modulo 2 au o precedenţă mai mare decât adunarea şi scăderea. Parantezele se utilizează
pentru a modifica regulile de precedenţă. Dacă unul din operanzi este de tip real, celălalt
operand va fi transformat în acelaşi tip.

Observaţii:
1. Împărţirea prin zero returnează 0!
2. Prin împărţirea modulo 2, se divide valoarea absolută a deîmpărţitului la valoarea
absolută a împărţitorului şi se păstrează numai restul.
3. Transformarea numerelor reale la întregi se face prin trunchiere.

Transformarea numerelor reale în întregi se face cu instrucţiunea FIX şi a celor


întregi la tipul real cu instrucţiunea FLT.

Expresii logice. Acestea conţin elemente care pot avea valorile adevărat sau fals.
Ele intervin în următoarele contexte: când este definită o variabila logică, într-o structură IF-
expresie sau ELSEIF – expresie. Expresiile logice pot conţine: comparaţii sau expresii
aritmetice, LSA. Expresiile aritmetice au valoarea logică TRUE dacă sunt diferite de zero.
Altfel, au valoarea logică FALSE. Expresiile logice pot fi concatenate cu operatorii AND şi
OR. Operatorul NOT neagă valoarea logică a expresiei.
Atributele logice standard (LSA) sunt folosite pentru a testa starea unor obiecte din
model. De exemplu: SF(MACHINE) testează dacă o entitate de tip “storage” este ocupată.
Expresii cu şiruri de caractere. Termenii acestor tipuri de expresii pot fi constante de tip
şir de caractere, atribute standard şir de caractere (SSA), ampervariabile CHAR*n şi
VCHAR*n. Operatorul de concatenare a două şiruri este ||.
Atributele standard şir de caractere (SSA) sunt: SSG, LEN şi SYM.
Sub şiruri SSA pot fi utilizate pentru a deriva sub şiruri din variabile de tip şir şi
expresii de tip şir. Sintaxa este următoarea: SSG(string,i) sau SSG(string,i,j). În ambele
cazuri string este un şir sau o expresie de tip şir de caractere. În cazul formei sintactice cu
trei parametri i marchează poziţia de început în şir (caracterele sunt numerotate începând
cu 1) şi j lungimea sub şirului derivat.

21
Simbolul LEN stabileşte lungimea expresiilor şir de caractere. Uzual este folosit
pentru a stabili lungimea ampervariabilelor de tip VCHAR*n. Sintaxa este LEN(string), în
care string este o expresie şir de caractere.
SYM stabileşte numele simbolic al unui obiect GPSS/H. Se foloseşte pentru a da
nume liniilor de ieşire.
Sintaxa este SYM(entity_code,index), în care entity_code este identificatorul unui tip de
obiect GPSS/H (de exemplu identificatorul FAC este utilizat pentru facilităţi), index este o
expresie întreagă care identifică membrul clasei. Astfel, SYM(FAC,&I) furnizează numele
simbolic corespunzător facilităţii al cărui număr este dat prin &I. Valoarea returnată de SYM
este un şir de tip VCHAR*8 aliniat la stânga.
Comparaţii. Operatorii şi semnificaţia lor este dată în tabelul 2.5.

Tabelul 2.5 Operatori utilizaţi în comparaţii

Operator Operator alternativ Semnificaţie


‘G’ > Mai mare
‘GE’ >= Mai mare sau egal
‘L’ < Mai mic
‘LE’ <= Mai mic sau egal
‘E’ = Egal
‘NE’ != Diferit

2.5 Declaraţii de compilare

Directivele de compilare sunt declaraţii care influenţează translatarea textului sursei


GPSS/H. Acestea nu au o influenţă directă asupra execuţiei programului.
Din această categorie fac parte:
 Declaraţii pentru definirea variabilelor
Aceste declaraţii sunt: INTEGER, REAL, CHAR*n şi VCHAR*n. Semnificaţia lor a fost
detaliată în paragraful 2.4.1.
 Declaraţiile LIST şi UNLIST
Influenţează protocolul de ieşire al compilatorului. Declaraţiile pot fi utilizate fără operanzi
sau cu unul din următorii operanzi:
ABS determină ieşirea codului translatat al maşinii.
CSECHO suprimă salturile la o noua pagină după declaraţia START
MACX controlează ieşirea în cazul expandării macro-urilor.
 EQU este o directivă de compilare prin care un număr întreg pozitiv este asignat
unui simbol
Sintaxă: simbol EQU valoare[(rang)],tip[,tip]...
În sintaxa EQU se utilizează codurile E, tabelul 2.6.
 STARTMACRO şi ENDMACRO
Cu aceste două directive se deschide şi respectiv se închide o definiţie MACRO.
 OPERCOL este o directivă compilator cu ajutorul căreia se defineşte coloana
maximă în care se poate defini un operand. După această coloană, compilatorul va
considera caracterele întâlnite caractere de comentariu. Valoarea implicită este 25.
 REALLOCATE este o directivă cu care numărul maxim de instanţe ale
elementelor claselor este realocat.
Sintaxă: REALLOCATE cod,număr[,...]
Codurile utilizate pentru identificarea elementelor clasei modelului sunt codurile R
prezentate în tabelul 2.6.

22
Tabelul 2.6 Codurile utilizate pentru elementele clasei modelului

Element al clasei modelului Cod E Cod R Element al clasei modelului Cod E Cod R
Variabilă booleană B BVR Parametru zecimal PL -
Listă utilizator C CHA Coadă aşteptare (QUEU) Q QUE
Facilitate F FAC Generator numere aleatoare RN RNO
Grup G GRP Storage (STORAGE) S STO
Comutator logic L LOG Tabel (TABLE) T TAB
Matrice de cuvinte întregi MX FMS Variabilă (VARIABLE) V VAR
Matrice byte MB BMS Scalar cuvânt întreg XF FSV
Matrice jumătate cuvânt MH HMS Scalar de tip byte XB BSV
Matrice elemente reale ML LMS Scalar jumătate cuvânt XH HSV
Parametru de tip Byte PB - Scalar zecimal XL LSV
Parametru cuvânt întreg PF - Funcţie (FUNCTION) Z FUN
Parametru jumătate de cuvânt PH -

2.6 Declaraţii de control

LET - Este o declaraţie de control prin care valoarea unei expresii se asignează unei
ampervariabile.
Sintaxă : [etichetă] LET &var=expresie

Asignarea trebuie să ţină cont de compatibilitatea dintre tipul expresiei şi al


ampervariabilei. Astfel, expresiile numerice pot fi asignate numai variabilelor numerice.
Dacă o valoare reală este asignată unui întreg atunci partea fracţionară este eliminată.

IF-ELSE-ELSEIF-ENDIF- Această declaraţie controlează execuţia condiţionată a


unui program.
Sintaxă: [etichetă] IF cond1
Urmează secvenţă de declaraţii
ELSEIF cond2
Urmează secvenţă de declaraţii
ELSE
Urmează secvenţă de declaraţii
ENDIF

Numai IF şi ENDIF sunt necesare. ELSEIF şi ELSE sunt opţionale. ELSEIF poate
apărea de mai multe ori.
DO-ENDDO – Declaraţii utilizate pentru construirea buclelor în program.
Sintaxă:
[etichetă] DO &index= valoare_start, valoare_finală_, [valoare_increment]
Declaraţii
[etichetă] ENDDO

Ampervariabila &index trebuie să fie de tip INTEGER.

GOTO - Declarţia de salt necondiţionat.


Sintaxă: [etichetă] GOTO etichetă_destinaţie

Nu toate declaraţiile pot fi marcate cu etichete. Declaraţiile de control care pot fi marcate cu
etichete sunt:

23
CLOSE DO ENDDO GOTO GETLIST GETSTRING
HERE IF ENDIF LET PUTPIC PUTSTRING
HERE – Declaraţie care nu are nici un efect
Este folosită în cazul salturilor datorită restricţiilor privind blocurile care nu pot fi marcate.

Următoarele declaraţii de control pot fi clasificate după funcţia lor în comenzi de


intrare/ieşire

GETLIST – Declaraţie de control care permite introducerea datelor printr-un


dispozitiv sau fişier. Totdeauna se va începe o nouă înregistrare. Valorile citite cu GETLIST
ale unei înregistrări anterioare nu mai sunt disponibile.
Sintaxă:
[etichetă] GETLIST [END=etichetă1l,][ERR= etichetă2,] [FILE=nume_fişier,] lista-i/o
etichetă1
indică locaţia de salt la întâlnirea sfârşitului fişierului
etichetă2
indică locaţia de salt la întâlnirea unei intrări incompatibile ca tip cu tipul declarat în
lista i/o
nume_fişier
numele logic al unui fişier definit de o comandă FILEDEF. Dacă numele nu este
specificat, atunci dispozitivul I/O va fi GUSER (în mod normal tastatura). Aceasta
permite introducerea interactivă a datelor.
lista-i/o
descrie, între paranteze rotunde, o listă de valori în care vor fi introduse datele.

GETSTRING – Declaraţie prin care o înregistrare completă este citită într-o valoare de
tip şir. GETSTRING se va utiliza în locul declaraţiei GETLIST dacă:
 conţinutul înregistrării trebuie să fie evaluat cu metodele utilizatorului
 nu sunt necesare toate opţiunile declaraţiei GETLIST.
Sintaxă: [etichetă] GETSTRING [END=etichetă1,][FILE=nume_fişier,] lista-i/o
etichetă1
indică locaţia de salt la întâlnirea sfârşitului fişierului
nume_fişier
numele logic al unui fişier definit de o comandă FILEDEF.
lista-i/o
descrie o variabilă VCHAR*n sau CHAR*n care va primi înregistrarea sub forma unui
şir de caractere

PUTPIC – este o comandă de ieşire a datelor după un model definit prin una sau mai
multe linii care urmează sau printr-o comandă PICTURE.
Sintaxă:
[etichetă] PUTPIC [FILE=nume_fişier,][LINES=n_linii,][PICTURE=etichetă1l,] lista- i/o
nume_fişier
numele logic al unui fişier definit de o comandă FILEDEF.
n_linii
specifică numărul următoarelor linii în care modelul datelor de ieşire este definit.
Valoarea 1 este implicită.
etichetă1
Descrie locaţia la care se găseşte comanda PICTURE folosită pentru descrierea ieşirii
datelor. Comanda PICTURE este o alternativă la modul de definire prin liniile
următoare de program şi ca atare numai una din cele două posibilităţi trebuie utilizată.
24
lista-i/o
descrie, între paranteze rotunde, o listă de valori în care vor fi introduse datele.

PUTSTRING – comandă prin care un şir sau un termen de tip şir este distribuit unei
înregistrări. Termenul de tip şir poate fi obţinut prin concatenare sau funcţia SSG.
Sintaxă: [etichetă] PUTSTRING [FILE=nume_fişier,] lista- i/o
nume_fişier
numele logic al unui fişier definit de o comandă FILEDEF. Dacă numele fişierului nu
este specificat, atunci ieşirea va fi afişată pe ecran. În modul interactiv ieşirea va fi
pierdută.
lista-i/o
descrie un şir de caractere care vor fi scrise la ieşire sub forma unei înregistrări.

PICTURE – comandă care indică formatul ieşirii datelor, asociată cu comanda PUTPIC
Sintaxă: etichetă PICTURE [LINES=n_linii]
n_linii
specifică numărul următoarelor linii prin care se specifică formatul de afişare al datelor.

Următoarele linii pentru definirea formatului afişării datelor în cazul comenzii PUTPIC sau
PICTURE constă din texte şi câmpuri de editare a formatului datelor.

textele
vor apare ne alterate în înregistrarea de ieşire
editarea formatului de afişare al datelor
se face prin caractere * (asterisc). Principial un caracter * corespunde cu unul din
caracterele afişate. Declararea formatului şi rezultatul afişat pentru diferite situaţii este
prezentat în tabelul 2.7.

Tabelul 2.7 Declararea formatului de afişare

Corespondenţă exactă Câmpul de editare declarat mai Câmpul de editare declarat mai
lung scurt
Valoare Editarea Rezultat Valoare Editarea Rezultat Valoare Editarea Rezultat
câmpului câmpului câmpului
254 *** 254 254 ****** ^^^254 254 * 254
-123 **** -123 -123 ****** ^^-123 -12 ** -12
3.141 *.*** 3.141 3.141 *.***** 3.141^^ -3.141 *.* -3.1
‘TEXT’ **** TEXT ‘TEXT’ ****** TEXT^^ ‘TEXT’ * TEXT

FILEDEF – este o comandă de I/O prin care se conectează fişiere externe şi interne.
Primul acces de I/O deschide fişierul pentru citire şi scriere.
Sintaxa: [nume_fişier] FILEDEF nume_fizic,[APPEND]
nume_fişier
este numele logic al fişierului. Trebuie să aibă 8 caractere alfanumerice, începând cu o
literă.
nume_fizic
este un şir de caractere care specifică numele fizic al fişierului.

APPEND

25
Este permis în cazul scrierii în fişier, operaţia făcându-se la sfârşitul fişierului existent.
Dacă nu este indicată această opţiune, fişierul va fi rescris, datele iniţiale pierzându-se.
Comanda FILEDEF aplicată unui fişier deschis la momentul curent conduce la eroare de
execuţie.

CLOSE – este o declaraţie de control prin care se închide un fişier.


Sintaxă: [etichetă] CLOSE nume_fişier,...
etichetă
marcheză comanda CLOSE ca o eventuală locaţie de salt.
nume_fişier
numele logic al fişierului care va fi închis.

2.7 Exemple de utilizare a declaraţiilor de control

Structura unui program de simulare în limbajul GPSS/H a fost prezentata în fig. 2.7.
Această structură conţine inclus modelul de simulare. Totuşi, un program GPSS/H poate
conţine numai declaraţii de compilare şi de control. Un astfel de program este similar
programelor realizate în alte limbaje de programare şi nu are utilitate din punctul de vedere
al simulării ne existând un model. Cum în acest capitol au fost introduse numai directive de
compilare şi declaraţii de control, exemplificările vor scoate în evidenţă această posibilitate,
utilizată pentru calculul unor indicatori în sistemele de fabricaţie. Pe măsura introducerii
declaraţiilor bloc, aceste programe pot fi completate cu introducerea modelului şi calculul
indicatorilor pe baza rezultatelor simulării.

Un prim exemplu se referă la dimensionarea globală a unui sistem de fabricaţie


pentru satisfacerea unei comenzi. Determinarea numărului de sisteme de fabricaţie (Nsf) se
face pe baza formulei:
C n
N sf S s H   si mi (1)
i Ri
unde: Ss – numărul de schimburi, H – numărul de ore de lucru pe schimb, Csi – cererea
săptămânală pentru un produsul i, nmi – numărul de prelucrări pentru realizarea produsului i,
Ri – rata de producţie a produsului i. Din (1) se deduce Nsf care se rotunjeşte prin adaos la
valoarea întreagă.
Mărimile de intrare sunt: numărul de schimburi pe săptămână: S, numărul de ore de
lucru pe schimb: H, tipul produsului: I, cererea săptămânală pentru un produs: C, rata de
producţie pentru fiecare produs: R, numărul de prelucrări pentru fiecare produs NM, Aceste
date se citesc din fişierul data.txt, care în exemplul considerat are următorul conţinut:

10 6.5
600 10 2
1000 20 2
2200 40 3

În program se folosesc următoarele variabile de tip întreg: &I tipul produsului, &S numărul
de schimburi săptămânale, &C cererea săptămânală, &R rata de producţie şi &NM numărul
de prelucrări. Numărul de ore de lucru pe schimb &H este declarată de tip real.
Programul GPSS/H va afişa în fişierul raport.txt datele de intrare tabelate şi va calcula
numărul de sisteme de fabricaţie.
Sursa programului este:
SIMULATE
INTEGER &I,&S,&C,&R,&NM
REAL &H,&SUM
26
LET &SUM=0
WORK FILEDEF 'data.txt'
RAPORT FILEDEF 'raport.txt'
GETLIST FILE=WORK,(&S,&H)
PUTPIC FILE=RAPORT,LINES=3
-------------------------------------------------------------
PRODUS CERERE/SAPTAMANA RATA DE PRODUCTIE NUMAR PRELUCRARI
-------------------------------------------------------------
DO &I=1,3
GETLIST FILE=WORK,(&C,&R,&NM)
PUTPIC FILE=RAPORT,(&I,&C,&R,&NM)
** **** ** **
LET &SUM=&SUM+(&C*&NM)/&R
PUTPIC FILE=RAPORT
-------------------------------------------------------------
ENDDO
IF (FIX(&SUM/(&S*&H))-(&SUM/(&S*&H))<0)
PUTPIC FILE=RAPORT,(FIX(&SUM/(&S*&H))+1)
Numarul necesar de sisteme de fabricatie: ***
ELSE
PUTPIC FILE=RAPORT,(FIX(&SUM/(&S*&H)))
Numarul necesar de sisteme de fabricatie: ***
ENDIF
END

Conţinutul fişierului raport.txt, obţinut în urma execuţiei programului este:


-----------------------------------------------------------------------------------------------------------------
PRODUS CERERE/SAPTAMANA RATA DE PRODUCTIE NUMAR PRELUCRARI
-----------------------------------------------------------------------------------------------------------------
1 600 10 2
-----------------------------------------------------------------------------------------------------------------
2 1000 20 2
-----------------------------------------------------------------------------------------------------------------
3 2200 40 3
-----------------------------------------------------------------------------------------------------------------
Numarul necesar de centre de lucru: 6

Următorul exemplu consideră calculul capacităţii de producţie a unui sistem de


fabricaţie. Capacitatea de producţie a unui sistem de fabricaţie (Cp) reprezintă capabilitatea
sa maximă în anumite condiţii de funcţionare şi se exprimă în produse/săptămână. Formula
de calcul este:
N sf S s HR
Cp  (2)
nm
unde variabilele au aceeaşi semnificaţie cu cea din exemplul precedent.
Programul va citi datele de intrare de la tastatură şi va afişa rezultatul pe ecran.
Sursa programului corespunzător exemplului prezentat este următoarea:

SIMULATE
INTEGER &NSF,&S,&R,&NM
REAL &H,&CP
PUTSTRING 'Numar sisteme de fabricatie (NSF)'
GETLIST &NSF
PUTSTRING 'Numar schimburi/saptamana (S)'
GETLIST &S
PUTSTRING 'Numar ore/schimb (H)'
GETLIST &H
PUTSTRING 'Rata de productie (R)'
GETLIST &R

27
PUTSTRING 'Numar de prelucrari (NM)'
GETLIST &NM
LET &CP=(&NSF*&S*&H*&R)/&NM
PUTPIC (&CP)
Capacitatea de productie= *****.*
END

2.8 Probleme propuse

1. Care este structura unui program GPSS/H.


2. Descrieţi rolul declaraţiei de control START.
3. Numiţi tipurile de date utilizate în GPSS/H.
4. De câte tipuri sunt întregii?
5. Cum pot fi tipărite pe mai multe linii constantele şir de caracter?
6. Ce este o amper variabilă?
7. Daţi exemple de tipuri de amper variabile.
8. Ce tipuri de valori pot fi asignate amper variabilelor de tip REAL şi INTEGER?
9. Daţi exemple de comenzi care asignează o valoare unei amper variabile de tip
INTEGER.
10. Ce diferenţă este între amper variabilele CHAR*n şi VCHAR*n ?
11. Daţi câte un exemple privind
 Definirea unei variabile scalare
 Definirea unui vector de amper variabile
12. Care este valoarea iniţială pe care o primesc amper variabilele după definirea lor?
13. Imaginaţi programe care să utilizeze declaraţiile de control descrise.

28
Capitolul 3 Elementele modelului şi gestiunea tranzacţiilor în GPSS/H

3.1 Elementele modelului GPSS/H


3.1.1 Noţiuni generale privind simularea modelului

Directivelor de compilare şi declaraţiile de control formează împreună un limbaj de


programare, asemănător limbajelor cunoscute. Proprietatea suplimentară de limbaj de
simulare atribuită limbajului GPSS/H constă în faptul că programul poate conţine înglobat
modelul de simulare, descris de un set special de instrucţiuni, numite blocuri. Acestea pot
descrie procese cu desfăşurare paralelă, execuţia secţiunilor modelului făcându-se în
ordinea cronologică a desfăşurării evenimentelor în timp şi nu în ordinea instrucţiunilor din
program. Instrucţiunile de control SIMULATE, START, END sincronizează execuţia simulării
modelului cu execuţia celorlalte instrucţiuni ale limbajului. Iniţial sunt executate declaraţiile
de compilare şi de control, ignorându-se instrucţiunile de definire a modelului. Acest
procesul este întrerupt de declaraţiile START întâlnite până la declaraţia END. Fiecare
instrucţiune START declanşează simularea modelului compus din blocurile de la începutul
programului până la blocul care o precede. GPSS/H are două ceasuri de simulare: ceasul
absolut (Absolute Clock) AC1 şi ceasul relativ (Relative Clock) C1. Când prima declaraţie
START este executată, ceasul relativ şi ceasul absolut încep gestionarea timpului de la
valoarea iniţială 0. AC1 şi C1 sunt Atributele Numerice Standard care la fiecare apelare
furnizează valoarea curentă a timpului simulării. Ceasul relativ măsoară timpul simulării de
la începutul acesteia sau de la ultima execuţie a unei declaraţii: RESET, BRESET, CLEAR
sau BCLEAR. Ceasul absolut măsoară timpul simulării de la începutul acesteia sau de la
ultima execuţie a unei declaraţii CLEAR sau BCLEAR.
Simularea are loc până când numărătorul terminării simulării (Terminal Counter, TC)
are o valoare mai mică sau egală cu zero. După terminarea acestei faze, programul
continuă cu execuţia următoarei instrucţiuni după instrucţiunea START care a declanşat
simularea. Dacă urmează alte instrucţiuni START, blocurile modelului vor fi executate de
mai multe ori.
Blocurile descriu procedeul de tratare a tranzacţiilor sau generează tranzacţii.
Acestea constituie partea vizibilă a modelului, în timp ce alte elemente ca: tranzacţiile,
facilităţile, cozile de aşteptare, depozitele, etc. rămân invizibile.

3.1.2 Clase de elemente pentru descrierea modelului GPSS/H

Toate obiectele sau elementele modelului reprezintă clase pre definite. Cele mai
importante clase de elemente pentru descrierea modelelor sunt: tranzacţiile, facilităţile
(Facility), cozile de aşteptare (QUEUE), depozit (STORAGE), comutatorii logici, listele
utilizator (USER CHAIN), grupurile (GROUPS), scalarii şi matricele. Obiectele fiecărei clase
pot fi identificate printr-un număr care se incrementează pornind de la unu şi un nume, dacă
utilizatorul alege această opţiune
Astfel, într-un model pot exista facilităţile numărul 1,2,3,… şi acestea se pot denumi, de
exemplu: Transportor, Strung, Freză, …etc. Tranzacţiile pot avea număr, dar nu pot avea
nume.
Fiecare clasă are un set de Atribute Standard care pot fi identificate prin descriptori şi
în funcţie de tip se clasifică în: Atribute Numerice Standard (SNA), Atribute Logice Standard
(SLA) şi Atribute de tip Caracter Standard (SCA). Unele din aceste atribute pot fi numai
citite, altele pot fi atât citite cât şi modificate.
Tranzacţiile sunt generate de două tipuri de blocuri: GENERATE şi SPLIT. Aceste
blocuri determină timpul la care tranzacţiile vor fi introduse în model. Blocurile TERMINATE
29
şi ASSEMBLE distrug tranzacţiile. Alte blocuri, (de ex. SEIZE, GATE, TEST, ENTER) pot
temporar refuza tranzacţii şi astfel întârzie procesarea acestora în model. Blocul ADVANCE
întârzie procesarea tranzacţiilor cu un timp stabilit prin operandul instrucţiunii.
În timpul cât tranzacţiile sunt active, acestea sunt gestionate de limbaj prin
intermediul unor liste interne:
- Lista evenimentelor viitoare (FEC) este lista tranzacţiilor pentru care au fost stabilite
momentele viitoare de timp la care acestea îşi vor continua acţiunea
- Lista evenimentelor curente (CEC) este lista tuturor tranzacţiilor care: sunt planificate
a acţiona la momentul curent al timpului simulării, sau care au fost refuzate de blocurile
ce urmau să le parcurgă
- Lista utilizator. Lista în care tranzacţiile sunt controlate de utilizator.
- Liste de aşteptare, în care tranzacţiile aparţinând unui set de asamblare aşteaptă
tranzacţiile aparţinând aceluiaşi set. Aceasta are loc prin folosirea blocurilor MATCH,
ASSEMBLE, GATHER.
GPSS/H controlează intern tranzacţiile şi acţiunile acestora asupra blocurilor. Cu
ajutorul listei evenimentelor viitoare (FEC) se determină timpul la care tranzacţiile vor fi
active în model şi sunt mutate din lista FEC în lista CEC. Apoi tratează tranzacţiile din lista
CEC în ordinea în care ele se găsesc în listă. Începând cu blocul curent, fiecare tranzacţie
din CEC este mutată dintr-un bloc în altul până când mişcarea este întreruptă. Un bloc
ADVANCE transferă tranzacţia în FEC, un bloc SEIZE, ENTER, GATE, TEST, GATHER
sau MATCH determină aşteptarea unei condiţii, un bloc LINK transferă tranzacţia în lista
utilizator şi un bloc TERMINATE sau ASSEMBLE distruge tranzacţia.
După ce tranzacţia curentă a ajuns la un bloc care refuză tranzacţia atunci
următoarea tranzacţie din CEC este tratată. Dacă nu mai sunt tranzacţii în CEC, GPSS/H
controlează lista FEC, determinând timpul la care are loc următorul eveniment în sistem şi
setează ceasurile simulării la noua valoare curentă.

Caracteristici individuale ale tranzacţiilor sunt asociate acestora prin atribute.


Atributele sunt:
- fixe - Mulţimea acestor atribute conţinând numărul de identificare, prioritatea, timpul la
care au fost create şi blocul în care se găsesc în simulare
- variabile - Definite de utilizator cu ajutorul blocurilor GENERATE. Atributele asociate
tranzacţiilor poartă denumirea de parametrii tranzacţie. Parametrii pot fi utilizaţi pentru a
păstra anumite valori caracteristice individuale.
În tabelul 3.1 sunt date atributele numerice standard ale tranzacţiilor.

Tabelul 3.1 Atributele numerice standard ale tranzacţiilor

Atribut numeric standard Conţinut Explicaţie


(SNA)
XID1 Număr de Acest număr este asignat tranzacţiei la creare. Numărul
identificare de identificare se incrementează cu fiecare noua
tranzacţie creată. Fiecare număr este asociat numai o
dată în timpul simulării.
PR Prioritate Prioritatea poate fi o valoare întreagă. Valoarea priorităţii
creşte cu cât valoarea este mai mare.
M1 Timpul de tranzit Timpul de la crearea tranzacţiei sau de la intrarea într-un
bloc MARK fără operand.
MPLj Timpul de tranzit Diferenţa dintre timpul curent (AC1) şi valoarea
special parametrului real j.
PXj Valoarea Pentru X = F| H | B | L: the value of the parameter with
parametrului the name or number j
30
3.1.3 Instrucţiuni bloc pentru generarea şi distrugerea tranzacţiilor

Blocul GENERATE.

Funcţie: Blocul care generează tranzacţii.


Sintaxă: GENERATE A,B,C,D,E,F,G,H,I
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicită sau rezultat


A Timpul mediu de generare 0.0
B Variabilă aleatoare, cu distribuţie uniformă, 0.0
corespunzând jumătăţii timpului de generare.
C Interval de timp cu care este întârziată 0.0
prima tranzacţie generată. Variabilă deterministă.
D Numărul maxim de tranzacţii generate. Nu este limitat implicit
E Nivelul de prioritate 0
F,G,H,I Parametrii tranzacţiei

Exemple:
GENERATE 15.0,4.5,,10,3 - se generează 10 tranzacţii în intervalul 15±4.5 cu prioritatea 3
GENERATE RVEXPO(1,3.4) - se generează tranzacţii cu distribuţie de probabilitate exponenţială
GENERATE ,,,1,20 - se generează o tranzacţie cu prioritatea 20
GENERATE 20,,50,,2PF,3PB - se generează tranzacţii la momentele 50, 70, … cu două cuvinte
întregi şi trei de tip byte ca parametri
Observaţii:
1. Dacă B = 0, atunci tranzacţiile vor fi generate la momente deterministe de timp.
2. Obligatoriu B  A, altfel unele tranzacţii ar trebui generate la momente negative de timp
(inadmisibil).
3. Nivelului de prioritate i se atribuie o valoare întreagă cu semn în intervalul -2 000 000
000, +2 000 000 000. O tranzacţie este cu atât mai prioritară faţă de alte tranzacţii cu cât
numărul asociat gradului său de prioritate este mai mare decât al celorlalte.
4. Declaraţia poate primi etichetă, şi numele acesteia va deveni numele blocului.
5. Execuţia blocului GENERATE se face la un anumit timp al simulării şi determină crearea
unei tranzacţii la momentul AB care este diferit de timpul actual al simulării. Ca urmare
tranzacţia nou creată nu poate fi asociată blocului până ce timpul de simulare va deveni
egal cu timpul asociat tranzacţiei. Pe această durată tranzacţia este în starea “birth”
(născută) şi nu este asociată nici unui bloc.
Parametrii tranzacţiei: Fiecare din parametrii F,G,H,I, poate conţine câte o listă de
maxim 10 parametri de un anumit tip. Tipul parametrilor se referă la reprezentarea internă în
calculator:

Nume SNA Domeniu de valori Declaraţie


Parametru de tip byte PBj -2^7 . . . 2^7-1 INTEGER*1
Întreg pe jumătate de cuvânt PHj -2^15 . . . 2^15-1 INTEGER*2
Întreg pe un cuvânt PFj -2^31 . . . 2^31-1 INTEGER*4
Parametru în virgulă mobilă PLj Număr în virgulă mobilă dublă precizie REAL*8

Aceşti parametri pot stoca numai valori numerice. Valorile numerice ale parametrilor
din listele asociate tranzacţiilor au semnificaţii date de utilizator şi permit identificarea pe
parcursul simulării modelului a unor caracteristici particulare ale acestora numite atributele
tranzacţiilor.
31
Cum semnificaţia unei tranzacţii într-un model poate fi aceea a unui produs în
procesare, într-un flux de fabricaţie, atributele tranzacţiei pot reprezenta termene de
execuţie, destinaţia produsului, numărul de cod al produsului, o secvenţă semnificând
traseul de procesare sau alte informaţii legate de diverse alternative ce pot fi urmate de
produs în fluxul de fabricaţie. După ce parametrii au fost creaţi cu GENERATE, ei au
valoarea 0. Această valoare poate fi schimbată folosind blocurile ASSIGN, INDEX, LOOP,
COUNT, SELECT, ALTER sau SCAN. De asemenea, parametrului i se poate atribui o
valoare folosind instrucţiunea bloc BLET. Exemplul unui program GPSS/H prin care se pot
tipări într-un fişier atributele numerice standard ale tranzacţiilor este dat în figura 3.1.

******************************************************************************
SIMULATE
******************************************************************************
REP FILEDEF 'RAPORT'
PUTPIC FILE=REP,LINES=2
Atributele numerice standard (SNA) ale tranzacţiilor
===============================================================
GENERATE 10,,,2,33,1PH XACTS cu 1 parametru pe jumatate de cuvant
ADVANCE 15 Timp de asteptare
BPUTPIC FILE=REP,(XID1,PR,M1,PH1)
XID1 = * PR = ** M1 = **.** PH1 = *
TERMINATE 1
******************************************************************************
START 2,,,1
END
******************************************************************************
Figura 3.1 Program ce permite tipărirea într-un fişier
a atributelor numerice standard ale tranzacţiilor

Blocul TERMINATE.

Funcţie: Blocul care distruge tranzacţii.


Sintaxă: TERMINATE A
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicită sau rezultat


A Decrementează cu A unităţi contorul terminării simulării. 0

Observaţii:
1. Un model poate avea oricâte blocuri TERMINATE, dar contorul terminării simulării este
unic. Dacă A = 0, evident, contorul terminării simulării nu va fi modificat de tranzacţiile
care parcurg blocul.

Blocul ADVANCE.

Funcţie: Bloc care reţine un anumit timp tranzacţii.


Sintaxã: ADVANCE A,B
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicitã sau rezultat


A Timpul mediu de reţinere a tranzacţiei 0.0
B Variabila aleatoare cu distribuţie normalã, 0.0

32
corespunzând jumãtãţii timpului de
reţinere
Exemplu:
ADVANCE 1.5 - timpul de aşteptare determinist
ADVANCE 50,14.2 - timpul de aşteptare 50±14.2 uniform distribuit
ADVANCE RVEXPO(1,13.2) - timpul de aşteptare descris de o distribuţie de probabilitate
exponenţială
Observaţii.
1. A = 0 tranzacţiile nu vor fi reţinute de blocul ADVANCE.
2. B = 0 tranzacţiile vor fi reţinute un timp determinist.
3. B  A, altfel timpul de reţinere a tranzacţiei poate fi negativ (inadmisibil).
4. Blocurile ADVANCE nu refuzã niciodatã tranzacţii.
5. Blocurile GENERATE nu pot reţine tranzacţiile refuzate de blocurile urmãtoare şi atunci
când dupã GENERATE urmeazã un bloc ce ar putea refuza tranzacţiile pentru a nu avea
erori de simulare se introduce un bloc ADVANCE 0.

Blocul ASSIGN.

Funcţie: Atribuie valori numerice parametrilor tranzacţiei.


Sintaxã: ASSIGN A,B,C,D
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicitã sau rezultat


A Specificã numele sau numãrul parametrului
Poate fi urmat de:
+ semnificã cã valoarea lui A va fi
incrementatã cu B
-....valoarea lui A va fi decrementatã cu B
B Valoarea atribuitã parametrului A 0
C, D Tipul parametrului ( PB, PH, PF, PL)

Exemplu:
SIMULATE
*Asignarea valorilor parametrilor cu instrucţiunea ASSIGN
AAA GENERATE ,,,1,,1PF,2PH,5PL
ASSIGN 1,13,,PH
ASSIGN NUMAR,40000,PF
ASSIGN 2-5,RVEXPO(1,0.5),PL
ASSIGN INTRBL,N(AAA),PH
ASSIGN INTRBL+,1,PH
ADVANCE 10 Timp aşteptare
GENERATE ,,5,1
TERMINATE 1
START 1,,,1
END
Observaţii.
1. Atributele tranzacţiei pot fi vizualizate în simularea în modul test prin comanda : display
xact=xact_id, lansatã sub prompterul ferestrei de dialog, unde xact_id este numãrul
tranzacţiei

Blocul PRIORITY.

Funcţie: Schimbã nivelul de prioritate al tranzacţiilor.


Sintaxã: PRIORITY A,B
33
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicitã sau rezultat


A Specificã noul nivel de prioritate al tranzacţiilor
care intrã în acest bloc
B Cuvântul BUFFER, determinã limbajul re
executarea fazei de scanare a tranzacţiilor din
CEC, dupã ce nivelul de prioritate al tranzacţiei
curente a fost reactualizat.

Exemplu: PRIORITY 7,BUFFER

3.2 Gestionarea tranzacţiilor în listele CEC, FEC

Limbajul GPSS/H, gestioneazã intern tranzacţiile unui model în liste de evenimente.


Limbajul utilizează cinci tipuri de liste: lista evenimentelor curente, lista evenimentelor
viitoare, lista utilizator, lista evenimentelor întrerupte, listele MAG ( gestioneazã tranzacţiile
prin blocurile MATCH, ASSEMBLE şi GATHER)

Lista evenimentelor curente (Current Events Chain = CEC). Aceastã listã conţine toate
tranzacţiile unui model care trebuie sã se mişte la timpul curent simulat. Printre aceste
tranzacţii se gãsesc şi tranzacţiile blocate (tranzacţiile care sunt temporar refuzate de
blocurile urmãtoare). La fiecare moment de timp ordinea în care tranzacţiile se mişcã
corespunde ordinii sale în listã, ordonată dupã nivelul prioritãţii. La acelaşi nivel de prioritate,
tranzacţiile sunt mişcate în ordinea naturalã a poziţiei în listã.
În figura 3.2 este prezent un exemplu al modului în care tranzacţiile sunt gestionate
în lista evenimentelor curente.

(1) (2) (3) (4) (5) (6) (7) (8)


Xact CURBLK NXTBLK CHAINS SDPGFT** MARK-TIME MOVE-TIME PRORITY
5 7 8 CEC 15.45 30.00 20
3 12 13 CEC 20.00 30.00 16
8 9 10 CEC 12.35 30.00 16
6 Birth 1 CEC ---- 30.00 12

Figura 3.2 Exemplu privind informaţiile referitoare la tranzacţiile din lista CEC

Coloanele au urmãtoarea semnificaţie:


(1) Xact: Numãrul de identificare al tranzacţiei (primit la generare).
(2) CURBLK (Blocul curent): Numãrul locaţiei blocului în care se gãseşte tranzacţia. Dacă
tranzacţia este în lista FEC, până la intrarea acesteia în model pentru prima dată de la
crearea sa de către blocul GENERATE, valoarea sa este BIRTH.
(3) NXTBLK (Blocul urmãtor): Numãrul locaţiei blocului în care urmeazã sã se mişte
tranzacţia.
(4) CHAIN: Denumirea listei de evenimente.

Nume Listă Nume Listă


CEC Lista evenimentelor curente ASM Lista tranzacţiilor, aşteptând în cazul
unui bloc ASSEMBLE
FEC Lista evenimentelor viitoare GTH Lista tranzacţiilor care aşteaptă în cazul
unui bloc GATHER
INT Lista tranzacţiilor întrerupte UCH Lista de evenimente utilizator

34
MCH Lista tranzacţiilor care aşteaptă în SYS Lista sistem
cazul unui bloc MATCH
(5) SDPGFT**: Indicatori ai stãrii tranzacţiilor din listã la un anumit moment al simulãrii.

Indicator Semnificaţie Indicator Semnificaţie


S Scan/Skip-Indicator al listei F Tranzacţia poate accesa o facilitate
evenimentelor curente (CEC) blocată de instrucţiunea FUNAVAIL

D Inicator de întârziere pentru TRANSFER T Indicator TRACE (Setat de instrucţiunea


SIM TRACE)
P Modificare prioritate * Indicator TRAP, pentru depanare
interactivă
G Tranzacţia părăseşte blocul GENERATE

(6)MARK-TIME: Timpul de simulare la care a fost creatã tranzacţia. Cât timp tranzacţia nu
aparţine unui bloc valoarea acestui timp nu este iniţializatã şi de aceea se reprezintã sub
forma unei linii întrerupte.
(7) MOVE TIME (Timpul de mişcare): Timpul de simulare la care tranzacţiile se mişcã din
blocul curent în blocul urmãtor. Cum în aceastã listã toate tranzacţiile urmeazã sã se mişte
la acelaşi moment de timp identic cu timpul curent, este indicat în tabel sub forma liniei
întrerupte.
(8) Priority: Nivelul de prioritate atribuit tranzacţiei. Tranzacţiile sunt ordonate în sensul
descrescãtor al prioritãţii, fiind tratate primele cele cu gradul de prioritate cel mai mare. La
acelaşi grad de prioritate, tranzacţiile sunt servite în ordinea sosirii în listã.
(9) PC: este numărătorul preemţiunilor tranzacţiilor. Acest numărător este incrementat de
fiecare dată când tranzacţia este sau întârziată de instrucţiunea FUNAVAIL. Acest număr
este decrementat când preempţiunea încetează sau se termină întârzierea.
(10) ASMSET: Copii ale tranzacţiei creată cu instrucţiunea SPLIT, care formează un set de
asamblare. ASMSET este numărul acestui set. Este egal cu numărul tranzacţiei originale.
(11) ADDR: Atributul conţine adresa maşinii curente în care se găseşte tranzacţia.
Lista evenimentelor viitoare (Future Events Chain = FEC). Conţine tranzacţiile care
nu se vor muta din blocul curent în blocul urmãtor la momentul curent de timp ci la un
anumit moment de timp viitor. Acestea provin din: tranzacţiile generate la care timpul asociat
este mai mare decât timpul curent de simulare şi din cele care se gãsesc reţinute în blocuri
pânã la un anumit timp viitor.
Referitor la primul caz, se menţioneazã cã acţiunea propriu-zisã de generare a
tranzacţie de către blocul GENERATE se face anterior timpului asociat tranzacţiei. Astfel,
deşi tranzacţia este creatã, pânã când timpul de simulare curent nu este egal cu timpul
asociat tranzacţiei aceasta nu este luatã în considerare. Ca urmare se spune cã în aceastã
perioadã tranzacţia este în starea “birth-nãscutã”, nu este încã atribuit nici unui bloc şi este
tratatã în lista evenimentelor viitoare. Ordonarea tranzacţiilor în aceastã listã se face în
ordinea crescãtoare a timpilor de mişcare (MOVE TIME). La acelaşi timp de mişcare,
tranzacţiile se ordoneazã în ordinea naturalã în care au intrat în listã. Un exemplu de
ordonare a tranzacţiilor în lista evenimentelor curente este prezentat în figura 3.2.

(1) (2) (3) (4) (5) (6) (7) (8)


Xact CURBLK NXTBLK CHAINS SDPGFT** MARK-TIME MOVE-TIME PRORITY
7 3 4 FEC 12.25 42.6 3
2 Birth 19 FEC ---- 47.6 15
9 7 8 FEC 5.35 51.9 12
4 32 33 FEC 0.00 51.9 18

35
Figura 3.2 Exemplu de ordonarea a tranzacţiilor în lista FEC
Simularea unui model este realizatã intern în douã faze:
- faza de scanare a tranzacţiilor din lista CEC, în care sunt mişcate tranzacţiile din blocul
curent în blocul urmãtor în ordinea în care acestea se gãsesc în listã
- faza de actualizare a ceasului de simulare (când toate tranzacţiile din lista CEC au fost
epuizate atunci sunt transferate din lista FEC în lista CEC toate tranzacţiile care au timpul
de mişcare imediat urmãtor timpului curent. La introducerea în lista CEC, tranzacţiile sunt
ordonate în ordinea prioritãţilor. Dupã aceasta timpul curent al simulãrii este actualizat cu
valoarea timpului de mişcare urmãtor.
În acest fel simularea unui model echivaleazã cu alternarea fazelor de scanare,
actualizare, tranzacţiile, dupã generare urmând ciclul FEC-CEC, pânã ce contorul simulãrii
are o valoare egalã sau mai micã cu zero (figura 3.3).

Tranzacţia este pusã în FEC Lista FEC


dacã timpul asociat este > 0

Creare tranzacţii Timpul de mişcare =


Ceasul simulãrii
Tranzacţia este pusã în CEC Lista CEC
dacã timpul asociat = 0

TERMINATE

Figura 3.3 Schema mişcării tranzacţiilor între listele CEC, FEC

Modul intern în care se deruleazã faza de scanare este prezentatã în schema logicã
din figura 3.4.
Faza de scanare

Nu
Existã cel puţin o tranzacţie
în CEC ?
Da
Tranzacţia este mutată cât mai
departe în model.

Da Raportul
Este contorul simulãrii TC0 ?
postsimulãrii
Nu
Da Existã tranzacţii succesive în
CEC ?
Nu

Faza de actualizare a
ceasului simulãrii

Figura 3.4 Modul intern de tratare a tranzacţiilor în faza de scanare

Logica dupã care se realizeazã intern actualizarea ceasului de simulare este


prezentată în figura 3.5.
36
Faza de actualizare
a ceasului simulãrii

Fixeazã valoarea ceasului de Dacã lista FEC este goalã se


simulare la valoarea timpului de lanseazã mesajul de eroare: “Nu
existã eveniment viitor în sistem”
mişcare a primei tranzacţii din FEC.
şi simularea se opreşte.

Mutã tranzacţia din lista FEC în


lista CEC

Da Timpul de mişcare al primei


tranzacţii din FEC este identic cu
ceasul de simulare ?
Nu
Faza de scanare

Figura 3.5 Modul de actualizare a timpului în simularea modelului

Evoluţia sistemului în timpul simulãrii în modul test poate fi vizualizatã prin comenzi
lansate de sub prompterul ferestrei de dialog. Aceste comenzi sunt prezentate în figura 3.6.

Comandã Modificatorul Acţiune


comenzii
: display blo Afişeazã informaţii referitoare la nr. curent şi total de tranzacţii din bloc.
cec Afişeazã lista evenimentelor curente
cha Afişeazã listele de evenimente utilizatator
clocks Afişeazã valorile curente şi absolute ale ceasului.
fac Afişeazã raportul facilitãţii
que Afişeazã lista evenimentelor viitoare.
table Afişeazã raportul entitãţii queue
sto Afişeazã raportul entitatãţii storage
traps Afişeazã întreruperile.
xact=xact_id Afişeazã proprietãţile tranzacţiei : xact_id.
pf Afişeazã semnificaţia tastelor de control.
cec fec Comandã compusã de afişare a listelor CEC, FEC.
: ds Identificator_Bloc Afişeazã 5 linii ale sursei model începând cu blocul Identificator_Bloc.
: run Comanda de lansare a simulãrii.
: set tv off Se afişeazã numai fereastra de dialog.
tv on Se afişeazã cele trei ferestre: sursã, stare, dialog.
: step nr_paşi Simularea înainteazã nr_paşi. Un pas echivalent execuţiei unui bloc.
Numãrul de paşi apare explicit în comandã când: nr_paşi>1.
: trap clock=clock_time Fixeazã întrerupere când ceasul de simulare are valoarea clock_time.
next Fixeazã o întrerupere înaintea mişcãrii unei tranzacţii
scan Fixeazã o întrerupere la fiecare început al fazei de scanare.
system Fixeazã o întrerupere la sfârşitul mişcãrii unei tranzacţii
next system Fixeazã întrerupere la condiţiile next şi system.
: untrap clock=clock_time Invalideazã întreruperile explicate mai sus.
next
scan
system

37
Figura 3.6 Comenzi în simularea în modul TEST

Faza de
scanare
La o întrerupere scan , se
dã controlul utilizatorului
Nu Existã cel puţin o tranzacţie în
CEC ? La o întrerupere next, se
dã controlul utilizatorului
La o întrerupere clock, se dã
Da
controlul utilizatorului dacã:
Mutã tranzacţia cât mai departe ceasul curent  clock_time
posibil pe calea modelului.
La o întrerupere system, se
dã controlul utilizatorului

Este contorul simulãrii TC0 ? Da Raportul


postsimulãrii
Nu
Da
Existã tranzacţii succesive în CEC ?

Nu

Faza de actualizare
a ceasului simulãrii

Figura 3.7 Schema tratării tranzacţiilor între faza de scanare şi cea de actualizare a timpului
în simularea modelului

Momentele în care se fixeazã întreruperile next, clock, scan şi system sunt


prezentate pe schema logicã a fazei de scanare în figura 3.7.

3.2.1 Simularea în modul test a unui exemplu

Se va considera urmãtorul model:

SIMULATE
*
BLOCK1 GENERATE 25,10
BLOCK2 TERMINATE 1
*
BLOCK3 GENERATE 50,20,0,,5
BLOCK4 TERMINATE 1
*
START 3
END

Modelul este compilat şi simulat în modul test cu comanda: > gpssh test tvtnw
BLOCK CURRENT TOTAL test.gps SOURCE CODE
---------- ------------- --------- --------------------------------------------------
1 0 BLOCK1 GENERATE 25,10

38
2 0 BLOCK2 TERMINATE 1
3 1 BLOCK3 GENERATE 50,20,0,,5

BLOCK TERMINATE
======================================================================
S/C: OFF ABS CLOCK: 0.0 REL CLOCK: 0.0 TTG: 3
======================================================================
XACT: 2 CURBLK: BLOCK3 NEXTBLK: BLOCK4 CHAINS: CEC PC:
MARK-TIME: 0. MOVE-TIME: 0. PRIORITY: 5
======================================================================
Ready!
:step
XACT 2 POISED AT BLOCK 4 (BLOCK4). RELATIVE CLOCK: 0.0
:d cec fec

Xact CURBLK NXTBLK CHAINS SDPGFT** MARK-TIME MOVE-TIME PRORITY


2 BLOCK3 BLOCK4 CEC 0. 0. 5
1 Birth BLOCK1 FEC ---- 20.4059 0
3 Birth 19 FEC ---- 59.59 5

Comentariu: Simularea începe la momentul de timp 0. Iniţial a fost executat primul bloc
GENERATE, creându-se tranzacţia Xact=1, la momentul 20.4059, diferit de timpul curent.
Ca urmare tranzacţia în stare “Birth” este pusã în lista evenimentelor viitoare şi nu este
atribuitã nici unui bloc. Execuţia celui de-al doilea bloc GENERATE, determinã, prin
operandul timpului de offset la care se creează prima tranzacţie şi care este zero, ca
tranzacţia Xact=2 sã fie creatã la momentul 0, egal cu momentul simulãrii. Ca urmare
tranzacţia este atribuitã blocului BLOCK4, i se trece timpul la care a fost generatã (MARK-
TIME) şi este plasatã în lista evenimentelor curente. Pentru cã tranzacţia generatã de cel
de-al doilea bloc GENERATE a fost plasatã direct în CEC, se genereazã încã o tranzacţie
Xact=3, la momentul 59.59, în starea “Birth” plasatã în lista evenimentelor viitoare.

BLOCK CURRENT TOTAL test.gps SOURCE CODE


---------- ------------- --------- --------------------------------------------------
1 0 BLOCK1 GENERATE 25,10
2 0 BLOCK2 TERMINAT 1
3 1 BLOCK3 GENERATE 50,20,0,,5
4 1 BLOCK4 TERMINATE 1
======================================================================
S/C: OFF ABS CLOCK: 0.0 REL CLOCK: 0.0 TTG: 2
======================================================================
XACT: 2 CURBLK: BLOCK3 NEXTBLK: BLOCK4 CHAINS: PC:
MARK-TIME: 0. MOVE-TIME: 0. PRIORITY: 5
======================================================================

Ready!
:step
XACT 2 DESTROIED AT BLOCK 4 (BLOCK4). RELATIVE CLOCK: 0.0
:d cec fec

Xact CURBLK NXTBLK CHAINS SDPGFT** MARK-TIME MOVE-TIME PRORITY


1 Birth BLOCK1 FEC ---- 20.4059 0
3 Birth 19 FEC ---- 59.59 5

Comentariu: Execuţia unui nou pas determinã mişcarea tranzacţiei Xact=2, din CEC, în
urmãtorul urmãtorul bloc, care este TERMINATE. Efectul blocului TERMINATE este de a
distruge tranzacţia. Ca urmare, contorul simulãrii este decrementat cu valoarea operandului
39
operaţiei TERMINATE (TTG=3-1), tranzacţia Xact=2 este distrusã şi lista CEC rãmâne
goalã. În acest moment prima fazã de scanare a listei CEC este terminatã. În lista FEC nu
s-a produs nici o modificare.
BLOCK CURRENT TOTAL test.gps SOURCE CODE
---------- ------------- --------- --------------------------------------------------
1 1 BLOCK1 GENERATE 25,10
2 0 BLOCK2 TERMINATE 1
3 1 BLOCK3 GENERATE 50,20,0,,5
4 1 BLOCK4 TERMINATE 1
======================================================================
S/C: OFF ABS CLOCK: 20.4059 REL CLOCK: 20.4059 TTG: 2
======================================================================
XACT: 1 CURBLK: BLOCK1 NEXTBLK: BLOCK2 CHAINS: CEC PC:
MARK-TIME: 20.4059. MOVE-TIME: 20.4059 PRIORITY: 0
======================================================================
Ready!
:step
XACT 1 POISED AT BLOCK 2 (BLOCK2). RELATIVE CLOCK: 20.4059
:d cec fec

Xact CURBLK NXTBLK CHAINS SDPGFT** MARK-TIME MOVE-TIME PRORITY


1 BLOCK1 BLOCK2 CEC 20.4059 20.4059 0
4 Birth BLOCK1 FEC ---- 39.4878 0
3 Birth 19 FEC ---- 59.59 5

Comentariu: Dupã prima fazã de scanare ceasul de simulare a fost reactualizat cu


valoarea celui mai mic timp de mişcare din lista FEC anterioarã. Ceasul de simulare devine
20.4059, tranzacţia Xact=1 este trecutã în CEC şi atribuitã blocului BLOCK1. Deoarece
tranzacţia primului bloc GENERATE a trecut acum din FEC în CEC acesta va genera încã o
tranzacţie Xact=4, la timpul 39.4878 care este trecutã în lista FEC. Timpul de mişcare al
tranzacţiei Xact=4 este mai mic decât cel al tranzacţiei Xact=3, şi deci aceasta este plasatã
prima în lista FEC.

BLOCK CURRENT TOTAL test.gps SOURCE CODE


---------- ------------- --------- --------------------------------------------------
1 1 BLOCK1 GENERATE 25,10
2 1 BLOCK2 TERMINATE 1
3 1 BLOCK3 GENERATE 50,20,0,,5
4 1 BLOCK4 TERMINATE 1
=====================================================================
=
S/C: OFF ABS CLOCK: 20.4059 REL CLOCK: 20.4059 TTG: 1
======================================================================
XACT: 1 CURBLK: BLOCK1 NEXTBLK: BLOCK2 CHAINS: PC:
MARK-TIME: 20.4059 MOVE-TIME: 20.4059 PRIORITY: 0
======================================================================

Ready!
:step
XACT 1 DESTROIED AT BLOCK 2. RELATIVE CLOCK: 20.4059
:d cec fec

Xact CURBLK NXTBLK CHAINS SDPGFT** MARK-TIME MOVE-TIME PRORITY


4 Birth BLOCK1 FEC ---- 39.4878 0
3 Birth 19 FEC ---- 59.59 5

40
Comentariu: În urmãtoare fazã de scanare, tranzacţia Xact=1 este distrusã de blocul
BLOCK2, TERMINATE, decrementând contorul simulãrii. Cu aceasta a doua fazã de
scanare este încheiatã.

BLOCK CURRENT TOTAL test.gps SOURCE CODE


---------- ------------- --------- --------------------------------------------------
1 2 BLOCK1 GENERATE 25,10
2 1 BLOCK2 TERMINATE 1
3 1 BLOCK3 GENERATE 50,20,0,,5
4 1 BLOCK4 TERMINATE 1
======================================================================
S/C: OFF ABS CLOCK: 39.4878 REL CLOCK: 39.4878 TTG: 1
======================================================================
XACT: 4 CURBLK: BLOCK1 NEXTBLK: BLOCK2 CHAINS: CEC PC:
MARK-TIME: 39.4878 MOVE-TIME: 39.4878 PRIORITY: 0
======================================================================
Ready!
:step
XACT 4 POISED AT BLOCK 2 (BLOCK2). RELATIVE CLOCK: 39.4878
:d cec fec

Xact CURBLK NXTBLK CHAINS SDPGFT** MARK-TIME MOVE-TIME PRORITY


4 BLOCK1 BLOCK2 CEC 39.4878 39.4878 0
5 Birth BLOCK1 FEC ---- 56.9011 0
3 Birth 19 FEC ---- 59.59 5

Comentariu: Este actualizat ceasul simulãrii şi lista CEC. Deoarece tranzacţia Xact=4 a fost
mutatã din FEC în CEC, primul bloc GENERATE va genera încã o tranzacţie Xact=5, care
va fi plasatã în FEC. Se observã cã blocurile GENERATE, vor crea tranzacţii noi de fiecare
datã când tranzacţia anterior creatã, din FEC este trecutã în CEC.

BLOCK CURRENT TOTAL test.gps SOURCE CODE


---------- ------------- --------- --------------------------------------------------
1 2 BLOCK1 GENERATE 25,10
2 2 BLOCK2 TERMINATE 1
3 1 BLOCK3 GENERATE 50,20,0,,5
4 1 BLOCK4 TERMINATE 1
======================================================================
S/C: OFF ABS CLOCK: 39.4878 REL CLOCK: 39.4878 TTG: 0
======================================================================
XACT: 4 CURBLK: BLOCK1 NEXTBLK: BLOCK2 CHAINS: PC:
MARK-TIME: 39.4878. MOVE-TIME: 39.4878 PRIORITY: 0
======================================================================
Ready!
:step
XACT 4 DESTROIED AT BLOCK 2 (BLOCK2). RELATIVE CLOCK: 39.4878
:d cec fec

Xact CURBLK NXTBLK CHAINS SDPGFT** MARK-TIME MOVE-TIME PRORITY


5 Birth BLOCK1 FEC ---- 56.9011 0
3 Birth 19 FEC ---- 59.59 5

Comentariu: Prin execuţia blocului TERMINATE, contorul simulării devine 0 şi simularea se


opreşte.

41
3.3 Probleme propuse

1. Simulaţi următorul program, urmărind modificarea ceasului absolut şi relativ al simulării,


prin execuţia declaraţiei RESET.

SIMULATE
GENERATE 80,,0
ADVANCE 50
TERMINATE 1
START 1
RESET
START 1
END

2. Executaţi următorul program urmărind ordinea de execuţie a declaraţiilor de control şi a


instrucţiunilor bloc. Analizând fisierul RAPORT.TXT, creat de program determinaţi diferenţa
dintre instrucţiunea RESET şi CLEAR.

SIMULATE
REP FILEDEF 'RAPORT.TXT' Fisierul cu rezultatul simularii
PUTPIC FILE=REP,LINES=2
Nr. Curent Prima tranzactie este generata la
Timpul absolut Timpul relativ
INTEGER &ISTART Numărător al execuţiei simulării
LET &ISTART=1 Valoarea iniţiala
GENERATE 10,5
BPUTPIC FILE=REP,(&ISTART,AC1,C1)
*** **.*** **.***
TERMINATE 1
START 1 Prima execuţie a simulării
LET &ISTART=2
START 1 A doua execuţie a simulării
DO &ISTART=3,5
START 1 Simularea a 3-a până la a 5-a
ENDDO
PUTSTRING FILE=REP,(' Dupa execuţia declaraţiei RESET')
DO &ISTART=6,8
RESET
START 1 Simularea a 6-a până la a 8-a
ENDDO &ISTART
PUTSTRING FILE=REP,(' Dupa execuţia instrucţiunii CLEAR')
DO &ISTART=9,11
CLEAR
START 1 9th TO 11th SIMULATION RUN
ENDDO &ISTART
PUTSTRING (' Sfarsit')
END

3. Analizaţi următorul program descriind funcţionarea sa. Simulaţi programul şi comparaţi


predicţiile d-voastră cu rezultatul simulării.
SIMULATE
GENERATE 30,,100,5,,3PF,4PH
ADVANCE 1000
GENERATE ,,,1,50,2PB,1P
ADVANCE 1000

42
GENERATE 20,,,3,,0PH
ADVANCE 1000
GENERATE ,,250
TERMINATE 1
START 1,,,1
END

43
Capitolul 4 Modelarea serverilor individuali şi înregistrarea informaţiilor
în “cozi de evenimente” (QUEUE)

 Modelarea resurselor individuale în limbajul GPSS/H


 Gestionarea tranzacţiilor blocate şi a celor întrerupte
 Înregistrarea informaţiilor din model

4.1 Clasa facilităţilor şi modelarea acestora

Facilitatea (Facility) este denumirea utilizată de GPPS/H pentru o clasă de elemente


pasive şi statice ale modelului (obiecte) care deservesc o anumită funcţie. Acestea sunt
folosite pentru modelarea sistemelor de aşteptare mono-canal sau pentru izolarea
tranzacţiilor (se creează o izolare temporală prin timpul diferit de reţinere a tranzacţiilor). O
facilitate poate reţine numai o tranzacţie. După reţinerea tranzacţiei (SEIZE) facilitatea trece
în starea “busy” până când tranzacţia părăseşte facilitatea (RELEASE). Când facilitatea nu
are tranzacţii reţinute atunci se găseşte în starea “not used”. O tranzacţie care ocupă la un
moment dat facilitatea poate fi temporar sau total înlocuită de o tranzacţie cu prioritate mai
mare. Acest mod de lucru al facilităţii este denumit cu preemţiune sau întrerupere.
Cu ajutorul facilităţilor se pot modela serverii individuali. Un server individual este o
componentă uzuală a sistemelor care modelează resurse care pot deservi la un moment dat
o singură cerere. De exemplu, o maşină unealtă poate prelucra numai o piesă, o imprimantă
ataşată unui calculator poate tipări la un moment dat numai un singur fişier, etc.
Modul în care serverul tratează cererile este numit regulă de servire sau disciplina
tratării cererilor unei cozi de aşteptare. Ordinea în care cererile sunt servite poartă numele
de ordinea de servire. Câteva reguli de tratare a cererilor dintr-o coadă de aşteptare sunt:

1. Primul venit-primul servit. Mai este cunoscută şi sub numele FIFO (“first in- first out).
Cererile sunt tratate în ordinea cronologică a sosirii lor.
2. Primul venit-primul servit la aceeaşi prioritate. Cererilor li se atribuie nivele de
prioritate, fiind tratate în ordinea descrescătoare a priorităţii.
3. Timpul de procesare. Tratarea cererilor se face în ordinea crescătoare a timpul mediu
estimat de servire. Cu cât timpul mediu estimat de servire a cererii este mai mic cu atât mai
mare este prioritatea cererii.

În figura 1. este prezentat un sistem server individual - coadă de aşteptare,


exemplificându-se o staţie de lucru în care piesele brute aşteaptă într-un buffer accesul pe
maşina unealtă.

Sosire cereri Coadã de aşteptare Server Ieşire

Figura 4.1 Exemplul unui sistem cu server individual, lucrând într-un sistem fără
preempţiune

Serverul individual este modelat prin intermediul a doua blocuri utilizate împreună:
blocul SEIZE şi RELEASE sau PREEMPT şi RETURN. Primul bloc, realizează logica de
primire a cererilor, de iniţiere a procesul de aşteptare (dacă facilitatea este ocupată) şi de
43
ocupare a serverului când acesta devine disponibil. Blocul RELEASE realizează funcţia de
eliberare a serverului după terminarea operaţiei curente. În cazul blocurilor PREEMPT şi
RETURN serverul poate fi întrerupt din activitate de o altă tranzacţie cu nivel de prioritate
mai ridicat.
Când facilitatea este folosită pentru a modela serveri individuali, tranzacţiile
modelează cererile către server. Cererea de accesare a serverului începe când o tranzacţie
trebuie să fie mutată din blocul curent în blocul următor de tip SEIZE. Dacă serverul este
sub controlul unei alte cereri, tranzacţia care încearcă să captureze facilitatea este refuzată,
fiind forţată să aştepte. SEIZE este primul exemplu de bloc care refuză în unele situaţii
accesul unei tranzacţii. Toate blocurile care au aceasta proprietate sunt folosite pentru a
modela controlul accesului la resurse. Blocul precedent blocului SEIZE este denumit bloc
pre-SEIZE. În acest bloc rămân tranzacţiile cărora li s-a refuzat accesul în blocul SEIZE.
Dacă blocul pre-SEIZE este un bloc de tip GENERATE, tranzacţiile blocate perturbă modul
normal de lucru al blocului.
Din punctul de vedere al gestiunii tranzacţiilor în lista de evenimente, aceasta rămâne
în lista CEC, aşteptând până va prelua controlul blocului următor. În cazul mai multor
tranzacţii care aşteaptă, ordinea tratării lor va fi ordinea sosirii la acelaşi nivel de prioritate.
În cazul blocului PREEMPT, tranzacţia în curs de servire poate fi întreruptă de o tranzacţie
cu un grad mai mare de prioritate. Tranzacţia a cărei servire este întreruptă este gestionată
de GPSS/H în lista evenimentelor întrerupte până la reluarea servirii acesteia.

Blocurile SEIZE, RELEASE

Funcţie: Modelează o facilitate de tip server individual care nu poate fi întrerupt.


Sintaxă: SEIZE A
Blocuri care modelează funcţionarea facilităţii
RELEASE A

Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicită sau rezultat


A Identificatorul facilităţii. Nu are denumire implicită

Exemplu: SEIZE CPU


ADVANCE 10,1.5
RELEASE CPU

Observaţii. 1) Operandul este bine să aibă minimum trei caractere alfabetice


pentru a evita aceeaşi denumire cu a unui cuvânt rezervat
2) Este recomandat să nu se folosească aceeaşi denumire pentru
un bloc şi operandul unei facilităţi.

Blocurile PREEMPT, RETURN

Funcţie: Modelează o facilitate de tip server individual care poate fi întreruptă de


alte tranzacţii mai prioritare.
Sintaxă: PREEMPT A,B,C,D,E
Blocuri care modelează funcţionarea serverului
RETURN A

44
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicită sau rezultat


A Identificatorul facilităţii. Nu are denumire implicită
B -Dacă nu se specifică atunci un singur nivel de
întrerupere este permis (analog blocului SEIZE)
- PR .Tratarea tranzacţiilor este întreruptă după
criteriul priorităţii
C Numărul sau numele blocului în care vor fi trimise
tranzacţiile întrerupte
D Numărul sau tipul parametrului tranzacţii în care va fi
înregistrat timpul rămas de ocupare a facilităţii
E RE . Tranzacţia este eliminată din facilitate şi este
mutată în blocul specificat de operandul C.

Raportul facilităţii. În timpul simulării, GPSS/H adună informaţii legate de fiecare


facilitate din model şi la sfârşit furnizează raportul post simulării care conţine următoarele
rapoarte: valorile ceasului relativ şi absolut, raportul conţinutului total şi curent al blocurilor
modelului, raportul facilităţii, raportul referitor la generatorul de numere aleatoare.
Raportul facilităţii conţine următoarele informaţii:

(1) FACILITY: Numele identificatorului facilităţii.


(2) --AVG-UTIL-DURING-- TOTAL TIME : indică fracţiunea din timpul total de simulare în
care facilitatea a fost ocupată. (de ex. .800 corespunde la 80%)
(3) --AVG-UTIL-DURING-- AVAIL TIME: indică fracţiunea din timpul de simulare în care
facilitatea a fost disponibilă (în condiţie de funcţionare).
(4) --AVG-UTIL-DURING-- UNAVL TIME: indică fracţiunea din timpul de simulare în care
facilitatea nu a fost disponibilă.
(5 )ENTRIES: indică numărul de tranzacţii care au capturat facilitatea. Dacă acest număr
este zero nu va fi generat raportul facilităţii.
(6) AVERAGE TIME/XACT: indică timpul mediu în care facilitatea a tratat o cerere.
(7) CURRENT STATUS: indică dacă facilitatea este sau nu în stare de funcţionare. AVAIL
înseamnă în stare de funcţionare (disponibilă), UNAVAIL facilitatea nu este în stare de
funcţionare (ne disponibilă).
(8) PERCENT AVAIL: indică fracţiunea din timpul total de simulare în care facilitatea a fost
în funcţiune(disponibilă).
(9) SEIZING XACT: indică numărul de identificare al tranzacţiei care este în curs de tratare
de în momentul opririi simulării. Coloana este goală, dacă nu sunt tranzacţii în curs de
tratare la momentul opririi simulării.
(10) PREEMPTING XACT: indică numărul de identificare al tranzacţiei (dacă există) care
este tratată de server şi care a întrerupt altă cerere curentă.

În figura 4.2 şi 4.3 se prezintă un exemplu de modelare a unui server individual şi


raportul post simulării. Serverul este un controler cu evenimente discrete care conduce
desfăşurarea activităţilor într-un sistem de fabricaţie. Evenimentele planificate se succed în
sistem la intervale de 16±1 unităţi de timp şi au o durată de procesare variabilă modelată
printr-o distribuţie exponenţială. În sistem pot apare evenimente neprevăzute care sunt
rezolvate într-un timp aleatoriu cu o distribuţie exponenţială, Acestora li se alocă prioritatea
maximă, întrerupând evenimentul planificat aflat în procesare. Acestuia i se măreşte
prioritatea faţă de evenimentele planificate neîntrerupte şi este trecute într-o coadă de
aşteptare. La revenire, sistemul de control va continua procesarea pe durata de timp
rămasă, corespunzătoare evenimentului.
45
******************************************************************************
SIMULATE
******************************************************************************
GENERATE 16,1,,,5,1PL Evenimente sistem
ASSIGN OPTIME,RVEXPO(1,20.0),PL
BQWAIT SEIZE CONTROL
ADVANCE PL(OPTIME)
RELEASE CONTROL
TERMINATE
******************************************************************************
GENERATE 50,10,,,50,1PL Eveniment neprevazut
PREEMPT CONTROL,PR,BCHPR,(OPTIME)PL,RE
ADVANCE RVEXPO(2,30)
RETURN CONTROL
TERMINATE 1
BCHPR PRIORITY 10 Schimbare prioritate
TRANSFER ,BQWAIT
START 10
******************************************************************************
END
******************************************************************************

Figura 4.2 Exemplul unui program GPSS/H care modelează un server individual
--AVG-UTIL-DURING--
FACILITY TOTAL AVAIL UNAVL ENTRIES AVERAGE CURRENT PERCENT SEIZING PREEMPTING
TIME TIME TIME TIME/XACT STATUS AVAIL XACT XACT
CONTROL 0.957 25 24.460 AVAIL

Figura 4.3 Raportul facilităţii rezultat în urma simulării

Atributele standard numerice şi logice asociate facilităţilor. În general, atributele


asociate facilităţilor încep cu litera F. Acestea sunt prezentate în tabelul 4.1.

Tabelul 4.1 Atributele standard logice şi numerice ale facilităţii

Denumire Semnificaţie
Fj TRUE, dacă facilitatea este utilizată normal sau în preempţiune la momentul
curent
FIj TRUE, dacă facilitatea j este întreruptă la momentul curent
FNIj TRUE, dacă facilitatea j nu este întreruptă la momentul curent
Uj TRUE, dacă facilitatea j este utilizată la momentul curent
NUj TRUE, dacă facilitatea j nu este utilizată la momentul curent
FCj Numărul de tranzacţii care au accesat facilitatea de la începutul simulării.
FRj Nivelul de utilizare per mie al facilităţii
FTj Timpul mediu de utilizare al facilităţii de către tranzacţii
j are semnificaţia numărului sau a numelui facilităţii. Acest număr poate fi o constantă sau o expresie
aritmetică.

4.2 Gestionarea tranzacţiilor blocate în blocurile pre-SEIZE, pre-PREEMPT

În modul în care a fost prezentată simularea unui model, ca execuţia tranzacţiilor din
lista evenimentelor curente (CEC) şi apoi reactualizarea ceasului cu valoarea timpului de
mişcare al tranzacţiei următoare din lista evenimentelor viitoare (FEC), deducem că

46
tranzacţia care urmează să se mişte în blocul SEIZE se găseşte în lista evenimentelor
curente. Dacă blocul SEIZE refuză tranzacţia, aceasta rămâne blocată în lista
evenimentelor curente până ce tranzacţia care a ocupat anterior facilitatea execută blocul
RELEASE. Spunem că tranzacţia care a parcurs blocul RELEASE într-o astfel de situaţie a
deblocat tranzacţiile blocate. În situaţia în care în lista CEC sunt tranzacţii blocate apare
următorul caz particular.
Considerând tranzacţii cu acelaşi grad de prioritate, să analizăm cazul în care
primele tranzacţii din lista CEC sunt blocate în blocul pre-SEIZE şi ultima tranzacţie din lista
CEC este tranzacţia care execută un bloc RELEASE, deci deblochează. În faza de scanare,
tranzacţiile blocate nu pot fi mişcate, se execută ultima tranzacţie ceea ce ar determina
finalizarea fazei de scanare. Dar execuţia ultimei tranzacţii, dă posibilitatea mişcării primei
tranzacţii. Aceasta implică necesitatea re scanării listei CEC. Situaţiile acestea particulare,
când este necesară scanarea de mai multe ori a listei CEC, sunt sesizate de indicatorul
schimbării stării modelului. Acest indicator notat cu S/C în fereastra stării modelului poate
avea valoarea ON sau OFF. În timpul fazei de scanare, de fiecare dată când o tranzacţie
execută un bloc care schimbă starea unei entităţi a modelului, GPSS/H pune indicatorul
schimbării stării modelului în starea ON. La sfârşitul fazei de scanare se testează starea
indicatorului şi dacă acesta era în starea ON se trece starea indicatorului în OFF şi se reia
faza de scanare. Cu această observaţie poate fi completată schema logică după care se
execută faza de scanare ca în figura 4.4.

Faza de scanare

Nu
Existã cel puţin o tranzacţie în CEC ?
Da
Tranzacţia este mutată cât mai
departe posibil în model.

Da
Este contorul simulãrii TC0 ? Raportul
postsimulãrii
Nu
Da
Indicatorul schimbãrii stãrii Indicatorului stãrii
modelului este ON ? modelului este comutat pe
OFF
Nu
Da Existã tranzacţii succesive în CEC
?

Faza de actualizare a
ceasului simulãrii

Figura 4.4 Modul intern de lucru al simulatorului în timpul necesităţii unor scanări multiple

Execuţia diferitelor blocuri are acţiuni diferite asupra indicatorului de schimbarea


stării modelului. Aşa cum s-a văzut, blocul RELEASE trece indicatorul în starea ON şi în

47
varianta completă a limbajului sunt 13 blocuri cu un efect similar. Scopul trecerii indicatorului
în această stare este de a re scana lista CEC la momentul de timp respectiv.
Blocul SEIZE este printre blocurile care trec indicatorul în starea ON. Acest lucru se
produce pentru că există blocul GATE care poate bloca mişcarea unei tranzacţii până când
o anumită facilitate este capturată. Alte blocuri care setează indicatorul în starea ON, şi care
vor fi prezentate mai târziu, sunt: ENTER, LEAVE etc. Dacă o tranzacţie este blocată de un
bloc SEIZE, aceasta va rămâne blocată până când tranzacţia care ocupă facilitatea va
executa un bloc RELEASE. O astfel de tranzacţie poartă numele de tranzacţie unic
blocată, pentru că singura soluţie de deblocare este execuţia blocului RELEASE. Dacă
tranzacţia este unic blocată rezultă că în timpul fazei de scanare nu are rost să se încerce
mişcarea tranzacţiei până când condiţia de blocare nu este înlăturată. În scopul
recunoaşterii acestei situaţii, GPSS/H, ataşează fiecărei tranzacţii un set de indicatori
(SPDGF**), indicatorul setat în această situaţie fiind indicatorul de scan-skip (indicatorul
de trecere sărire a scanării tranzacţiei). Indicatorul are două stări: ON şi OFF. Când este în
starea ON apare afişat un S. Dacă tranzacţia este unic blocată atunci indicatorul este trecut
în starea ON, tranzacţia rămâne în lista evenimentelor curente şi este afişat indicatorul S.
Faza de scanare continuă cu următoarele tranzacţii din listă analizate secvenţial. Indicatorul
tranzacţiei va trece în starea OFF când cauza care a produs blocarea este înlăturată.

După cum s-a văzut la prezentarea sintaxei blocului PREEMPT, acesta este unul din
blocurile cu acţiune complexă în modelarea facilităţii. Astfel, dacă operanzii B,...,E nu sunt
specificaţi atunci facilitatea va avea un singur nivel de întrerupere. Deci dacă o tranzacţie
ocupă facilitatea, atunci următoarele vor rămâne blocate în blocul pre-PREEMPT la fel ca în
cazul blocului SEIZE. Dacă sunt utilizaţi numai operanzii A şi B, atunci operandul B este
indicat de succesiunea de litere PR, indicând că întreruperea tranzacţiei care ocupă
facilitatea poate fi făcută doar de tranzacţiile mai prioritare. În momentul în care tranzacţia
curentă în facilitate, este întreruptă de o tranzacţie cu un nivel de prioritate mai mare atunci
tranzacţia curentă este trecută în lista evenimentelor întrerupte iar tranzacţia mai
prioritară îi ia locul. Lista evenimentelor întrerupte poate fi vizualizată în simularea în modul
test prin comanda: display int.

4.3 Clasa QUEUE a elementelor modelului şi modul de înregistrare a


informaţiilor

Un alt element al modelului GPSS/H este reprezentat de entitatea QUEUE (“cozi de


evenimente”). Acestea sunt utilizate pentru înregistrarea datelor statistice referitor la
tranzacţiile întârziate, în aşteptare sau blocate. La fel ca facilităţile, QUEUE reprezintă o
clasă pasivă şi permanentă, ce furnizează informaţii statistice, fiind un element al modelului
inclus cu scopul de a furniza informaţii statistice din model, fără a influenţa modul de
procesare a tranzacţiilor. Entitatea poate fi identificată printr-un număr şi i se poate atribui
un nume. Tranzacţiile care au intrat într-un bloc de tip QUEUE trebuie să-l părăsească
înainte de a fi distruse.
Considerându-se două puncte arbitrare A şi B de-a lungul căii de deplasare a
tranzacţiilor într-un model (figura 4.5), informaţiile statistice suplimentare pot fi: numărul de
tranzacţii care au străbătut calea dintre A şi B, numărul mediu de tranzacţii care se găsesc
între punctele A şi B, numărul maxim de tranzacţii între punctele A şi B, timpul mediu
necesar unei tranzacţii pentru a străbate calea AB, numărul de tranzacţii care au străbătut
calea A, B fără a consuma timp de simulare. În limbajul GPSS/H această entitate este
modelată prin două blocuri complementare QUEUE şi DEPART care se introduc în punctele
A şi respectiv B ale modelului.
48
Când o tranzacţie intră într-un bloc QUEUE sau părăseşte entitatea prin parcurgerea
unui bloc DEPART, este calculată diferenţa dintre valoarea curentă a ceasului simulării şi
valoarea timpului la care tranzacţia a intrat sau a ieşit.
A QUEUE A

Secţiune a modelului
conţinând declaraţii de tip
bloc

B DEPART A

Figura 4.5 Secţiune a modelului în care entitatea QUEUE implementată prin blocurile
QUEUE şi DEPART furnizează date statistice între punctele A şi B

Sistemul actualizează automat în timpul simulării valori statistice ca numărul mediu


de tranzacţii, numărul maxim de tranzacţii ale entităţii, timpul mediu de aşteptare. În această
“coadă de evenimente” se pot găsi la acelaşi moment de timp oricâte tranzacţii. Acestea
sunt înregistrate în “coada de evenimente” când parcurg blocul QUEUE şi sunt scoase din
listă când parcurg blocul DEPART.

Blocurile QUEUE, DEPART

Funcţie: QUEUE permite fiecărei tranzacţii care parcurge blocul să intre într-o
“coadă de evenimente” a cărei nume este dat de operandul A. Normal lungimea listei este
incrementată cu 1, când al doilea operand nu este introdus. În caz contrar, al doilea operand
defineşte valoare cu care se face incrementarea.
DEPART determină scoaterea tranzacţiei care parcurge blocul din “coada
de evenimente”.
Sintaxă: QUEUE A,B
…………….
DEPART A,B
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicită sau rezultat


A Identificatorul entităţii QUEUE
B Numărul cu care se 1
incrementează/decrementează
lungimea listei la intrarea/scoaterea unei
tranzacţii

Observaţii: 1. O distincţie majoră între o facilitate şi o entitate "queue" este că prin


facilităţi se modelează resurse ale sistemului în timp ce prin cealaltă entitate se obţin doar
informaţii din sistem.

În urma simulării, se generează un raport al entităţii QUEUE, cu următoarele


informaţii:

(1) QUEUE: identificatorul entităţii pentru care sunt raportate informaţiile


(2) MAXIMUM CONTENTS: numărul maxim de tranzacţii care aparţin entităţii QUEUE.
(3) AVERAGE CONTENTS: numărul mediu de tranzacţii care aparţin entităţii.
(4) TOTAL ENTRIES: numărul total de tranzacţii care au intrat în entitatea QUEUE (sunt
incluse tranzacţiile curente în entitate).
49
(5) ZERO ENTRIES: numărul de tranziţii pentru care durata de parcurgere a entităţii a fost
0.0. Pentru aceste tranzacţii parcurgerea blocurilor QUEUE şi DEPART s-a făcut la acelaşi
timp de simulare.
(6) PERCENT ZEROS: fracţiunea, exprimată procentual, a tranzacţiilor care au parcurs
entitatea fără a consuma timp de simulare. PERCENT ZEROS = (ZERO ENTRIES / TOTAL
ENTRIES) * 100.
(7) AVERAGE TIME/UNIT: indică cât timp de simulare au consumat în medie tranzacţiile
care au străbătut entitatea, împărţit la numărul acestora.
(8) $AVERAGE TIME/UNIT: indică durata medie a timpului de simulare consumat de
tranzacţiile care au străbătut entitatea împărţit la numărul acestora, fără a considera
tranzacţiile care nu au consumat timp de simulare.
(9) QTABLE NUMBER: identificatorul pentru QTABLE dacă a fost folosită această opţiune
în conjuncţie cu blocul QUEUE. QTABLES constituie o opţiune de prezentare sub forma
unei histograme a distribuţiei variabilei aleatoare: timpul de rezidenţă a tranzacţiilor în
entitate, etc.
(10) CURRENT CONTENTS: indică numărul de tranzacţii care aparţin entităţii la momentul
opririi simulării.

Pe lângă posibilitatea de afişare a raportului entităţii QUEUE la sfârşitul simulării,


raportul poate fi afişat şi când simularea se face în modul test, prin comanda: display que.

Atributele numerice standard asociate entităţii QUEUE. În general, atributele asociate


facilităţilor încep cu litera Q. Acestea sunt prezentate în tabelul 4.2.

Tabelul 4.2 Atributele standard numerice ale entităţii QUEUE

Denumire Semnificaţie
Qj Conţinutul curent (numărul de tranzacţii din “coada de evenimente”
QAj Valoarea medie a numărului de tranzacţii
QCj Numărul total de tranzacţii care au intrat în “coada de evenimente”
QMj Valoarea maximă a numărului de tranzacţii din “coada de evenimente”
QTj Durata medie a timpului în care tranzacţiile au fost în “coada de evenimente”
QXj Durata medie a timpului a tuturor tranzacţiile care au fost în “coada de evenimente”
QZj Numărul de tranzacţii care au parcurs “coada de evenimente” fără a aştepta
j este un identificator al unui obiect static. Acest identificator poate fi o constantă, o expresie aritmetică, $nume
sau (nume).

Modul de utilizare a blocurilor QUEUE şi DEPART, prezentarea conţinutului raportului


de simulare al entităţilor QUEUE, modul de preluare a informaţiilor din model, prin
intermediul atributelor numerice standard şi tipărirea lor într-un fişier sunt exemplificate în
continuare. Se consideră simularea unui sistem de fabricaţie flexibil compus dintr-o linie
transportoare şi un centru de prelucrare. Prin simulare, se doreşte obţinerea unor date
statistice referitor la piesele ce parcurg sistemul şi la timpii şi numărul pieselor ce aşteaptă
să fie procesate pe centrul de prelucrare. În acest scop, se definesc două entităţi QUEUE,
denumite FMS şi WCENTER. Informaţiile statistice dorite vor fi tipărite într-un fişier şi
comparate cu cele furnizate de raportul de simulare.
Programul GPSS/H este următorul.
SIMULATE
RAP FILEDEF 'queue.txt'
GENERATE 18,6 Modelarea pieselor care intra in FMS
50
QUEUE FMS Inregistrarea lor in “coada de evenimente” FMS
ADVANCE 0.5 Durata transportului la centrul de prelucrare CENTER
QUEUE WCENTER Inregistrarea pieselor care asteapta accesul pt. prelucrare
SEIZE CENTER Accesul la centrul de prelucrare
DEPART WCENTER Terminarea gestionarii piesei in coada de asteptare WCENTER
ADVANCE 15,3 Modelarea timpului de prelucrare a piesei
RELEASE CENTER Terminarea prelucrarii si eliberarea centrului
DEPART FMS Terminarea gestionarii piesei in coada de asteptare FMS
TERMINATE 1 Piesa paraseste centrul de prelucrare
START 100
PUTPIC FILE=RAP,LINES=6
===============================================================================
Raportul statistic al pieselor care au parcurs FMS
-------------------------------------------------------------------------------
Continutul Continutul Nr. total Continut Timpul Timpul Nr. tranzact.
curent mediu intrari maxim mediu mediu total timp 0 astept.
===============================================================================
PUTPIC FILE=RAP,(Q$FMS,QA$FMS,QC$FMS,QM$FMS,QT$FMS,QX$FMS,QZ$FMS)
** *.*** *** ** *.*** *.*** ***
PUTPIC FILE=RAP,LINES=6
===============================================================================
Raportul statistic al pieselor care au asteptat accesul la centrul de prelucrare
-------------------------------------------------------------------------------
Continutul Continutul Nr. total Continut Timpul Timpul Nr. tranzact.
curent mediu intrari maxim mediu mediu total timp 0 astept.
===============================================================================
PUTPIC
FILE=RAP,(Q$WCENTER,QA$WCENTER,QC$WCENTER,QM$WCENTER,QT$WCENTER,
QX$WCENTER,QZ$WCENTER)
** *.*** *** ** *.*** *.*** **
PUTPIC FILE=RAP
===============================================================================
END

După terminarea simulării în modul test se obţine raportul entităţilor QUEUE cu


comanda :d que. Conţinutul acestuia este:
QUEUE MAXIMUM AVERAGE TOTAL ZERO PERCENT AVERAGE $AVERAGE QTABLE CURRENT
CONTENTS CONTENTS ENTRIES ENTRIES ZEROS TIME/UNIT TIME/UNIT NUMBER CONTENTS
FMS 2 0.942 101 0 16.600 16.600 1
WCENTER 1 0.062 101 60 59.4 1.101 2.712 1

Aceste date pot fi comparate cu cele afişate în fişierul queue.txt, al cărui conţinut este
următorul:
=================================================================
Raportul statistic al pieselor care au parcurs FMS
-------------------------------------------------------------------------------
Continutul Continutul Nr. total Continut Timpul Timpul Nr. tranzact.
curent mediu intrari maxim mediu mediu total timp 0 astept.
=================================================================
1 0.942 101 2 16.600 16.600 0
=================================================================
Raportul statistic al pieselor care au asteptat accesul la centrul de prelucrare
-------------------------------------------------------------------------------
Continutul Continutul Nr. total Continut Timpul Timpul Nr. tranzact.
curent mediu intrari maxim mediu mediu total timp 0 astept.
=================================================================
1 0.062 101 1 1.101 2.712 60
=================================================================

51
4.4 Clasa TABLE pentru prelucrarea statistică a informaţiilor

Table este o clasă a elementelor modelului pentru procesarea statistică a datelor


observate din model. Prelucrările statistice include valoarea medie, deviaţia standard şi
frecvenţe relative şi absolute a unor clase specificate. Această entitate a limbajului de
simulare se defineşte prin declaraţiile TABLE şi QTABLE. De fiecare dată când o tranzacţie
intră într-un bloc TABULATE, o nouă valoare este înregistrată în tabel, fiind luată în
consideraţie în calculele statistice.

Declaraţia de control TABLE. Este utilizată pentru a defini o nouă tabelă. Prin
această declaraţie este asignat un număr sau un nume, se specifică un argument (o valoare
din model care se doreşte a se înregistra) şi se specifică intervalul în care se face
observaţia valorilor.

Sintaxă: număr | nume TABLE A,B,C,D,E


Semnificaţia operanzilor:

Operand Semnificaţie
A Xpr Expresia valorii curente înregistrată în TABLE, în general un atribut numeric standard.
[-] Dacă urmează semnul “-“, este înregistrată diferenţa faţă de valoarea precedentă.
IA Inter-Arrival-Mode: Diferenţa dintre valoarea curentă a timpului absolut (AC) şi timpul
înregistrat al intrării precedente.
RT Arriva-Rate-Mode. Numără sosirile tranzacţiilor în intervalul specificat de operandul E.
B Limita superioară a primului interval de frecvenţe. Acesta include toate valorile de la minus
infinit la valoarea B.
C Lungimea constantă intervalelor cu excepţia primului şi ultimului interval.
[x] Numărul intervalelor de frecvenţe; cu prefixul X valorile înregistrate sunt ponderate.
D
E Intervalul de timp, numai dacă B este RT.

Înregistrarea unei valori într-un interval se face dacă valoarea este mai mică sau
egală cu limita superioară a intervalului. Dacă aceasta este mai mare decât limita
superioară a tuturor intervalelor este înregistrată în ultimul interval care nu are limită
superioară. Toate celelalte valori sunt înregistrate în intervalele de lungime constantă,
fiecare interval conţinând valorile care sunt mai mici sau egale cu limita superioară şi mai
mari decât limita inferioară. Când o valoare este înregistrată, numărătorul corespunzător
intervalului de frecvenţe este incrementat cu 1.

Declaraţia de control QTABLE. Defineşte o entitate similară celei de tip TABLE, cu


diferenţa că aceasta este dedicată înregistrării timpilor de aşteptare în “cozi de evenimente”.
Sintaxa declaraţiei impune ca numele sau numărul blocului QUEUE să fie specificat ca
operandul A. Tranzacţiile vor fi înregistrate în tabelă când acestea intră în blocul DEPART
corespunzător.
Blocul TABULATE
Funcţia: Acest bloc permite înregistrarea unei valori în TABLE.
Sintaxă: TABULATE A,B
Semnificaţia operanzilor:

Operand Semnificaţie
A Numărul sau numele entităţii TABLE
[B] Ponderea înregistrării. Opţional
52
În urma simulării modelului, se poate obţine un raport al entităţilor TABLE care
conţine următoarele informaţii.

(1) ENTRIES IN TABLE: Numărul de tranzacţii.


(2) MEAN ARGUMENT: Valoarea medie a timpului de rezidenţă a tranzacţiilor.
(3) STANDARD DEVIATION: Deviaţia standard a tipului de rezidenţă al tranzacţiilor.
(4) SUM OF ARGUMENTS: Suma timpilor de rezidenţă a tranzacţiilor care au parcurs
entitatea.
(5) UPPER LIMIT: Limita superioară a timpului de rezidenţă a celulelor definite cu excepţia
ultimei, pentru care este tipărit cuvântul OVERFLOW.
(6) OBSERVED FREQUENCY: numărul de tranzacţii observate pentru care timpul de
rezidenţă a fost cuprins între limitele celulei respective.
(7) PERCENT OF TOTAL: Valoarea procentuală reprezentată de numărul tranzacţiilor al
căror timp de rezidenţă a fost inclus în celula respectivă, faţă de numărul total de tranzacţii
care au parcurs entitatea.
(8) CUMULATIVE PERCENTAGE: Valorile de la (7) cumulate de sus în jos.
(9) CUMULATIV REMAINDER: 100 - valorile de la (8)
(10) MULTIPLE OF MEAN: UPPER LIMIT / MEAN ARGUMENT
(11) DEVIATION FROM MEAN:

Aceste informaţii statistice pot fi afişate şi în timpul simulării în modul test prin
comanda: display tabel (: d tabel).

Atributele numerice standard asociate entităţii TABLE. În general, atributele asociate


facilităţilor încep cu litera T. Acestea sunt prezentate în tabelul 4.3.

Tabelul 4.3 Atributele standard numerice ale entităţii TABLE

Denumire Semnificaţie
TBj Valoarea medie neponderată a intrarilor în TABLE j
TBWj Valoarea medie ponderată a intrarilor în TABLE j
TCj Numărul neponderat de intrări în TABLE j
TCWj Numărul ponderat de intrări în TABLE j
TDj Deviaţia standard neponderată a intrărilor în TABLE j
TDWj Deviaţia standard ponderată a intrărilor în TABLE j

Pentru a exemplifica modul de înregistrare şi tabulare a informaţiilor din modelele de


simulare, se va considera un exemplu asemănător celui de la pagina 50, în care se doresc
tabelate următoarele informaţii: timpul de rezidenţă a unei piese în sistemul de fabricaţie
flexibilă, timpul de prelucrare, timpul de aşteptare în “coada de evenimente” WCENTER.

************************************************************************************************
SIMULATE
************************************************************************************************
FIN TABLE M1,12,3,20 Declaratii de control
TCENT TABLE MPL(SERV),12,1,8 prin care se definesc tabelele
WCENT QTABLE WCENTER,2,1,8
************************************************************************************************
GENERATE 18,6,,,,1PL
ADVANCE 0.5
QUEUE WCENTER

53
SEIZE CENTER,
DEPART WCENTER Inregistrarea timpului de asteptare in tabela WCENT
MARK (SERV)PL Se marchează timpul începerii prelucrarii
ADVANCE 15,3
RELEASE CENTER
TABULATE FIN Inregistrarea timpului de rezidenta în tabela FIN
TABULATE TCENT Inregistrarea timpului de prelucrare in tabela TCENT
TERMINATE 1
START 100
************************************************************************************************
END
Informaţiile statistice afişate sunt următoarele:

TABLE FIN
ENTRIES IN TABLE MEAN ARGUMENT STANDARD DEVIATION SUM OF ARGUMENTS
100.0000 16.7286 2.2407 1672.8632 NON-
WEIGH.

UPPER OBSERVED PERCENT CUMULATIVE CUMULATIVE MULTIPLE DEVIATION


LIMIT FREQUENCY OF TOTAL PERCENTAGE REMAINDER OF MEAN FROM MEAN
...
15.0000 24.0000 24.00 24.00 76.00 0.8967 -0.7715
18.0000 52.0000 52.00 76.00 24.00 1.0760 0.5674
21.0000 20.0000 20.00 96.00 4.00 1.2553 1.9063
24.0000 4.0000 4.00 100.00 0.00 1.4347 3.2451

TABLE TCENT

ENTRIES IN TABLE MEAN ARGUMENT STANDARD DEVIATION SUM OF ARGUMENTS


100.0000 15.1487 1.7552 1514.8702 NON-
WEIGH.

UPPER OBSERVED PERCENT CUMULATIVE CUMULATIVE MULTIPLE DEVIATION


LIMIT FREQUENCY OF TOTAL PERCENTAGE REMAINDER OF MEAN FROM MEAN
...
13.0000 15.0000 15.00 15.00 85.00 0.8582 -1.2242
14.0000 15.0000 15.00 30.00 70.00 0.9242 -0.6545
15.0000 18.0000 18.00 48.00 52.00 0.9902 -0.0847
16.0000 15.0000 15.00 63.00 37.00 1.0562 0.4850
17.0000 19.0000 19.00 82.00 18.00 1.1222 1.0548
18.0000 18.0000 18.00 100.00 0.00 1.1882 1.6245

TABLE WCENT

ENTRIES IN TABLE MEAN ARGUMENT STANDARD DEVIATION SUM OF ARGUMENTS


100.0000 1.0799 1.7009 107.9929 NON-
WEIGH.

UPPER OBSERVED PERCENT CUMULATIVE CUMULATIVE MULTIPLE DEVIATION


LIMIT FREQUENCY OF TOTAL PERCENTAGE REMAINDER OF MEAN FROM MEAN
2.0000 74.0000 74.00 74.00 26.00 1.8520 0.5409
3.0000 11.0000 11.00 85.00 15.00 2.7780 1.1289
4.0000 5.0000 5.00 90.00 10.00 3.7039 1.7168
5.0000 5.0000 5.00 95.00 5.00 4.6299 2.3048
6.0000 4.0000 4.00 99.00 1.00 5.5559 2.8927
...
8.0000 1.0000 1.00 100.00 0.00 7.4079 4.0686

54
4.5 Probleme propuse

1. Analizaţi în modul test, pas cu pas, modelul:

SIMULATE
*
GENERATE 1
SEIZE RESOURCE
ADVANCE 5
RELEASE RESOURCE
TERMINATE 1
*
START 5
END

Tranzacţiile sunt generate corect ? Ce soluţie propuneţi ? Verificaţi prin simulare


soluţia propusă.

2. O maşină unealtă prelucrează două tipuri de piese A şi B. Piesele de tip A sosesc la


fiecare 101.2 minute şi necesită 41 minute de prelucrare pe maşină. Piesele de tip B,
încep să sosească la timpul 3 şi continuă să sosească apoi la 61.3 minute. Prelucrarea pe
maşină a unei piese de tip B necesită 3 minute.
a) Realizaţi modelul şi simularea după care determinaţi cât mai multe informaţii
statistice privind lucrul maşinii într-un schimb de 8 ore.
b) Modificaţi modelul considerând că piesele de tip A au un grad mai mare de
prioritate decât cele de tip B

3. Studenţii unui colegiu urmează următoarea procedură de înscriere într-un nou an şcolar:
1. Completează un formular iniţial, ceea ce durează 2010 minute.
2. Merg la ghişeul unu, unde un singur funcţionar le dă un aviz prealabil. Consultarea
formularului iniţial durează 7.52.5 minute.
3. Merg la ghişeul doi unde, de asemenea un singur funcţionar îi informează asupra
taxelor de şcolarizare şi primesc un nou formular de completat. Informaţiile pe care le
primesc la ghişeul doi durează 105 minute.
4. Revin la ghişeul unu, unde primesc confirmarea finală asupra formularelor
completate, ceea ce durează 52 minute.
Ghişeele sunt deschise între 9 A.M. şi 4.30 P.M. şi frecvenţa de venire a studenţilor
în acest interval este de unul la 12.510 minute.
Simulaţi modelul şi discutaţi rezultatele. În momentul opririi simulării se găsesc
studenţi care nu au terminat tot ciclul de înscriere? Dacă da, în ce stadii sunt ei?

4. Un funcţionar de la serviciul de vânzări înregistrează comenzi de la doi beneficiari.


Comenzile de la primul beneficiar sosesc la fiecare 1510 minute, iar cele de la cel de-al
doilea beneficiar la intervale de 6020 minute. Funcţionarului îi sunt necesare 105 minute
pentru completarea unei comenzi. Diferenţa dintre comenzi este că beneficiarul al doilea
este preferat şi comenzile acestuia sunt tratate prioritar faţă de ale primului beneficiar.
Comenzile beneficiarului mai puţin preferat vor fi tratate numai dacă nu sunt comenzi ale
beneficiarului preferat care aşteaptă.
55
Când sunt mai multe comenzi ale aceluiaşi beneficiar ordinea de servire este “primul
venit primul servit”.
Realizaţi modelul şi simulaţi un schimb de 8 ore de lucru al funcţionarului.
5. Un sistem de producţie constă din două staţii de lucru consecutive: Staţia _1 şi Staţia_2.
La fiecare staţie de lucru este câte un muncitor. Înaintea staţiei unu există suficient loc
pentru ca piesele ce urmează a fi prelucrate să aştepte, dar între staţia unu şi doi nu există
loc decât pentru o piesă. Piesele sosesc la staţia unu la intervale de 3020 minute şi durata
prelucrării pe staţii este de 2510 minute la staţia unu şi respectiv 3010 minute la staţia
doi. Realizaţi modelul şi apoi simularea acestuia pentru 100 de piese care parcurg staţiile.

56
Capitolul 5. Modelarea grupurilor de serveri individuali; entitatea
STORAGE

 Modelarea grupurilor de resurse individuale în limbajul GPSS/H


 Modelarea disponibilităţii resurselor
 Blocuri de transfer condiţionat al tranzacţiilor

5.1. Grupuri de serveri individuali

Deseori în modelarea sistemelor discrete se întâlneşte cazul în care mai multe staţii
de acelaşi tip lucrează în paralel. Un astfel de sistem este denumit cu cozi de aşteptare
multi-canal şi poate servi mai multe cereri simultan. Limbajul GPSS/H oferă posibilitatea
utilizării unei entităţi numite STORAGE pentru modelarea acestor cazuri. Denumirea are un
sens distorsionat pentru că, spre deosebire de traducerea cuvântului, nu va fi vorba despre
locuri sau spaţii de depozitare. Modul de utilizarea a grupului de serveri individuali este
asemănător modului de utilizare a serverului individual. Numărul de serveri individuali ai
grupului defineşte capacitatea acestuia. Tranzacţiile sosesc la punctul în care este modelat
grupul de serveri şi lansează cereri de servire. Dacă capacitatea grupului este ocupată,
tranzacţia aşteaptă până când unul din serveri este disponibil. Tranzacţia ocupă serverul
individual pe durata modelată şi părăseşte apoi grupul STORAGE.
Entitatea modelează un sistem de serveri individuali cu o singură linie de aşteptare.
Reprezentarea grafică a sistemului este dată în figura 5.1.
Grup de serveri
individuali

Sosiri Ieşiri

Linie de aşteptare

Figura 5.1 Grup de serveri cu capacitatea trei, modelaţi de entitatea STORAGE

Ca şi în cazul serverilor individuali, această facilitate este modelată prin două blocuri
complementare: ENTER şi LEAVE. În plus, capacitatea grupului de serveri este definită prin
declaraţia de control STORAGE. Sintaxa acestei declaraţii este următoarea:

snume STORAGE capacitate


STORAGE Grup_server(i),capacitate [/Grup_server(i),capacitate] ...

unde: snume indică numele sau numărul grupului STORAGE


capacitate indică capacitatea grupului

A doua formă sintactică permite definirea mai multor grupuri de serveri individuali
printr-o singură declaraţie. Grupul sau grupuri de serveri se definesc în felul următor:
Sj indică grupul STORAGE cu numărul j.
S(nume) sau S$nume sunt definiţii similare pentru grupul STORAGE identificat prin nume.
Sj-Sk cu j<k adresează toate grupurile STORAGE cu numere cuprinse între j şi k. Următorul
exemplu indică modul de definire a capacităţilor pentru mai multe grupuri de serveri
individuali printr-o singură declaraţie STORAGE.

57
Exemplu: STORAGE S1,10/S1-S4,15/S(CENTER),20

Capacitatea grupului de serveri individuali poate fi definită sau modificată şi în timpul


simulării modelului, prin instrucţiune bloc BSTORAGE. Această instrucţiune are aceeaşi
sintaxă cu declaraţia de control STORAGE.

Blocurile ENTER, LEAVE

Funcţie: Blocuri care în conjuncţie modelează grupul de serveri individuali.


Sintaxă: ENTER A,B
Blocuri care modelează acţiunea serverului
LEAVE A,B
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicită sau rezultat


A Identificatorul entităţii STORAGE
B Numărul de resurse ocupate/eliberate 1

Observaţii.
1) Raportul entităţii STORAGE poate fi vizualizat la simularea în modul test prin următoarea
comandă din fereastra de dialog: display storage (: d sto).
2) Valoarea maximă a capacităţii admise este 231. Această valoare poate fi considerată
infinitã, în multe cazuri.
3) Un grup de serveri individuali cu capacitatea 1 are o comportare diferită de cea a unei
facilităţi prin următoarele:
O tranzacţie care a capturat facilitatea trebuie s-o elibereze înainte de a fi distrusă.
Distrugerea unei tranzacţii în timp ce este capturată de o facilitate conduce la eroare de
modelare. Spre deosebire, o tranzacţie care intră într-un bloc ENTER nu este legată de
grupul de serveri STORAGE. Altă tranzacţie, care nu aparţine la momentul curent
entităţii poate elibera grupul prin execuţia instrucţiunii LEAVE. Facilităţile pot fi întrerupte
de tranzacţii cu prioritate mai mare. Grupurile de serveri individuali nu permit acest mod
de lucru.

Informaţiile legate de tranzacţiile curente şi servite de entitatea STORAGE sunt


afişate sub forma raportului STORAGE care conţine următoarele informaţii:

(1) STORAGE: identificatorul utilizat pentru entitate


(2) --AVG-UTIL-DURING--TOTAL TIME: indică fracţiunea din timpul total în care grupul a
fost ocupat.
(3) --AVG--UTIL-DURING-- AVAIL TIME: indică fracţiunea din timpul de simulare în care
grupul a fost disponibil şi ocupat.
(4) --AVG--UTIL-DURING-- UNAVAIL TIME: indică fracţiunea din timpul de simulare în care
grupul nu a fost disponibil şi ocupat. Când nu se utilizeazã blocuri de definire a
disponibilităţii sau indisponibilităţii grupului valoarea este totdeauna zero şi nu se afişează.
(5) ENTRIES: indică numărul de serveri ai grupului care au fost capturaţi pe toatã durata
simulării
(6) AVERAGE TIME/UNIT: timpul mediu în care un server a fost ocupat
(7) CURRENT STATUS: indică dacă grupul este disponibil (în lucru) sau este indisponibil
(nu funcţionează).
(8) PERCENT AVAIL: indică fracţiunea din timpul simulat în care grupul a fost disponibil.
(9) CAPACITY: afişează capacitatea grupului.
58
(10) AVERAGE CONTENTS: indică câţi serveri au fost un medie capturaţi în timpul
simulării.
(11) CURRENT CONTENTS: indică câţi serveri sunt ocupaţi în momentul curent
(12) MAXIMUM CONTENTS: indică valoarea maximă de la (11).

Grupurile de serveri pot fi folosite pentru estimarea numărului minim de serveri


necesari unei aplicaţii. Tehnica utilizată în acest scop este de a modela sistemul ca un grup
de serveri cu capacitate infinită (în realitate capacitatea maximă). După simulare, raportul
entităţii STORAGE indică numărului mediu şi maxim de severi capturaţi (AVERAGE
CONTENTS, MAXIM CONTENTS). Următorul număr întreg mai mare ca valoarea
numărului mediu este o estimare a numărului minim de serveri pentru aplicaţia considerată.
Similar, numărul maxim de serveri capturaţi estimează numărul de serveri necesari astfel
încât să nu apară nici o restricţie asupra funcţionarii lor.

5.2 Modelarea disponibilităţii facilităţilor şi entităţilor STORAGE

Pe lângă posibilitatea ca un server sau un grup de serveri să fie ocupaţi sau liberi
există posibilitatea modelării disponibilităţii sau indisponibilităţii acestora. În toate exemplele
de până acum facilităţile şi entităţile STORAGE au fost disponibile 100% din timpul simulării.
Indisponibilitatea unei facilităţi sau al unui grup de serveri individuali poate fi introdusă
pentru a modela cazuri în care aceste entităţi sunt defecte, în întreţinere, în pauză sau în
alte perioade de timp când resursele nu pot fi folosite.
Pentru modelarea acestor cazuri există declaraţiile bloc FAVAIL şi FUNAVAIL pentru
facilităţi şi SAVAIL şi SUNAVAIL pentru entităţi STORAGE.

Blocul FAVAIL

Funcţie: Bloc care declară facilitatea disponibilă după o declaraţie FUNAVAIL.


Sintaxă: FAVAIL A
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicită sau rezultat


A Identificatorul facilităţii

Blocul FUNAVAIL

Funcţie: Bloc care declară facilitatea indisponibilă.


Sintaxă: FUNAVAIL A,B,C
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicită sau rezultat


A Identificatorul facilităţii
B - Literele CO
- Literele RE
C Eticheta blocului în care vor fi trimise
tranzacţiile în cazul în care operandul B
este: RE

Exemple: 1)
SIMULATE
********************************
GENERATE 10,5

59
ADVANCE 0
SEIZE MACHINE
ADVANCE 8,4
RELEASE MACHINE
TERMINATE 0
GENERATE 480 Declarã facilitatea MACHINE
FUNAVAIL MACHINE indisponibilã 30 min., dupã 8
ADVANCE 30 ore de funcţionare.
FAVAIL MACHINE
TERMINATE 0
********************************
GENERATE 24*60
TERMINATE 1
********************************
START 1
END

Raportul facilităţii MACHINE după 24 de ore de funcţionare este următorul:


--AVG-UTIL-DURING
FACILITY TOTAL AVAIL UNAVL ENTRIES AVERAGE CURRENT PERCENT SEIZING
PREEMPTING
TIME TIME TIME TIME/XACT STATUS AVAIL XACT XACT
MACHINE 0.827 0.863 0.000 145 8.213 AVAIL 95.8
Fracţiunea de timp în care facilitatea a
fost capturatã dar indisponibilã Procentul de timp cât
Fracţiunea din timpul disponibil al facilitatea a fost disponibilã:
facilitãţii în care a fost capturatã 23 h x 100/24 h= 95.833
Fracţiunea din timpul total în care
facilitatea a fost capturatã

2)
SIMULATE
**********************************************
GENERATE 10,5
ADVANCE 0
SEIZE MACHINE
ADVANCE 15,4
RELEASE MACHINE
REBUT TERMINATE 0
**********************************************
GENERATE 480
FUNAVAIL MACHINE,RE,REBUT
ADVANCE 30
FAVAIL MACHINE
TERMINATE 0
**********************************************
GENERATE 24*60
TERMINATE 1
**********************************************
START 1
END

Observaţii:
1) Dacă operandul B nu este specificat, atunci tranzacţiile (dacã existã) curente în facilitate,
rămân în facilitate dar nu mai folosesc facilitatea. Blocul corespunzător ADVANCE este
temporar oprit. Când facilitatea devine disponibilă blocul ADVANCE va fi reluat de unde a
rămas.
60
2) Dacă se foloseşte opţiunea CO a operandului B, atunci când facilitatea devine
indisponibilă; se permite continuarea utilizării ei de către tranzacţia curentă.
3) Cu opţiunea RE a operandului B, când facilitatea devine indisponibilã tranzacţia curentă
este transferată în blocul cu eticheta specificatã de operandul C.

Blocul SAVAIL

Funcţie: Bloc care declară entitatea STORAGE disponibilă după o declaraţie


SUNAVAIL.
Sintaxă: SAVAIL A
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicită sau rezultat


A Identificatorul facilităţii

Blocul SUNAVAIL

Funcţie: Bloc care declară facilitatea indisponibilă. Următoarea tranzacţie care


doreşte să intre într-un bloc ENTER va aştepta până când blocul va deveni disponibil.
Sintaxă: SUNAVAIL A
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicită sau rezultat


A Identificatorul facilităţii

Atributele numerice şi logice standard ale grupului de serveri individuali


STORAGE sunt prezentate în tabelul 5.1.

Tabelul 5.1 Atributele numerice şi logice ale entităţii STORAGE

Denumire Semnificaţie
Sj Conţinutul curent.
SAj Conţinutul mediu.
SCj Numărul total de unităţi care au intrat în STORAGE
SEj TRUE, dacă STORAGE j este goală.
SFj TRUE, dacă STORAGE j este plină.
SMj Conţinutul maxim.
SNEj TRUE, dacă STORAGE nu este goală.
SNFj TRUE, dacă STORAGE nu este plină.
SNVj TRUE, dacă STORAGE nu este disponibilă.
SPUj Timpul cât STORAGE a fost indisponibilă în relaţie cu durata de simulare per mie.
SRj Încărcarea medie per mie.
SRUj Încărcarea medie în timpul cât a fost indisponibilă per mie.
SRVj Încărcarea medie în timpul cât a fost disponibilă per mie.
STj Timpul mediu de staţionare în STORAGE a unei unităţi.
SUAj Durata medie a perioadelor de indisponibilitate.
SUNj Numărul perioadelor de indisponibilitate.
SUTj Timpul total de indisponibilitate.
SVj TRUE, dacă STORAGE este disponibilă.

5.3 Declaraţii bloc pentru transferul ne secvenţial al tranzacţiilor în model

61
Un prim set de declaraţii bloc cu această funcţie sunt declaraţiile bloc TRANSFER.

Blocul TRANSFER

Funcţie: Transferul statistic ne secvenţial al tranzacţiilor.


Sintaxă: TRANSFER .A,B,C
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicită sau rezultat


A Fracţiunea de timp în care blocul cu
eticheta C va fi următorul bloc
B Pointer la un bloc Blocul-B este blocul secvenţial
C Pointer la un bloc

Observaţii.
1) Dacă A=0, atunci transferul tranzacţiilor devine necondiţionat spre blocul cu eticheta B
2) Dacă eticheta B nu este specificată atunci implicit este considerat blocul secvenţial

Blocul TRANSFER BOTH

Funcţie: Transferul tranzacţiilor spre blocul care o acceptă primul. Ordinea de


testare a blocurilor este B, C.
Sintaxă: TRANSFER BOTH,B,C
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicită sau rezultat


A BOTH
B Pointer la un bloc Blocul-B este blocul secvenţial
C Pointer la un bloc

Observaţii.
1) Dacă atât blocul B cât şi C refuză tranzacţia, atunci ea rămâne în lista evenimentelor
curente în blocul TRANSFER, fără ca indicatorul scan-skip să fie pus în starea ON.

Blocul TRANSFER ALL

Funcţie: O extensie a blocului TRANSFER BOTH. În blocul TRANSFER ALL,


tranzacţia aşteaptă până când va fi acceptată de una din două sau mai multe alternative.
Sintaxă: TRANSFER .A,B,C
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicită sau rezultat


A Cuvântul ALL
B Pointer la un bloc Blocul-B este blocul secvenţial
C Pointer la un bloc
D Întreg indicând separaţia dintre blocurile
alternativelor de transfer

Exemplu:

(1) GENERATE 5,1


Blocul unde (2) TRANSFER ALL,GET1,GET3,4
se face primul 62
transfer
(3) GET1 SEIZE DRILL1
(4) ADVANCE 10,2 Se calculeazã n=(C-B)/D+1,
(5) n=3 RELEASE DRILL1 respectiv: n=(11-3)/4+1=3
(6) blocuri TERMINATE 1
Blocul unde
(7) SEIZE DRILL2
se face al
(8) n=3 ADVANCE 15,3
(9) blocuri RELEASE DRILL2
Blocul unde se (10) TERMINATE 1
face al treilea (11) GET3 SEIZE DRILL3
transfer (12) ADVANCE 30,4
(13) RELEASE DRILL3
(14) TERMINATE 1

Sintaxa blocului TRANSFER cu toate opţiunile este prezentată în tabelul 5.2

Tabelul 5.2 Sintaxa diverselor opţiuni ale blocului TRANSFER

Operand Format Explicaţii


A lipseşte Tranzacţiile care intră sunt transferate către un bloc, specificat de operandul B, prin
nume, număr sau adresă relativă (ex. *+2 pentru următorul bloc)
.expr Dacă primul caracter al operandului A este un punct, operandul este convertit într-o
fracţie, specificând probabilitatea ca o tranzacţie care intră în bloc să fie transferată
către blocul specificat de operandul C. Altfel, tranzacţia este transferată spre blocul
indicat de operandul B. Următorul bloc este implicit în cazul în care operandul B nu
este specificat.
A=.0 implică un transfer necondiţionat către blocul specificat de B.
ALL Tranzacţiile sunt transferate spre o serie de blocuri care sunt testate succesiv.
Primul bloc în care tranzacţia încearcă să intre este indicat de operandul B. Dacă
nu este posibil, atunci tranzacţia caută să intre în blocurile B+n, B+2n, B+3n, …
până ce ajunge la ultimul bloc specificat de operandul C. Pasul n este definit de
operandul D. Dacă unul din blocurile testate acceptă tranzacţia, transferul este
executat. Altfel, tranzacţia trebuie să aştepte până când va putea intra într-unul din
blocurile specificate. Acest lucru este testat la fiecare schimbare a listei
evenimentelor curente (CEC), consumând foarte mult timp.
BOTH TRANSFER BOTH,x,y este echivalent cu TRANSFER ALL,x,y,(y-x)
PICK Tranzacţiile sunt transferate aleator către unul din blocurile specificate de operanzii
B şi C. B indică primul bloc şi C ultimul bloc. Transferul se face cu o distribuţie
uniformă.
PH Tranzacţia este transferată către un bloc, calculat din operandul B plus valoarea
operandului C. Tipul operandului trebuie specificat în A.
SBR Tranzacţia este transferată către o subrutină. Aceasta este un bloc specificat de
operandul B. Numărul blocului instrucţiunii curente TRANSFER este memorat într-
un parametru specificat în C.
SIM Tranzacţiei i se verifică indicatorul SIM. Acest indicator este setat când o tranzacţie
i s-a refuzat accesul într-un bloc. Indicatorul este resetat când tranzacţia părăseşte
un bloc ADVANCE. Acest indicator poate fi folosit pentru a afla dacă o tranzacţie a
fost întârziată de la ultima părăsire a unui bloc ADVANCE. Dacă indicatorul SIM
este setat, blocul TRANSFER resetează indicatorul şi transferă tranzacţia către
blocul specificat de operandul C. Dacă indicatorul SIM este resetat, tranzacţia este
transferată către blocul specificat în B. Această instrucţiune este utilă când un
număr de condiţii trebuie să fie verificate în acelaşi timp.

5.4 Transferul tranzacţiilor după condiţii logice


5.4.1 Comutatoare logice

63
Comutatoarele logice reprezintă o clasă de elemente pentru descrierea modelelor,
care pot avea două stări: ON sau OFF. Acestea sunt elemente pasive, statice, permanente
şi sunt folosite cu un scop special. Valoare lor implicită este OFF, dar pot fi iniţializate prin
declaraţia de control INITIAL. În timpul simulării starea comutatoarelor poate fi schimbată
prin instrucţiune bloc LOGIC. Cu aceşti comutatori modelele permit o înlănţuire realistă a
proceselor.

Declaraţia de control INITIAL este folosită pentru iniţializarea stării logice a


elementelor diferitelor clase ale modelului. Sintaxa declaraţiei este următoarea:

INITIAL lista_init
Lista_init::=elementlista_init[/elementlista_init …]
elementlista_init::=Lxident
x::R|S
ident::=(nume)|$nume|numar

De exemplu, INITIAL LS$KEY/LR5-7/LS(START) are semnificaţia comutatorul logic


KEY este iniţial setat, comutatoarele 5 până la 7 sunt resetate şi comutatorul logic START
este iniţial setat.

Blocul LOGIC
Funcţie: Schimbă starea unui comutator logic.
Sintaxă: eticheta LOGIC [operatoraux],A
Semnificaţia operanzilor:

Bloc Operator auxiliar Operand Explicaţii


LOGIC S A Comutatorul logic cu numele sau
R numărul indicat de operandul A este:
I resetat (R) , setat (S), inversat (I).

Atributele logice standard ale comutatoarelor logice sunt prezentate în tabelul 5.3.

Tabelul 5.3 Atributele logice standard ale comutatoarelor

Simbol standard Semnificaţie


LSj TRUE, dacă comutatorul logic j este setat. In acest caz ia valoarea 1.
LRj TRUE, dacă comutatorul logic j este resetat. In acest caz ia valoarea 1.

5.4.2 Blocuri care testează condiţii logice şi aritmetice

Blocul GATE

Funcţie: Testează stările facilităţilor, entităţilor STORAGE, comutatorilor logici şi


înregistrărilor.
Sintaxă: eticheta GATE x A[,B]
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicită sau rezultat


x FU, FNU, FI, FNI, FV, FNV,FS,FNS,
SE,SNE,SF, SNF, SV, SNV,
LS, LR,
64
M, MN
A Numele sau numărul unei facilităţi, grup de serveri,
comutator sau bloc.
B Destinaţia transferului tranzacţiei dacă condiţia nu
este îndeplinită sau lipseşte. Dacă B lipseşte,
tranzacţiile vor aştepta intrarea în bloc până când
condiţia specificată de x este îndeplinită.

Observaţie:
1) Dacă nu este indicată nici o etichetă de salt, în cazul condiţiei logice ne îndeplinite
tranzacţia aşteaptă în blocul curent pre-GATE.

Blocul TEST

Funcţie: Verifică o condiţie aritmetică. În funcţie de rezultat, tranzacţiile pot intra în


blocul următor sau trebuie să aştepte (nu există operand C) sau să fie transferate în blocul
specificat de operandul C.
Sintaxă: eticheta TEST operatoraux A,B,C
Semnificaţia operanzilor:
Bloc operatoraux Operand Explicaţii
TEST E - condiţia de egalitate A Numere, SNA, parametrii tranzacţiilor,
NE - condiţia de diferit ampervariabile sau expresii care se compară.
G - condiţia mai mare Este expresia din stânga care se compară.
GE - mai mare sau egal B Este expresia din dreapta a comparaţiei.
L - mai mic C Eticheta blocului în care se vor mişca
LE - mai mic sau egal tranzacţiile dacă condiţia nu este îndeplinită

Blocul COUNT

Funcţie: Numără elementele modelului care satisfac o anumită condiţie. Funcţia este
activată prin parcurgerea blocului de către o tranzacţie. O serie de elemente este o
secvenţă într-o ordine ascendentă continuă. Dacă obiectului i s-a dat un nume în loc de
număr, atunci este necesară cunoaşterea numărului intern asignat numelui, pentru a se
utiliza blocul COUNT. Asignarea poate fi făcută cu comanda EQU sau cu funcţii de tip S.
Sintaxă: COUNT operatoraux,A[,B,C,D,E,expr]
Semnificaţia operanzilor:
operatoraux Operand Format Explicaţii
A expr Numele sau numărul parametrului care va memora
[Pint] rezultatul numărării
B expr Limita inferioară a numerelor din serie.
C expr Limita superioară a numerelor din serie.
U|NU|I|NI|FV|FNV Condiţii de stare a grupurilor STORAGE care sunt
verificate: E-entitate goală, F-plină, V-disponibilă.
Operanzii D şi E lipsesc.
LR|LS Stări ale comutatoarelor logice care sunt verificate.
Operanzii D şi E lipsesc.
G|GE|L|LE|E|NE D expr Valoarea expresiei cu care sunt comparate atributele
valorilor seriei.
E Specificaţii ale atributelor, care vor fi numărate. Numai
Atributele standard cu un index pot fi utilizate.
Blocul SELECT

65
Funcţie: Caută într-o serie de elemente ale modelului, elementul care satisface o
condiţie aritmetică sau logică, o anumită valoare a atributului standard sau o valoare
extremă atinsă de atributul standard.
Sintaxă: SELECT operatoraux,A,B,C[,D,E,F,expr]
Semnificaţia operanzilor:

operatoraux Operand Format Explicaţii


A expr Numele sau numărul parametrului căruia îi va fi
[Pint] asignat numărul sau numele elementului care
satisface condiţia.
B expr Limita inferioară a numerelor seriei din care se va
face selecţia.
C expr Limita superioarăa numerelor seriei din care se va
face selecţia.
G|GE|L|LE|E|NE D expr Dacă operatorul auxiliar indica o comparaţie, expr
conţine valoare cu care se va face comparaţia.
U|NU|I|NI|FV|FNV Condiţii de stare ale facilităţilor care sunt verificate.
Numărul primei facilităţi care satisface condiţia este
asignat parametrului selectat. U-folosit, I-întrerupt, V-
disponibil.
Operanzii D şi E lipsesc.
SE|SNE|SF|SNF|S Condiţii de stare ale grupurilor de serveri care sunt
V|SNV verificate. Numărul primei facilităţi care satisface
condiţia este asignat parametrului selectat. E-
nefolosit, F-capacitatea maximă, V-disponibil.
Operanzii D şi E lipsesc.
LR|LS Stări ale comutatoarelor logice care sunt verificate.
Numărul primului comutator care satisface condiţia
este asignat parametrului blocului SELECT. Operanzii
D şi E lipsesc.
MIN|MAX MIN şi MAX specifică căutarea valorii minime sau
maxime a atributului standard. Numărul elementului
corespunzător este asignat parametrului blocului
SELECT.
G|GE|L|LE|E|NE E expr Specifică atributul care va fi utilizat pentru numărare.
Numai atribute standard cu index sunt permise.
Orice fără MIN şi F expr Numărul sau numele blocului unde va transferată
MAX tranzacţia dacă nici unul din elementele verificate nu
satisface condiţia selectată.

Blocul LOOP

Funcţie: Organizează tranzacţiile să treacă printr-un ciclu format dintr-o secvenţă de


blocuri. Cum diferite tranzacţii pot fi în aceeaşi secvenţă de blocuri la un moment dat,
fiecare tranzacţie necesită propriul numărător al ciclului. Acest numărător este un parametru
întreg. Înainte ca tranzacţia să intre în ciclul de blocuri, parametrului îi este asignat numărul
de cicluri pe care îl va parcurge. La sfârşitul secvenţei este plasat blocul LOOP. Acesta
decrementează valoarea parametrului cu 1 şi organizează transferul înapoi la primul bloc
din ciclu. Dacă valoarea parametrului este zero tranzacţia va parcurge blocul următor
blocului LOOP.

Sintaxă: LOOP A,B


Semnificaţia operanzilor:

Operand Format Descriere

66
A exprPint Numele sau numrul parametrului care va fi decrementat. Dacă,
după decrementare valoarea este mai mare ca zero, tranzacţia
este transferată în blocul specificat de operandul B. O valoare mai
mică ca zero este semnalată ca eroare.
B expr Numele sau numărul blocului unde vor fi transferate tranzacţiile.

5.5 Memorarea informaţiilor din timpul simulării

Valorile unor parametri din timpul simulării pot fi memorate prin instrucţiunea bloc
SAVEVALUE. Acest bloc devine activ când este parcurs de tranzacţii. Valorile iniţiale ale
parametrilor sunt atribuite prin instrucţiunea de control INITIAL.

Funcţie: Permite memorarea unor parametri în timpul simulării.


Sintaxă: SAVEVALUE A,B,C
Semnificaţia operanzilor:

Operand Format Descriere


A pexpr[+-] Numele sau numărul valorii SAVEVALUE care va fi modificată.
Dacă extensia este + sau – valoarea va fi adunată sau scăzută.
rng[+-] Intervalul valorilor SAVEVALUE care vor fi modificate.
B expr Valoarea asignată, adunată sau scăzută.
C XB|XH|XF|XL Tipul valorii.

Atributele numerice standard asociate blocului SAVEVALUE sunt prezentate în


tabelul 5.4.

Tabelul 5.4 Atributele numerice standard ale blocului SAVEVALUE

Xj|XFj Valoarea reprezentată pe un cuvânt întreg


XHj Valoarea reprezentată pe jumătate de cuvânt
XBj Valoare de tip byte
XLj Valoare de tip virgulă mobilă

5.6 Exemple de simulare

1) Se consideră un sistem de fabricaţie compus dintr-un sistem de transport. format din


cinci AGV-uri şi un centru de prelucrare cu două maşini. Piesele sosesc cu frecvenţă de
18±6 minute, aşteaptă să fie preluate în AGV şi duse pe maşina de prelucrare, dacă aceste
resurse sunt disponibile. Se modelează indisponibilitatea maşinilor pe durata verificării (o
dată la 4 ore, verificarea durând 10 minute) şi a dispozitivelor de transport (o dată la 9 ore,
verificarea durând 10 minute).
SIMULATE
AGV STORAGE 5 Număr de cărucioare transportoare
MASINI STORAGE 2 Numărul de maşini unelte ale centrului de lucru

GENERATE 18,6 Modelarea sosirii pieselor


GATE SNF AGV,ALT Există AGV liber?
GATE SV MASINI,ALT Maşina disponibilă?
QUEUE ASTEPT Aşteptare AGV
ENTER AGV Ocupă AGV
ADVANCE 5,1 Transport maşină.
DEPART ASTEPT
ENTER MASINI Aşteaptă maşină
LEAVE AGV Părăsire AGV
67
ADVANCE 15,3 Durată prelucrare,
LEAVE MASINI
ALT TERMINATE
* MODELARE INDISPONIBILITATE AGV, MASINI
GENERATE 4*60,,,1 După 4 ore
SUNAVAIL MASINI Maşinile sunt indisponibile.
ADVANCE 10 Durata verificării
SAVAIL MASINI Maşinile sunt disponibile
ADVANCE 5*60
SUNAVAIL AGV Verificare AGV-uri.
ADVANCE 10
TERMINATE 1

START 1
END

2) Într-un sistem de fabricaţie sunt cinci maşini. Dacă mai mult de 3 maşini sunt utilizate
mai puţin de 50%, atunci o maşină este scoasă din funcţiune. Dacă mai mult de 3 maşini
sunt utilizate mai mult de 95%, atunci o nouă maşină este pornită. Verificarea gradului de
utilizare al maşinilor se face o dată la 30 de minute. Frecvenţele sosirii pieselor şi durata
prelucrării pe maşină sunt indicate direct în model. Sistemul va fi simulat 5 ore.

SIMULATE
GENERATE RVEXPO(1,3) Modelarea intrării pieselor
ADVANCE 4,2 Durata prelucrării

ASSIGN MASINA,FIX(5*FRN1)+1,PH Selecţia aleatoare a unei maşini


TEST G PH(MASINA),XH(FREE),*-1 Se alege alta dacă este suspendată
QUEUE PH(MASINA)
SEIZE PH(MASINA)
DEPART PH(MASINA)
ADVANCE RVEXPO(1,10) Durata prelucrării pe maşină
RELEASE PH(MASINA)
TERMINATE

GENERATE 30
COUNT L (NLOW)PH,XH$FREE+1,5,0.5,FR Numărul de maşini cu grad de utilizare <0.5
TEST G PH(NLOW),3,BHIGH
SAVEVALUE FREE+,1,XH
FUNAVAIL XH(FREE)
TERMINATE 1
BHIGH COUNT G (NHIGH)PH,XH$FREE+1,5,0.95,FR
TEST G PH(NHIGH),3,BTERM
TEST G XH(FREE),0,BTERM
SAVEVALUE FREE-,1,XH
FAVAIL XH(FREE)
BTERM TERMINATE 1

START 10 Durata simulării 10*30=300 min.

END

68
Exerciţii

1. Un produs necesită două tipuri de operaţii: asamblare şi tratament termic. Operaţiile de


asamblare şi tratament termic pentru realizarea unui produs sunt executate succesiv de un
singur muncitor: întâi operaţia de asamblare care durează 305 minute şi apoi tratamentul
termic cu durata de 82 minute. Celula de fabricaţie este formată din patru centre de
asamblare fiecare deservită de un muncitor şi un singur cuptor termic folosit de toţi
muncitorii. Cuptorul termic poate realiza tratamentul termic numai a unui produs. Un
muncitor nu începe o nouă asamblare până nu a terminat complet toate operaţiile necesare
finalizării produsului anterior. Celula de lucru este prezentată schematic în figura 5.

Staţie de
asamblare

Staţie de
asamblare Tratament
termic
Staţie de
Materiale asamblare Piese Produse
asamblat finite
Staţie de
asamblare

Figura 5.

a) Proiectaţi modelul celulei de fabricaţie şi simulaţi funcţionarea acesteia timp de 40


de ore.
Câte produse finite s-au realizat în timpul considerat? Comparaţi rezultatul cu
valoarea calculată teoretic pentru cazul în care nu sunt întârzieri în sistem.
b) Considerând că materialele pentru realizarea unui produs costă 20$, valoarea unui
produs finit este de 30$, salarul unui muncitor este de 85$/zi şi costul cuptorului de
tratament termic este de 100$/zi, calculaţi profitul mediu zilnic. Se va considera că piesele în
procesare au valoare zero.
c) Calculaţi profitul mediu zilnic pentru situaţia când celula are 3, 4, 5, ... muncitori şi
respectiv centre de asamblare. Care este numărul de muncitori şi celule de asamblare
pentru care profitul mediu zilnic estimat este maxim?
La punctele b) şi c) se va considera că durata de lucru zilnică este de 8 ore.

2. Două centre de prelucrare A şi B utilizează în comun aceeaşi magazie de scule,


gestionată automat. Perioadele de timp şi durata folosirii sculelor de către fiecare centru de
prelucrare sunt date în tabelul de mai jos:

Perioada cererilor Durata serviciului


Centrul de prelucrare A 420360 s 30090 s
Centrul de prelucrare B 360240 s 10030 s

Realizaţi modelul şi simulând 8 ore de funcţionare determinaţi care din regulile de


servire este mai eficientă:
- primul venit primul servit,
- prioritate mai mare cererilor cu durată de serviciu mai mică, sau
- prioritate mai mare cererilor cu durată de serviciu mai mare ?

69
3. O staţie de recepţie trebuie să recepţioneze şi să prelucreze mesaje care îi sosesc la
intervale de 20 de minute. Dacă staţia este ocupată în momentul recepţiei unui mesaj,
mesajul este pierdut. Din acest motiv, durata prelucrării mesajului este riguros fixată la 20
de minute, pentru ca fluxul de lucru al staţiei să fie continuu. Este propus următorul model:

****************************
SIMULATE
****************************
GENERATE 20
TRANSFER BOTH,,LOST
SEIZE STATION
ADVANCE 20
RELEASE STATION
TERMINATE 1
LOST TERMINATE 0
*****************************
START 100
END
*****************************

Este corect ?
Simulaţi modelul şi verificaţi predicţia dumneavoastră.
Comentaţi rezultatele şi în cazul în care modelul nu este corect propuneţi soluţii.

4. La facultate bursele studenţeşti se împart la două ghişee. În ziua de ridicare a bursei,


după deschiderea ghişeelor, studenţii sosesc la intervale de 1.51.0 minute. Timpul în care
sunt serviţi depinde de ghişeu: 2.51.5 minute, la ghişeul A şi 3.252.5 minute, la ghişeul B.
Studenţii aşteaptă la o singură coadă şi când le vine rândul merg la ghişeul liber.
Dacă ambele ghişee sunt libere, atunci aleg la întâmplare ghişeul la care vor fi serviţi.
Realizaţi modelul şi simulaţi situaţia descrisă pentru un număr de 100 de studenţi.
Includeţi în model posibilitatea de a obţine informaţii privind numărul de studenţi care
aşteaptă la coadă. Este vreo posibilitate să determinaţi câţi studenţi au găsit ambele ghişee
libere?

70
Capitolul 6. Simularea sistemelor de asamblare, liste utilizatori şi
generatoare de numere aleatoare
 Modelarea sistemelor de asamblare
 Gestionarea tranzacţiilor în liste utilizator
 Distribuţii de probabilitate în GPSS/H
 Metode de determinare a intervalului de încredere pentru eşantioane cu distribuţie normală

6.1 Declaraţii bloc specifice modelării sistemelor de asamblare.


6.1. 1 Multiplicarea tranzacţiilor

Tranzacţiile pot fi multiplicate (clonate), fiecare dintre ele împreună cu clonele sale
formând o mulţime de asamblare. Tranzacţiile aceleaşi mulţimi de asamblare se pot aştepta
unele pe altele, parcurgerea modelului putând fi sincronizată. După ce s-au creat tranzacţii
clonă în model, acestea pot fi adunate, din nou, într-o singură tranzacţie. Cu aceste
informaţii, o mulţime de asamblare se defineşte ca un număr de tranzacţii care au fost
create prin clonare sau divizare a unei tranzacţii originale. Pentru astfel de tranzacţii sunt
diferite posibilităţi de sincronizare. Blocurile care permit realizarea mulţimilor de asamblare
sunt prezentate în continuare.

Blocul SPLIT

Funcţie: Creează tranzacţii “descendenţi” identice cu tranzacţia iniţială aparţinând


unei mulţimi de asamblare.
Sintaxă: SPLIT A,B,C,D,…,G
Semnificaţia operanzilor:

Operand Conţinut Semnificaţie


A expr Numărul de tranzacţii “descendent” care vor fi create

B expr Blocul unde tranzacţiile descendent vor fi trimise. Pentru fiecare


tranzacţie creată, acesta este calculat separat şi poate lua valori
diferite luând în considerare valoarea indicată de operandul C.
C exprPint Tipul şi numărul parametrului pentru numerotarea continuă a
tranzacţiilor clone create. Originalul şi fiecare copie primeşte
valoarea parametrului incrementată cu 1.
- Nu se numără.
D,…,G exprPorice Tipul şi numărul parametrului pentru clonă. Dacă este posibil, se
adoptă valoarea originală a parametrului.
- Parametrul şi valoarea sunt adoptate de la original.

Exemplu:
SIMULATE
GENERATE ,,,1
ASSIGN IXACT,-1,PH
SPLIT 2,CCC,(IXACT)PH
LINK ORIG,FIFO
CCC LINK COPY,FIFO
GENERATE 1,,,1
TERMINATE 1
START 1,,,1
END

71
Observaţii.
1) Tranzacţia iniţială şi descendenţii creaţi fac parte din aceeaşi familie.
2) Mişcările tranzacţiei “părinte” şi ale tranzacţiilor “descendent” sunt independente, dar pot
fi sincronizate de blocurile prezentate în continuare.
3) Tranzacţiile “descendent” au aceeaşi prioritate şi parametri ca tranzacţia “părinte”.
4) Tranzacţiile “descendent” primesc numere de identificare diferite.

6.1.2 Asamblarea, sincronizarea şi gruparea tranzacţiilor

Blocul ASSEMBLE

Funcţie: Uneşte două sau mai multe tranzacţii din aceeaşi familie într-o singură
tranzacţie. Blocul poate fi util în modelarea anumitor sisteme de fabricaţie şi operaţii de
asamblare, unde diferite piese înrudite, prin faptul că formează un anumit produs, trebuie să
fie procesate separat şi independent până la un anumit punct, unde sunt asamblate.
Sintaxă: ASSEMBLE A
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicită sau rezultat


A Numărul de tranzacţii aparţinând aceleaşi
familii care vor fi unite.

Exemplu: ASSEMBLE 2
Două tranzacţii din aceeaşi familie
vor fi unite într-o singură tranzacţie
Observaţii.
1) Până ce blocul nu va primi numărul specificat de tranzacţii din aceeaşi familie, nici o
tranzacţie nu va părăsi blocul.
2) Tranzacţiile care se asamblează sunt gestionate în lista ASM.

Blocul MATCH

Funcţie: Sincronizează mişcarea a două tranzacţii ale aceleaşi familii în două


puncte separate ale modelului.
Sintaxă: MATCH A
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicită sau rezultat


A Eticheta blocului complementar unde se
face sincronizarea tranzacţiilor

Exemplu: BL1 MATCH BL2


ADVANCE 2
TERMINATE 1
BL2 MATCH BL1
ADVANCE 3
TERMINATE 1

Observaţii.
1) Tranzacţiile aceleaşi familii vor fi eliberate din blocurile MATCH numai când vor putea să
se mişte sincron.
2) Tranzacţiile sunt gestionate în lista MTH.
72
Blocul GATHER

Funcţie: Adună un număr specificat de tranzacţii ale aceleaşi familii înainte de a le


muta pe toate în următorul bloc.
Sintaxă: GATHER A
Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicită sau rezultat


A Numărul de tranzacţii ale aceleaşi familii,
care vor fi reunite înainte de transferul
acestora.

Exemplu: GATHER 2 Se vor aduna două tranzacţii ale aceleaşi familii şi după aceea cele
două tranzacţii vor fi mişcate simultan în blocul următor.

Observaţii. 1) Tranzacţiile sunt gestionate în lista GTH.

6.2 Gestionarea tranzacţiilor în liste utilizator

Listele utilizator sunt liste create pentru o mai mare flexibilitate în modelarea
sistemelor. De exemplu, o listă utilizator poate reprezenta o linie de aşteptare pentru o
facilitate, în care disciplina dorită de tratare a tranzacţiilor să fie diferită de cea furnizată de
limbajul GPSS/H. Un model poate avea oricâte liste utilizator, fiecare identificată printr-un
nume. Tranzacţiile sunt plasate în lista utilizator de declaraţia bloc LINK şi sunt scoase din
listă de declaraţia bloc UNLINK. În timpul în care o tranzacţie se găseşte în lista utilizator
mişcare sa în alte blocuri este suspendată. Tranzacţia rămâne suspendată, până ce o altă
tranzacţie care execută blocul UNLINK o reactivează.

Blocul LINK

Funcţie: Plasează tranzacţiile în lista utilizator.


Sintaxă: LINK A,B,C
Semnificaţia operanzilor:

Operand Conţinut Semnificaţie


A expr Specifică numele sau numărul listei utilizator

B FIFO Adaugă tranzacţiile intrate la sfârşitul listei.


LIFO Adaugă tranzacţiile intrate la începutul listei.

exprPtip Numărul sau tipul parametrului, a cărui valoare determină cum se


face sortarea. Folosind această posibilitate Tranzacţiile pot fi
sortate după valoarea anumitor atribute.
C expr Blocul de transfer în cazul blocului LINK cu restricţii.

Fiecare listă utilizator are un indicator-LINK. În modul cu restricţii blocul LINK are
următoarea funcţionare:
- dacă indicatorul este OFF, tranzacţia care intră este transferată către blocul indicat de
operatorul C.
- dacă indicatorul este ON, tranzacţia care intră este sortată în lista utilizator.
- dacă o tranzacţie intră într-un bloc UNLINK şi lista utilizator este goală, indicatorul este
trecut în OFF.

73
Blocul UNLINK

Funcţie: Extrage tranzacţii din lista utilizator de tranzacţii când blocul este parcurs
de o tranzacţie.
Sintaxă: UNLINK A,B,C,D
Semnificaţia operanzilor:

Operand Conţinut Semnificaţie


A expr Identificatorul listei utilizator

B expr Eticheta sau numărul blocului în care vor fi trimise tranzacţiile


extrase.
C expr sau ALL Numărul de tranzacţii extrase din listă
D fără, BACK Scoaterea tranzacţiilor se face de la început, sfârşit sau după
sau BV următoarele valori booleene, care analizează tranzacţiile din
lista utilizator.

Exemplu:
SIMULATE
GENERATE 10,5
TRANSFER BOTH,,ONE
TWO SEIZE MACHINE
ADVANCE 35
RELEASE MACHINE
UNLINK WAIT,TWO,1
TERMINATE 0
ONE LINK WAIT,LIFO
GENERATE 200
TERMINATE 0
START 1
END

Observaţii: 1) Lista utilizator poate fi vizualizată din fereastra de dialog prin


comanda display chain (: d cha)
Prin execuţia în modul test a simulării modelului din exemplu, se vizualizează lista
utilizator WAIT cu comanda de mai sus. Un rezultat intermediar obţinut la momentul
simulării 17.6965 este:

USER CHAIN ENTRIES AVERAGE AVERAGE CURRENT MAXIMUM


TIME/XACT CONTENTS CONTENTS CONTENTS
WAIT 1 0.000 0.000 1 1

La momentul simulării 30.0942 se obţine:

USER CHAIN ENTRIES AVERAGE AVERAGE CURRENT MAXIMUM


TIME/XACT CONTENTS CONTENTS CONTENTS
WAIT 2 6.199 0.412 2 2 Conţinutul maxim
de tranzacţii al listei
Conţinutul curent de
Timpul cât tranzacţiile au
tranzacţii al listei
fost rezidente / numărul
de tranzacţii Timpul cât tranzacţiile au fost
Ex.:(30.0942-17.6965)/2 rezidente/Timpul total
Ex: (30.0942-17.6965)/30.0942= 0.412

74
6.3 Generatoare de numere pseudo-aleatoare cu distribuţie uniformă

Limbajul GPSS/H are un număr nelimitat de generatoare interne de numere


aleatoare cu distribuţie uniformă în intervalul (0,1), notate RNG. Generatoarele sunt
denumite RN1, RN2, RN3, etc. Generatoarele au punctele de start diferite. primele 10 valori
ale generatoarelor RN1,...,RN8 sunt prezentate în tabelul 6.1:

Tabelul 6.1 Primele zece valori ale generatoarelor de numere aleatoare

Nr. RN1 RN2 RN3 RN4 RN5 RN6 RN7 RN8


1 0.270295 0.985170 0.214159 0.094836 0.567782 0.722544 0.203632 0.045961
2 0.499353 0.445582 0.791699 0.976269 0.677350 0.931816 0.097297 0.990727
3 0.739770 0.675116 0.792091 0.318588 0.352417 0.242655 0.542664 0.605539
4 0.204092 0.454705 0.132872 0.034865 0.496738 0.543981 0.583846 0.032678
5 0.120667 0.834154 0.377848 0.152324 0.724026 0.918246 0.212546 0.369601
6 0.768434 0.559414 0.943256 0.652139 0.135509 0.845153 0.682030 0.707049
7 0.440394 0.634527 0.271380 0.337951 0.530431 0.571151 0.457531 0.196601
8 0.859458 0.617560 0.393878 0.981639 0.897833 0.828790 0.698866 0.094023
9 0.792366 0.960078 0.812006 0.516752 0.414219 0.279809 0.767102 0.295870
10 0.092539 0.255847 0.153557 0.415278 0.598477 0.018436 0.880456 0.554502

Algoritmul utilizat pentru generarea secvenţelor de numere aleatoare este algoritmul


lui Lehmer. Poziţia unui număr aleator în serie, indică cu cât este decalată valoarea faţă de
numărul corespunzător valorii iniţiale. Valorile iniţiale ale acestui offset sunt diferite pentru
generatoare. Astfel pentru RN1 valoarea de offset este 100000, pentru RN2 este 200000 şi
aşa mai departe. Valorile de offset ale generatoarelor pot fi modificate de către programator
cu declaraţia de control RMULT.

Sintaxă: RMULT A,B,C,D


Semnificaţia operanzilor:

Operand Semnificaţie Valoare implicită sau rezultat


A Noua poziţie curentă a generatorului RNG1 -
B,C,D,etc. Noile poziţii ale generatoarelor: RNG2, -
RNG3, RNG4, etc.

Exemplu: RMULT 50000


RMULT ,12500
Observaţie: 1) Declaraţia de control nu poate avea etichetă.
În timpul simulării limbajul GPSS/H urmăreşte valorile generate de către generatoarele
interne de numere aleatoare şi în final prezintă un raport cu date statistice pentru fiecare din
generatoarele utilizate în model. Conţinutul raportului generatoarelor de numere aleatoare
este următorul:

(1) RANDOM STREAM: numărul generatorului la care se referă linia raportului


(2) ANTITHETIC VARIATES: coloana indică dacă s-au folosit valorile numerelor
aleatoare sau echivalentul lor antitetic
(3) INITIAL POSITION: indică valoarea iniţială a offsetului în seria numerelor
aleatoare ale generatorului
(4) CURRENT POSITION: indică valoarea poziţiei în seria de numere aleatoare a
numărului curent generat
(5) SAMPLE COUNT: indică câte numere au fost generate

75
(6) CHI-SQUARE UNIFORMITY: indică nivelul de signifianţă al numerelor extrase din
generator.

Scopul testului CHI este de a examina dacă eşantionul de numere aleatoare provine
dintr-o sursă de numere aleatoare cu o distribuţie uniformă în intervalul [0,1]. În acest scop,
intervalul [0,1] este împărţit în 16 sub intervale de lăţime 1/16. Teoretic, se aşteaptă ca 1/16
dintre valorile generate să se găsească în fiecare dintre intervale. Pentru fiecare din
intervale se face diferenţa dintre numărul de valori aşteptate a se găsi în interval şi numărul
real. Valoarea lui 2 se calculează cu formula de mai jos:

( frecv _ obsi  frecv _ teoretici ) 2


16
 
2

i 1 frecv _ teoretici

Rezultatul obţinut este comparat cu valorile calculate pentru numărul de grade de libertate
16 –1=15 şi se obţine nivelul de signifianţă afişat în coloana 6, valoarea p corespunzătoare
din tabelul 6.2. Când numărul de date generate este mai mic de 80 se afişează N/A (nu se
poate aplica).

Tabelul 6.2 Valorile lui 2

p=0.9 p=0.7 p=0.5 p=0.3 p=0.2 p=0.1 p=0.05 p=0.01 p=0.001


d=1 0.015 0.14 0.45 1.07 1.64 2.71 3.84 6.63 10.8
d=2 0.211 0.71 1.39 2.41 3.22 4.61 5.99 9.21 13.8
d=3 0.584 1.42 2.37 3.67 4.64 6.25 7.81 11.3 16.3
d=4 1.06 2.19 3.36 4.88 5.99 7.78 9.49 13.3 18.5
d=5 1.61 3.00 4.35 6.06 7.29 9.24 11.1 15.1 20.5
d=6 2.20 3.83 5.35 7.23 8.56 10.6 12.6 16.8 22.5
d=7 2.83 4.47 6.35 8.38 9.80 12.0 14.1 18.5 24.3
d=8 3.49 5.53 7.34 9.52 11.1 13.4 15.5 20.1 26.1
d=9 4.17 6.39 8.34 10.7 12.2 14.7 16.9 21.7 27.9
d=10 4.87 7.27 9.34 11.8 13.4 16.0 18.3 23.2 29.6
d=11 5.58 8.15 10.3 12.9 14.6 17.3 19.7 24.7 31.3
d=12 6.3 9.03 11.3 14.0 15.8 18.5 21.0 26.2 32.9
d=13 7.04 9.93 12.3 15.1 17.0 19.8 22.4 27.7 34.5
d=14 7.49 10.8 13.3 16.2 18.2 21.1 23.7 29.1 36.1
d=15 8.55 11.7 14.3 17.3 19.3 22.3 25.0 30.6 37.7
d=16 9.31 12.6 15.3 18.4 20.5 23.5 26.3 32 39.3
d=17 10.1 13.5 16.3 19.5 21.6 24.8 27.6 33.4 40.8
d=18 10.9 14.4 17.3 20.6 22.8 26 28.9 34.8 42.3
d=19 11.7 15.4 18.3 21.7 23.9 27.2 30.1 36.2 43.8
d=20 12.4 16.3 19.3 22.8 25 28.4 31.4 37.6 45.3

6.4 Distribuţii de probabilitate în limbajul GPSS/H

Limbajul GPSS/H furnizează un număr nelimitat de generatoare de numere aleatoare


cu distribuţie uniformă. Variaţia funcţiei densitate de probabilitate pentru distribuţia uniformă
pentru o populaţie cuprinsă între [0,1] este dată în figura 6.1. Pentru a converti distribuţia
uniformă de probabilitate într-o populaţie dată uniform distribuită pe alt interval se foloseşte
intern următoarea formulă:

sample = (A-B)+RN1*(2*B)

76
unde A,B sunt operanzii declaraţiilor bloc:
GENERATE A,B sau ADVANCE A,B şi RN1 este valoarea aleatoare furnizată de
generatorul intern de numere aleatoare cu distribuţie uniformă din figura 6.1.
f(x)
1

0 1 x

Figura 6.1 Reprezentarea funcţiei densitate de probabilitate pentru distribuţia uniformă

GPSS/H posedă funcţii interne cu ajutorul cărora se pot genera şi alte distribuţii de
probabilitate.

Distribuţia exponenţială. Funcţia distribuţie de probabilitate este:

1
1 ( x)

f ( x)  e

unde valoarea - este valoarea aşteptată. Variabilele aleatoare cu o astfel de distribuţie au


valori mai mari ca zero. În figura 6.2 este reprezentată o familie de distribuţii de probabilitate
exponenţiale cu valori aşteptate diferite: =0.5,
=1, =2.

Figura 6.2 Distribuţia de probabilitate exponenţială

Aceste variabile aleatoare se utilizează pentru modelarea proceselor stocastice


pentru care nu este nici un control asupra frecvenţei evenimentelor sau acesta este prea
mic. O distribuţie exponenţială este complet definită de valoarea de aşteptare. De exemplu,

77
modelarea unui proces aleator cu o distribuţie exponenţială cu valoarea medie a timpului de
generare dat, conţine toate elementele necesare rezolvării problemei.
Formula internă de generare este:

sample = media *[-ln(1.0 - RNj)]


unde : media - valoarea medie a timpului de generare (valoarea aşteptată)
RNj - valoare aleatoare cu distribuţie uniformă furnizată de generatorul
intern RNj
În modelare, utilizatorul va folosi funcţia GPSS/H inclusă: RVEXPO(j,media)
unde: j- reprezintă numărul generatorului intern de numere aleatoare folosit
media- valoarea aşteptată

Exemplu: GENERATE RVEXPO(4,18.5)


sau:
ADVANCE RVEXPO(3,15)

Distribuţia POISSON. În modelarea proceselor stocastice, apare necesitatea


generării unor variabile aleatoare la anumite momente de timp sau cu o anumită rată (nr.
variabile /unitatea de timp). În simulare, interesul utilizatorului se concentrează asupra
timpilor de generare, pentru că acestea sunt generate prin diverse distribuţii de probabilitate.
Timpii de generare sunt variabile continue (pot avea orice valoare într-un interval) spre
deosebire de ratele de generare care sunt variabile discrete (numere întregi într-un interval).
În cazul variabilelor aleatoare continue vorbim de funcţia distribuţie de probabilitate, iar în
cazul variabilelor discrete de funcţia masă de probabilitate.
Se arată că atunci când variabilele continue au o distribuţie exponenţială, ratele de
generare asociate au o distribuţie Poisson. Variabilele aleatoare Poisson sunt numere
întregi mai mari sau egale cu 0. De exemplu, funcţiile masă de probabilitate pentru valorile
aşteptate de =0.5, =1.0, =2.0 sunt prezentate în figura 6.3:

p(x) p(x) p(x)

=0.5 =1 =2


0.6 0.6 0.6

0.4 0.4 0.4


0.2 0.2 0.2

0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5

Figura 6.3 Funcţii de probabilitate Poisson

Ca şi pentru distribuţia exponenţială, variabilele aleatoare cu distribuţie Poisson sunt


complet caracterizate de valoarea aşteptată.
1
Valoarea aşteptată în cazul distribuţiilor Poisson este:   .

Valoarea lui  reprezintă numărul mediu al sosirilor în unitatea de timp spre
deosebire de  care reprezintă timpul mediu dintre două sosiri consecutive. De exemplu,
dacă valoarea aşteptată în cazul unei distribuţii exponenţiale este de 5 minute (în medie o
sosire la 5 minute), atunci valoarea aşteptată asociată în cazul unei distribuţii Poisson este
de 0.2 (0.2 sosiri pe minut, în medie).
78
Pentru a considera că rata de generare a unor evenimente aleatoare are o distribuţie
Poisson, trebuie să fie îndeplinite următoarele ipoteze:
1. probabilitatea de apariţie a unui eveniment într-un timp scurt este proporţională cu
mărimea intervalului. (De exemplu, probabilitatea ca o sosire să aibă loc în următoarele 5
minute este de două ori mai mare ca sosirea să aibă loc în următoarele 2.5 minute)
2. probabilitatea de apariţie a două sau mai multe evenimente într-un timp suficient
de mic este neglijabil de mică
3. apariţia evenimentelor este complet independentă

Distribuţia Erlag, are următoarea funcţie de distribuţie:

1
f ( x)  k x ( k 1) e (  x )
( k  1)!

Cazul cel mai important este pentru k=1, când distribuţia Erlag se reduce la distribuţia
exponenţială. Pentru k > 30, distribuţia Erlag poate fi foarte bine înlocuită de distribuţia
normală. În figura 6.4 sunt reprezentate o familie de funcţii distribuţie de probabilitate Erlag
pentru diferite valori ale lui k.

Figura 6.4 Distribuţia Erlag

Distribuţia Erlag are o importanţă practică în modelarea timpilor de servire, fiind


caracterizată de doi parametri cunoscuţi sub numele de formă şi scală, cu parametru
formă (k) întreg mai mare sau egal cu 1. Distribuţia exponenţiala este o distribuţie Erlag cu
parametrul de formă 1.
În modelare se va utiliza în mod special distribuţia Erlag de ordin 2, pentru că s-a
constatat că variabilele aleatoare de timp din sistemele reale au o histogramă care este
foarte asemănătoare cu funcţia densitate de probabilitate a distribuţiei Erlag de ordin 2.
Se arată că o metodă de a obţine eşantione dintr-o distribuţie Erlag de ordin k cu
valoare aşteptată  este de a forma suma a k eşantioane cu distribuţie exponenţială cu
valoarea aşteptată /k. De exemplu, pentru a modela în GPSS/H eşantioane de timp de
servire cu o distribuţie Erlag de ordinul 2 cu valoarea aşteptată 0.9 se utilizează următoarea
secvenţă de blocuri:
ADVANCE RVEXPO(3,0.45)
ADVANCE RVEXPO(3,0.45)
79
În acest exemplu valoarea aşteptată a distribuţiei exponenţiale este 0.45, care este
jumătate din valoarea aşteptată a distribuţiei Erlag de ordin 2. S-a utilizat generatorul intern
de numere aleatoare 3. Cele două blocuri se pot înlocui cu un singur bloc care conţine ca
operand al blocului ADVANCE o expresie:

ADVANCE RVEXPO(3,0.45)+RVEXPO(3,0.45)

Distribuţia normală. Este complet caracterizată de valoarea aşteptată () şi deviaţia


standard () sau varianţa (2). Funcţia densitate de probabilitate are următoarea relaţie:

x
1 0.5( )2
f ( x)  e 
 2

Reprezentarea grafică pentru cazul =0 şi deviaţiile standard 0.5, 1.0 şi 2.0 este prezentată
în figura 6.5.

Figura 6.5 Distribuţii normale cu valoare Figura 6.6 Distribuţii normale cu valoarea
medie 0 deviaţiei standard 1

Variabila aleatoare cu valoarea medie 0 şi deviaţia standard 1 este cunoscută sub numele
de variabila aleatore normală standard. În figura 6.6 sunt reprezentate grafic distribuţii de
probabilitate normale cu deviaţia standard 1 şi valori aşteptate -1.0, 0.0, 1.0.

Tabelul 6.3 indică procentul de valori ale unei distribuţii normale care se găsesc în intervalul
indicat, conţinând un număr specificat de deviaţii standard faţă de valoarea aşteptată.

Tabelul 6.3 Procentul valorilor care se găsesc în intervalul specificat


Interval Procent
 68.3
1.28 80.0
1.65 90.0
1.96 95.0
2.0 95.5
2.33 98.0
2.575 99.0

80
3 99.7
Teorema limitei centrale stabileşte că distribuţia sumei sau mediei unei serii de
variabile independente, indiferent de distribuţia de probabilitate, tinde către distribuţia
normală pe măsură ce numărul de variabile ale seriei creşte.
În cele mai multe cazuri teorema este satisfăcută când numărul de eşantioane ale
seriei este mai mare sau egal cu 30. De exemplu, timpul necesar fabricaţiei unei unităţi
dintr-un produs poate avea o distribuţie normală. Aceasta trebuie înţeleasă prin
considerarea timpului de fabricaţie ca suma timpilor operaţiilor necesare.
Limbajul GPSS/H furnizează o funcţie proprie de generare a variabilelor aleatoare cu
distribuţie normală cu următoarea sintaxă: RVNORM(j, , )
unde: j este numărul generatorului intern de numere aleatoare folosit
 valoarea aşteptată
 deviaţia standard.

Observaţii.
1) Valorile  şi  pot fi specificate fie ca numere întregi sau ca numere zecimale.
2) Valorile generate se găsesc în intervalul 43*, deşi rareori este necesar să se
considere valori care depăşesc intervalul 3*.
3) Cum valorile generate au semnificaţia unor timpi, acestea nu pot fi decât pozitive. Din
generare pot rezulta şi valori negative şi atunci se consideră valoarea lor absolută prin
utilizarea funcţiei GPSS/H ABS(expr). Cu această precizare un exemplu de utilizare
este: GENERATE ABS(RVNORM(7,5.5,1.0))

Distribuţii triunghiulare. Au funcţia de distribuţie de formă triunghiulară. Aceste


distribuţii sunt caracterizate de valorile: minimă, modală şi maximă. În figura 6.7 este
reprezentată o funcţie distribuţie de probabilitate triunghiulare cu valoarea minimă 10,
valoarea maximă 50 şi valoarea modală 15.

Figura 6.7 Distribuţia de probabilitate triunghiulară

Valoarea funcţiei de distribuţie în valoarea modală se calculează cu relaţia:

1
f ( x_ modal) 
( x_ maxim  x_ minim)

81
Funcţia GPSS/H pentru generarea acestor tipuri de distribuţii este: RVTRI(j,min,mode,max)
unde: j - numărul generatorului intern de numere aleatoare
min - valoarea minimă
mode - valoarea modală
max - valoarea maximă.

Exemplu: RVTRI(1,10,15,50)

6.4 Organizarea experimentelor de simulare şi determinarea intervalului de


încredere
6.4.1 Determinarea nivelului şi intervalului de încredere; Distribuţia-z şi
distribuţia-t

Un obiectiv fundamental în observarea valorilor de ieşire ale unei variabile este de a


estima valoarea aşteptată. De exemplu, considerându-se determinarea ratei aşteptate a
producţiei (valoarea medie a ratei producţiei) ce rezultă ca urmare a unei anumite organizări
a sistemului de fabricaţie, se construieşte modelul sistemului şi, ca în celelalte exemple, se
simulează sistemul. Rata producţiei obţinut dintr-o singură simulare reprezintă doar o
valoare estimată a ratei medii de producţie. În general, mărimea obţinută este un număr
folosit ca o estimare a valorii parametrilor unei populaţii necunoscute (în exemplu, o
estimare a valorii estimate din populaţia ratelor de producţie realizate de sistemul de
fabricaţie). Dacă efectuăm două sau mai multe simulări cu modelul sistemului de fabricaţie,
atunci în urma fiecărei simulări obţinem câte o valoare de estimare a ratei producţiei,
independentă de celelalte valori. Între aceste valori pot exista diferenţe apreciabile. Din
cauza variabilităţii valorilor obţinute rezultă, evident, că este ne justificat să se realizeze o
singură simulare şi să se considere valoarea obţinută ca o estimare a valorii aşteptate.
Determinarea valorii aşteptate se va face prin mai multe simulări, obţinând astfel un
interval de estimare a valorii. Intervalul de estimare a valorii aşteptate este format din două
numere între care se găseşte valoarea aşteptată cu o anumită cuantificare a încrederii în
rezultatului obţinut. Coeficientul de încredere, de exemplu 90% sau 95%, este ataşat
acestui interval pentru a indica nivelul de încredere, sau gradul de încredere, cu care
valoarea estimată se găseşte în intervalul obţinut. Numerele din intervalul de încredere se
denumesc valoarea minimă a intervalului de încredere şi valoarea maximă a
intervalului de încredere. În cazurile în care deviaţia standard a valorilor populaţiei este
cunoscută ( valoarea  ), intervalul de încredere poate fi determinat pe baza curbei
distribuţiei normale.
În majoritatea aplicaţiilor deviaţia standard a valorilor populaţiei nu este
cunoscută. În aceste cazuri, deviaţia standard a eşantionului ( să o notăm cu s ) este
folosită ca valoare de estimare a deviaţiei standard populaţiei (s  ) .
Utilizarea deviaţiei standard a eşantionului (s) în determinarea intervalului de
încredere necesită o serie de consideraţii suplimentare legate de mărimea eşantionului şi
de distribuţia de probabilitate a populaţiei. Teorema limitei centrale arată că distribuţia
eşantionului poate fi folosită pentru estimarea parametrilor fără a fi necesar să cunoaştem
distribuţia populaţiei, dar operaţional aceasta este valabil pentru eşantioane de mărime 30
sau mai mari. Aceasta înseamnă că distribuţia eşantionului se presupune normală. Pentru
eşantioane mai mici de 30 ipoteza nu mai este valabilă sau cu alte cuvinte aplicarea ipotezei
conduce la rezultate eronate. În această situaţie, în locul distribuţiei normale se utilizează o
altă distribuţie, numită distribuţia-t.
Distribuţia-t este indicată a fi folosită atunci când eşantioanele aparţin unei populaţii
cu distribuţie normală şi aceasta ipoteză va fi considerată valabilă în cazul rezultatelor
obţinute în urma simulării modelelor ca urmare a faptului că valoarea obţinută în urma unei
82
simulări rezultă ca sume a unor variabile aleatoare cu diferite distribuţii şi conform teoremei
centrale acestea tind la distribuţia normală.
În general, dacă această condiţie nu este îndeplinită, în literatură sunt indicate alte
metode numite metode statistice ne-parametrice.
Diferenţa dintre media eşantionului x , şi media populaţiei  este denumită eroarea
eşantionului.
eroare _ esant  x  

Această relaţie nu poate fi folosită direct pentru determinarea mărimii erorii


eşantionului pentru că nu este cunoscută media populaţiei. Dar, distribuţia eşantionului
(deviaţia standard a eşantionului -s) poate fi folosită pentru calculul unei estimaţii a deviaţiei
s
standard a populaţiei cu următoarea relaţie:   , unde n - reprezintă lungimea
n
eşantionului. Valoarea aşteptată se calculează în funcţie de lungimea eşantionului. Pentru n
 30 se foloseşte distribuţia- z şi relaţia de determinare a valorii aşteptate este:
s
  x  z /2 
n
Expresia z/2 se referă la numărul de deviaţii standard faţă de valoarea medie a
populaţiei  pentru o arie de /2 în partea de jos a curbei distribuţiei normale şi o arie de /2
în partea de sus a curbei distribuţiei normale (figura 6.8).

Figura 6.8 Nivelul de signifianţă în relaţie cu curba distribuţiei normale

Alfa se numeşte nivelul de signifianţă. Acesta este complementul nivelului de


încredere.
Valoarea lui z/2 folosită în determinarea intervalului estimat se alege din tabele pe
baza nivelului de încredere dorit. Nivelul de încredere asociat intervalului determinat este de
(1-)*100%. În cazul în care lungimea eşantionului este sub 30 se foloseşte distribuţia-t.
Aceasta este influenţată de numărul de grade de libertate al eşantionului. Formula de calcul
a valorii aşteptate în acest caz este:
s
  x  t  /2  .
n

În funcţie de numărul de grade de libertate al eşantionului şi de nivelul de încredere


dorit se determină din tabele valoarea lui t/2 .
Un tabel prescurtat al valorilor distribuţiei t, funcţie de numărul de grade de libertate şi
de valoarea lui /2 este prezentat mai jos:

Tabelul 6.4 Tabel prescurtat al valorilor distribuţiei t

83
Nr. grade de Aria /2
libertate .05 .025 .01 .005
1 6.314 12.706 31.821 63.657
5 2.015 2.571 3.365 4.032
10 1.812 2.228 2.764 3.169
15 1.753 2.131 2.602 2.947
20 1.725 2.086 2.528 2.845
25 1.716 2.060 2.485 2.787
30 1.697 2.042 2.457 2.750
60 1.671 2.000 2.390 2.660
 1.645 1.960 2.326 2.576

Observaţie: 1) Pentru eşantioane la care n > 30 diferenţele dintre valorile distribuţiei-t şi


cele ale distribuţiei-z sunt mai mici de 10%.
Exemplu:
Presupunem că după 10 simulări am obţinut următorii timpi medii de procesare a
unui produs:

Nr. simulare Valoarea medie a timpului de procesare


1 1.501
2 2.033
3 2.456
4 7.584
5 2.890
6 3.060
7 0.967
8 5.536
9 2.489
10 4.163
11 1.370
Media: 3.095
Deviaţia standard: 1.981

Dorim să determinăm intervalul de încredere al valorii aşteptate cu nivelul de


încredere de 90%. La acest interval de încredere îi corespunde  = 0.1. Numărul de grade
al eşantionului este 10.
Din tabelul 6.4,
/2=0.05
Nr. grade de Aria /2
libertate .05 .025 .01 .005
1 6.314 12.706 31.821 63.657
5 2.015 2.571 3.365 4.032
10 1.812 2.228 2.764 3.169

valoarea obţinută pentru t/2 =1.812.


Intervalul de încredere este: 3.095(1.812*1.981/√11) = [2.012, 4.177], cu nivelul de
încredere de 90%.

Exerciţii

1. Un sistem de producţie constă din două staţii de lucru consecutive: Staţia _1 şi Staţia_2.
La fiecare staţie de lucru este câte un muncitor. Înaintea staţiei unu există suficient loc
pentru ca piesele ce urmează a fi prelucrate să aştepte, dar între staţia unu şi doi există loc
84
limitat. Piesele sosesc la staţia unu la intervale de 3020 minute şi durata prelucrării pe staţii
este de 2510 minute la staţia unu şi respectiv 3010 minute la staţia doi.
Proiectaţi dimensiunea minimă a bufferului intermediar de piese astfel încât Staţia_1
să nu fie influenţată de Staţia_2 în funcţionare. Consideraţi un lot de 200 de piese.

2. Considerăm două grupuri de câte 5 muncitori, grupul A şi grupul B. Pentru a transforma o


parte de material brut într-un produs finit sunt necesari următorii paşi: un muncitor A execută
o operaţie care durează 3515 minute, apoi un muncitor B execută următoarea operaţie cu
durata 5010 minute şi din nou un muncitor A execută a treia operaţie cu durata 155
minute. Simultan sunt permise numai 10 părţi în prelucrare. Când un produs este executat
simultan o altă parte brută intră în prelucrare. Realizaţi modelul şi simulaţi pentru 100 de
piese prelucrate.

3. Linia finală de asamblare a televizoarelor are doi inspectori. Televizoarele ajung pe bandă
la punctul de testare la intervale de 5.52 minute. Fiecărui inspector îi este necesar 103
minute pentru testarea unui televizor. 88% dintre televizoarele testate trec testul iar restul
sunt trimise spre un punct de depanare cu un singur muncitor. Operaţia de depanare îi ia
3010 minute, după care televizoarele sunt trimise din nou spre linia de testare. Dacă testul
indică din nou o defecţiune circuitul este reluat. Simulaţi şi interpretaţi rezultatele pentru un
lot de 100 de televizoare.

4. Într-o secţie (figura de mai jos) sunt 5 tipuri de grupuri de maşini aşa cum este indicat în
următorul tabel:

Numărul grupului Numărul de maşini din grup


1 3
2 2
3 4
4 3
5 1
În interiorul unui grup de maşini toate sunt identice şi nu are importanţă maşina pe care se
face o anumită prelucrare. În interiorul secţiei se produc trei tipuri de produse denumite
produse de tip 1, tip 2 şi tip 3.

Tip produs Număr maşini prelucrare Secvenţa grupurilor Timpul procesării


(ore)
1 4 3 0.5
1 0.6
2 0.85
5 0.5
2 3 4 1.1
1 0.8
3 0.75
3 5 2 1.2
5 0.25
1 0.7
4 0.9
5 1.00

Fiecare tip de produs necesită pentru a ajunge în starea finala o serie de procesări pe
diferite maşini din secţie, tipul maşinilor, ordinea în care se execută procesările şi duratele
lor sunt prezentate în tabelul de mai sus.

85
Dintre materialele brute care sosesc în secţie 30% sunt pentru tipul 1, 50% sunt pentru tipul
2 şi restul pentru tipul 3. Materialele brute sosesc la intervale de 0.60.4 ore.
Simulaţi funcţionarea timp de 25 de schimburi de câte 8 ore şi determinaţi gradul de
folosire al maşinilor. Analizaţi informaţiile referitoare la cozile de aşteptare din sistem şi
determinaţi unde se produc strangulări ale fluxului tehnologic.
Tip 3
Tip 1 Tip 1 Tip 1
Grup 1 Grup 2
5 maşini 2 maşini
Tip 2
Tip 2 Tip 3
Tip 3
Grup 4 Tip 3 Grup 5
Grup 3
4 maşini 3 maşini 1 maşină

Tip1 Tip 3 Tip 2 Tip 1

Tip 2

86

S-ar putea să vă placă și