Documente Academic
Documente Profesional
Documente Cultură
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.
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
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.
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
----- ------- ----- ------------------------------------------------
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
Fereastra de dialog
WOLVERINE SOFTWARE CORPORATION
ANNANDALE, VIRGINIA 22003-2500, USA
Ready!
:s
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
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
18
SIMULATE
(Declaraţie de control)
Directive de compilare
START
(Declaraţie de control)
END
(Declaraţie de control)
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.
Constante. Sunt reprezentate prin valorile lor şi nu au un nume. Formatul constantelor este
dat în tabelul 2.3.
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.
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.
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.
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.
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 -
LET - Este o declaraţie de control prin care valoarea unei expresii se asignează unei
ampervariabile.
Sintaxă : [etichetă] LET &var=expresie
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
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.
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.
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.
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.
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
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
28
Capitolul 3 Elementele modelului şi gestiunea tranzacţiilor în 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ă.
Blocul GENERATE.
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 AB 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:
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.
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.
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.
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.
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.
Figura 3.2 Exemplu privind informaţiile referitoare la tranzacţiile din lista CEC
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.
(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.
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).
TERMINATE
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 TC0 ?
postsimulãrii
Nu
Da Existã tranzacţii succesive în
CEC ?
Nu
Faza de actualizare a
ceasului simulãrii
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.
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
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
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
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.
Ready!
:step
XACT 2 DESTROIED AT BLOCK 4 (BLOCK4). RELATIVE CLOCK: 0.0
:d cec fec
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
Ready!
:step
XACT 1 DESTROIED AT BLOCK 2. RELATIVE CLOCK: 20.4059
:d cec fec
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ã.
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.
41
3.3 Probleme propuse
SIMULATE
GENERATE 80,,0
ADVANCE 50
TERMINATE 1
START 1
RESET
START 1
END
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
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)
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.
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.
Semnificaţia operanzilor:
44
Semnificaţia operanzilor:
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
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ă.
Î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 TC0 ? 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
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.
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
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:
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).
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
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.
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.
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.
Aceste informaţii statistice pot fi afişate şi în timpul simulării în modul test prin
comanda: display tabel (: d tabel).
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
************************************************************************************************
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.
TABLE TCENT
TABLE WCENT
54
4.5 Probleme propuse
SIMULATE
*
GENERATE 1
SEIZE RESOURCE
ADVANCE 5
RELEASE RESOURCE
TERMINATE 1
*
START 5
END
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ă 2010 minute.
2. Merg la ghişeul unu, unde un singur funcţionar le dă un aviz prealabil. Consultarea
formularului iniţial durează 7.52.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ă 105 minute.
4. Revin la ghişeul unu, unde primesc confirmarea finală asupra formularelor
completate, ceea ce durează 52 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.510 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?
56
Capitolul 5. Modelarea grupurilor de serveri individuali; entitatea
STORAGE
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
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:
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
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.
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
Blocul FUNAVAIL
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
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
Blocul SUNAVAIL
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ă.
61
Un prim set de declaraţii bloc cu această funcţie sunt declaraţiile bloc TRANSFER.
Blocul TRANSFER
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
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.
Exemplu:
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.
INITIAL lista_init
Lista_init::=elementlista_init[/elementlista_init …]
elementlista_init::=Lxident
x::R|S
ident::=(nume)|$nume|numar
Blocul LOGIC
Funcţie: Schimbă starea unui comutator logic.
Sintaxă: eticheta LOGIC [operatoraux],A
Semnificaţia operanzilor:
Atributele logice standard ale comutatoarelor logice sunt prezentate în tabelul 5.3.
Blocul GATE
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
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:
Blocul LOOP
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.
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.
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
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
END
68
Exerciţii
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.
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.
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ă
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
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.
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:
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
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
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.
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
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:
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
74
6.3 Generatoare de numere pseudo-aleatoare cu distribuţie uniformă
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:
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).
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
GPSS/H posedă funcţii interne cu ajutorul cărora se pot genera şi alte distribuţii de
probabilitate.
1
1 ( x)
f ( x) e
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:
0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5
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.
ADVANCE RVEXPO(3,0.45)+RVEXPO(3,0.45)
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ă.
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))
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)
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
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 3020 minute şi durata prelucrării pe staţii
este de 2510 minute la staţia unu şi respectiv 3010 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.
3. Linia finală de asamblare a televizoarelor are doi inspectori. Televizoarele ajung pe bandă
la punctul de testare la intervale de 5.52 minute. Fiecărui inspector îi este necesar 103
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
3010 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:
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.60.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ă
Tip 2
86