Sunteți pe pagina 1din 23

Laborator 1 GPSS Un program in GPSS este format dintr-o insiruire de instructiuni scrise de obicei pe o singura linie.

Partile unei instructiuni in GPSS se numesc campuri. Aceste campuri sunt: numarul instructiunii (optional), eticheta (de cele mai multe ori optionala), un verb care semnifica actiunea care are loc, operanzi, comentarii. Comentariile sunt precedate de ;.Instructiunile in GPSS se impart in comenzi si in instructiuni bloc. Entitati importante pentru un model descris de un program in GPSS: blocuri, tranzactii, SNA, facilitati: Actiunea care defineste o instructiune este expimata ori printr-un un bloc, ori printr-o comanda. Blocul este elementul de baza al descrierii unui model in GPSS. Tranzactiile sunt entitatitle care dinamizeaza modelul descris de GPSS prin trecerea lor prin blocuri. Fiecarei tranzactii ii este asociat un numar. Tranzactiile de cele mai multe ori sunt asociate cu clientii dintr-un sistem de asteptare modelat de un program in GPSS. SNA System Numeric Attributes sunt entitatile care dau diferite informatii numerice despre sistemul modelat de program in GPSS. Se folosesc in operanzi sau expresii. Facilitatile sunt entitati cu ajutorul carora se simuleaza serviciul cu un singur punct de servire. Primul program in GPSS (eu il dictez linie cu linie ca studentii sa se obisnuiasca cu modul de lucru in GPSS). Se deschide GPSS World, File, New, Model. In editorul care se deschide se scrie urmatorul program care poate fi dictat fara explicatii si apoi studentii pot fi intrebati ce cred ei ca face. GENERATE 58 QUEUE COADA SEIZE BENZINA DEPART COADA ADVANCE 51 RELEASE BENZINA TERMINATE 1 Se dau explicatii. Este vorba de simularea unui sistem de asteptare, in particular de functionarea unei benzinarii la care clientii vin la fiecare 58 unitati de timp (in GPSS nu conteaza care este unitatea de timp, conteaza sa fie aceeasi in tot programul), sunt inregistrati in coada, sunt preluati de facilitatea (punctul de serviciu), se marcheaza iesirea lor din coada, primesc serviciul care dureaza 51 de unitati de timp, parasesc facilitatea si, prin ultima instructiune este marcata iesirea lor din sistemul asociat functionarii unei benzinarii. Definitiile blocurilor:

GENERATE creeaza tranzactii care vor percurge modelul; are forma generala: GENERATE A,B,C,D,E unde A reprezinta timpul mediu intre generari. Daca operandul B nu exista, atunci generarile se vor face la intervale constante de timp, egale cu A; B poate fi un numar sau un nume de repartitie statistica. Daca este un numar, atunci generarile se vor face dupa o repartitie unuiforma pe intervalul [A-B,A+B]. Adica timpul intre generari poate lua orice valoare intreaga din acest interval. Toate valorile intregi au aceeasi probabilitate de a fi alese. Daca B este un nume de repartitie statistica, atunci timpii intre generari vor fi valori ale averiabilei aleatoare cu repartitia B si media A. C este lungimea intervalului de timp cu care generarea tranzactiilor poate intarzia; D este limita de generare, numarul maxim de tranzactii care pot fi generate; E este prioritatea pe care o vor avea tranzactiile generate. QUEUE si DEPART sunt doua blocuri care nu pot exista unul fara celalalt intr-un model de simulare. Ele nu sunt elemente ale modelului, ci aduna informatii despre asteptarea clientilor, adica informatii despre cozile care eventual se formeaza. QUEUE inregistreaza momentul la care un client intra in coada si DEPART momentul la care un client iese din coada. forma lor generala este QUEUE A,B DEPART A,B unde A este numele cozii pentru care sunt adunate informatii; B este numarul de tranzactii care sunt inregistrate pentru intrarea/iesirea din coada. Daca lipseste este 1. SEIZE si RELEASE sunt doua blocuri care nu pot exista unul fara celalalt intr-un model de simulare. Ele simuleaza intrarea unui client (tranzactie) la un serviciu (facilitate), respectiv iesirea unui client de la un serviciu (facilitate). forma lor generala este SEIZE A RELEASE A unde A este numele sau numarul facilitatii. ADVANCE este un bloc care simuleaza oprirea tranzactiilor in sistem pentru un anumit interval de timp. Oprirea poate fi determinata de diverse cauze. De exemplu aici oprirea tranzactiilor se face pentru simularea primirii unui serviciu. forma generala este ADVANCE A,B

unde A si B au aceeasi semnificatie pe care o au operanzii A si B de la blocul GENERATE. TERMINATE este un bloc care simuleaza iesierea clientilor din sistem, distrugand tranzactiile create de GENERATE. forma generala este TERMINATE A unde A reprezinta numarul care se scade din numarul total de tranzactii pentru care se ruleaza modelul. fiecarui bloc GENERATE trebuie sa-i corespunda un bloc TERMINATE. in orice model trebuie sa existe un bloc TERMINATE cu operandul A diferit de 0, pentru ca in acest mod se controleaza timpul de rulare. Rularea unui program in GPSS se face prin trecerea unui anumit numar de tranzactii prin sistemul modelat. Se salveaza programul: File, Save. Se compileaza: Command, Create simulation. Se ruleaza: Command, START. Apare o fereastra in care este scris START 1. Se inlocuieste 1 cu 100, acest numar reprezentand numarul de tranzactii (clienti) pentru care se face experimentul de simulare. Dupa rulare apare automat raportul creat in urma simularii. Daca dorim o rulare fara afisarea automata a raportului se scrie in fereastra de start START 100,NP. La o privire rapida peste raport observam ca: este afisat timpul de inceput si timpul de sfarsit al simularii, numarul de blocuri din model, numarul de facilitati, numarul de entitati STORAGE. sunt afisate blocurile din model si in dreptul fiecaruia numarul de tranzactii care au trecut pe la acel bloc. sunt date informatii despre facilitatea BENZINA: o ENTRIES cate tranzactii au trecut pe la aceasta facilitate (cati clienti au fost serviti) o UTIL. ce fractiune (raportat la 1) din timpul total de simulare a fost folosita facilitatea o AVE. TIME timpul mediu de servire. o AVAIL., OWNER, PEND, INTER, RETRY, DELAY au semnificatie pentru modele mai complicate si nu le discutam acum. informatii despre coada COADA o MAX - lungimea maxima a cozii; o CONT lungimea cozii la sfrasitul simularii; o ENTRY cate tranzactii au fost intregistrate pentru aceste date despre coada. o ENTRY(0) cate tranzactii care nu au asteptat deloc au fost intregistrate pentru aceste date despre coada. o AVE. CONT lungimea medie a cozii. o AVE. TIME timpul mediu de asteptare. o AVE.(-0) timpul mediu de asteptare in coada pentru clientii care au asteptat un timp mai mare decat 0.

Informatii despre agenda evenimentelor viitoare: FEC (Future Events Chain). Se presupune ca urmatorul eveniment va fi sosirea celui de-al 101-lea client la momentul 5858. Sunt aratate diferitele ferestre pe care le pot vizualiza dupa si in timpul simularii: a blocurilor: Window, Simulation window, Blocks window; a facilitatilor: Window, Simulation window, Facilities window; a cozilor: Window, Simulation window, Queues window; Se mai face o rulare a programului cu una dintre aceste ferestre deschise si se observa modificarile care au loc in timpul rularii. Timpul de rulare este mai lung pentru ca este deschisa o fereastra grafica. Pentru oprirea experimentului se tasteaza F4. Pentru continuarea lui F2. Este aratata fereastra graficelor in care se pot reprezenta grafic diferite marimi ce caracterizeaza modelul simulat. Inainte de inceperea unei noi rulari se merge la: Window, Simulation Window, Plot Window. De exemplu putem reprezenta grafic lungimea unei cozi. Pentru identificarea acestei lungimi se foloseste SNA-ul Q$Nume_coada (in cazul nostru Q$Coada), unde $ este un delimitator. In fereastra deschisa se completeaza lungimea cozii la Label si Q$Coada la Expression. Se tasteaza Plot, apoi Memorize, apoi OK. Apare graficul cu cele 2 axe. Se alege si Memorize pentru a folosi aceasta reprezentare grafica si pentru rulari ulterioare. Se da din nou START 100. Este aratata fereastra expresiilor: Window, Simulation Window, Expression Window. In fereastra deschisa se completeaza timp la Label si c1 (ceasul simularii) la Expression. Se tasteaza View, apoi Memorize. Observam ca la Memorized Expressions apare si lungimea cozii, se selecteza View, apoi OK. Cu fereastra expressilor deschisa se mai da odata START 100. Se pot vedea valorile diferitelor expresii si intr-un alt mod: Command, SHOW, c1. In fereastra de compilare, JOURNAL, este afisata valoarea ceasului simularii. Analog, Command, SHOW, QM$Coada (lungimea maxima a cozii). Acum in fereastra expresiilor se trece si Tranzactia Activa la Label, iar la Expression XN1, apoi View, apoi Memorize. Se mai face o rulare cu fereastra expressilor deschisa. Exercitii: 1. Sa se modifice programul astfel incat se se formeze o coada de lungime mai mare. Sa se afiseze graficul lungimii cozii si sa se compare cu cel precedent. Sa se observe modificarile valorilor din raport. 2. Sa se modifice programul astfel incat timpii intre sosiri sa aiba o distributie uniforma pe intervalul [50,58]. Sa se observe modificarile valorilor din raport.

3. Intr-un program pot exista mai multe tipuri de tranzactii. Sa se modifice programul astfel incat la benzinarie sa soseasca doua tipuri de clienti: clienti cu masini rosii, care sosesc la fiecare 58 de unitati de timp, si clienti cu masini albe care sosesc la fiecare 50 de unitati de timp. Sa se ruleze programul pentru 100 de masini albe. Cate masini rosii au fost generate? Cate masini rosii au trecut prin sistem? generate - creeaza tranzactii care vor parcurge modelul forma generala: generate a,b,c,d,e (fara spatii) toti parametrii sunt optionali a si b nu merg in acelasi timp a - timpul mediu intre generari daca b lipseste atunci tranzactiile vor fi generate la distante de timp egale cu a default = 0 b - poate fi un numar sau un nume de partitie statistica daca e un numar atunci generarile se vor face dupa o repartitie uniforma pe intervalul [a-b, a+b] default = 0 c - lungimea intervalului de timp in care generarea tranzactiilor va intarzia default = 0 d - limita de generare, nr maxim de tranzactii care se pot genera default = infinit e - prioritatea tranzactiilor generate default = 0 queue - inregistreaza momentul la care clientul intra in coada forma generala: queue a,b a - numele cozii (obligatoriu) b - nr de tranzactii care sunt inregistrate pentru intrarea respectiv iesirea din coada optional, default = 1 depart - inregistreaza momentul la care clientul iese din coada seize - simuleaza intrarea unui client la un serviciu forma generala: seize a a - numele facilitatii release - opusul seize forma generala: release a a - numele facilitatii advance - simuleaza oprirea tranzactiilor in sistem forma generala: advance a,b

(parametrii ca la generate) a - timpul mediu intre generari b - poate fi un numar sau un nume de partitie statistic terminate - distruge tranzactiile create de generate forma generala: terminate a a - numarul care se scade din parametrul de la start (optional) default = 0 generate 58 ;se creaza tranzactii la fiecare 58 de unitati de timp queue coada ;masoara coada care eventual se formeaza seize benzina ;tranzactiile incearca sa acopere facilitatea "benzina", se formeaza o coada iar tranzactiile se aseaza in acea coada depart coada ;marcheaza iesirea din coada a unei tranzactii advance 51 ;asteapta 51 de unitati de timp release benzina ;elibereaza facilitatea "benzina" terminate 1 ;marcheaza incheierea duratei de viata a tranzactiei create, si deconteaza un contor generate 60 ;se creaza tranzactii la fiecare 58 de unitati de timp queue coada ;masoara coada care eventual se formeaza seize benzina ;tranzactiile incearca sa acopere facilitatea "benzina", se formeaza o coada iar tranzactiile se aseaza in acea coada depart coada ;marcheaza iesirea din coada a unei tranzactii advance 40 ;asteapta 40 de unitati de timp release benzina ;elibereaza facilitatea "benzina" terminate 0 ;marcheaza incheierea duratei de viata a tranzactiei create, si deconteaza un contor generate 40 queue coada2 ;masoara coada care eventual se formeaza seize motorina ;tranzactiile incearca sa acopere facilitatea "benzina", se formeaza o coada iar tranzactiile se aseaza in acea coada depart coada2 ;marcheaza iesirea din coada a unei tranzactii advance 40 ;asteapta 40 de unitati de timp release motorina ;elibereaza facilitatea "benzina" terminate 1 ;marcheaza incheierea duratei de viata a tranzactiei create, si deconteaza un contor generate 33,8 ;se creaza tranzactii la fiecare 58 de unitati de timp queue coada ;masoara coada care eventual se formeaza seize benzina ;tranzactiile incearca sa acopere facilitatea "benzina", se formeaza o coada iar tranzactiile se aseaza in acea coada depart coada ;marcheaza iesirea din coada a unei tranzactii advance 40 ;asteapta 40 de unitati de timp release benzina ;elibereaza facilitatea "benzina" terminate 1 ;marcheaza incheierea duratei de viata a tranzactiei create, si deconteaza un contor

LABORATOR GPSS 2

In laboratorul trecut s-a lucrat cu un model in care serviciul era realizat de un singur punct de servire. In acest laborator va simulat un serviciu cu doua puncte de servire in paralel. Problem: O central telefonic are dou linii externe. Chemrile sosesc la fiecare 10060 secunde (adic intervalele de timp intre chemri sunt uniform repartizate pe intervalul [40,160]) i o convorbire dureaz 18060 secunde. Cnd este ocupat linia, cel care sun ncerc din nou dup ce au trecut 51 minute. Se cere o histogram cu distribuia timpului necesar unui apel ca s aib succes. S se ruleze programul pentru 200 de chemri. Definiie: Histograma este o reprezentare grafica bidimensionala a repartiiei unei caracteristici asociate unei populaii. Histograma se deseneaz in raport cu doua axe: axa orizontala este mprit n clase (intervale) de frecventa si este asociata valorilor caracteristicii, iar axa verticala corespunde numrului de elemente din populaie. Histograma consta dintr-o succesiune de dreptunghiuri, fiecare dintre acestea avnd ca baz un interval de frecven. nlimea unui dreptunghi este proporional cu numrul de elemente din populaie a cror caracteristic are valori n intervalul care definete baza dreptunghiului. Sugestii pentru rezolvare: Se va defini o entitate STORAGE. Se va iniializa graficul. La definirea histogramei parametrul A va fi M1 specificnd astfel faptul c datele reprezentate in histograma reprezint valori ale unui timp. Ceilali operanzi din definiia graficului pot fi alei: 100, 100, 20. Se vor genera clienii dup o distribuie uniform pe intervalul [100-60, 100+60]. Cu ajutorul unei instruciuni GATE, avnd operatorul SNF, se verific dac clienii gsesc o linie liber din entitatea STORAGE. Daca da, are loc o convorbire, dac nu, sunt trimii la un bloc ADVANCE care va simula durata ateptrii. Dup ce au ateptat, cu ajutorul unui bloc TRANSFER necondiionat sunt trimii s verifice din nou dac exist vreo linie liber. Instruciuni noi: STORAGE instruciune care definete o entitate de depozitare sau un punct de servire cu mai multe uniti de servire n paralel. Forma general este: 1. Etichet STORAGE A Unde:

Etichet este numele entitii STORAGE i este un element obligatoriu; A este capacitatea entitii STORAGE i este obligatorie;

GATE este o instruciune care deviaz fluxul tranzaciilor n funcie de starea unei entiti. Are forma general: 2. Etichet GATE O A,B Unde: Etichet este un element opional; O este un operator condiional i este obligatoriu. Valorile lui pot fi: FNV pentru un test cu succes facilitatea specificat de operandul A trebuie s nu fie disponibil; FV pentru un test cu succes facilitatea specificat de operandul A trebuie s fie disponibil; SE pentru un test cu succes entitatea storage specificat de operandul A trebuie s fie goal; SF pentru un test cu succes entitatea storage specificat de operandul A trebuie s fie plin; SNE pentru un test cu succes entitatea storage specificat de operandul A trebuie s nu fie goal; SNF pentru un test cu succes entitatea storage specificat de operandul A trebuie s nu fie plin; SNV pentru un test cu succes entitatea storage specificat de operandul A trebuie s nu fie disponibil; SV pentru un test cu succes entitatea storage specificat de operandul A trebuie s fie disponibil. A este numele sau numrul entitii care va fi testat i este obligatoriu; B este numrul blocului destinaie n cazul n care testul nu are succes. Este opional.

TABLE este o instruciune care iniializeaz o histograma. Forma general este: 3. Etichet TABLE A,B,C,D Unde: Etichet este numele histogramei i este un element obligatoriu; A este argumentul histogramei, elementul care furnizeaz datele pentru distribuia de frecven. Este obligatoriu;

B este limita superioar a primei clase de frecven. Este obligatoriu; C este lungimea unei clase de frecven. Este obligatoriu; D este numrul claselor de frecven. Este obligatoriu.

ENTER este blocul care simuleaz intrarea unei tranzacii intr-o entitate STORAGE. Forma general este: 4. Etichet ENTER A,B Unde: Etichet este un element opional; A este numele sau numrul entitii STORAGE i este obligatoriu; B este numrul de uniti cu care descrete capacitatea disponibil a entitii STORAGE i este opional. Daca B nu exista este considerat a fi 1.

LEAVE este blocul prin care se simuleaz eliberarea entitii STORAGE de ctre un anumit numr de tranzacii. Forma general este: 5. Etichet LEAVE A,B Unde: Etichet este un element opional; A este numele sau numrul entitii STORAGE i este obligatoriu; B este numrul de uniti eliberate din entitatea STORAGE. Este opional si daca nu exista este considerat a fi 1.

TABULATE determin crearea unei histograme. Forma general este: Etichet este un element opional; A este numele sau eticheta histogramei i este obligatoriu; B este factorul de pondere i este opional.

TRANSFER este blocul care determin saltul unei tranzacii la un alt bloc. Forma general este: 6. Etichet TRANSFER A,B,C,D Unde: Etichet este un element opional; A este modul de transferare i este opional. Dac lipsete, transferul se face necondiionat; B, C, D sunt etichet sau numr de bloc i sunt opionale;

2. Scriei un program care sa rezolve problema de mai sus completnd modelul iniial astfel: dup ce a avut loc o convorbire, clientul trebuie sa trimit un fax. Exista un singur aparat de fax si durata de utilizare a lui este de 103 minute. Sa se determine statisticile cozii formate pentru utilizarea faxului si histograma timpului petrecut de client in sistem. Problema 1 O centrala telefonica are 2 linii externe, apelurile sosesc la fiecare 100 +/- 60 de secunde adica intervalul de timp intre chemari sunt uniform repartizate pe intervalul [40,160] iar o convorbire dureaza intre 120 si 240 de secunde. Cand este ocupata linia cel care suna incearca din nou dupa 5 +/- 1 minute. Se cere o histograma cu distributia timpului necesar unui apel ca sa aiba succes. Sa se ruleze programul pentru 200 de apeluri incheiate. storage defineste o entitate de depozitare sau un punct de servire cu mai multe unitati de servire in paralel. Forma generala: [eticheta] storage <a> [eticheta] = numele entitatii storage (este obligatoriu) <a> = reprezinta capacitatea unitatii storage (este obligatoriu) -------------------------------------------------------------------------------------------------------------------------------------gate este o instructiune care deviaza fluxul tranzactiilor in functie de starea unei entitati Forma generala: gate <o> <a>,<b> <0> = operator conditional obligatoriu, valorile lui pot fi: - fnv = facility not available - fv = facility avaliable - se = storage empty - sf = storage full - sne = storage not empty - snf = storage not full - snv = storage not available - sv = storage available <a> = numele sau numarul entitatii care va fi testata <b> = eticheta sau numarul blocului destinatie in cazul in care testul NU are succes, daca testul are succes tranzactie va trece la urmatoarea instructiune. In cazul in care testul nu are succes, iar b lipseste tranzactia va astepta la instructiunea gate pana cand testul va avea succes (se formeaza coada) -------------------------------------------------------------------------------------------------------------------------------------enter simuleaza intrarea unei tranzactii intr-o entitate storage (formeaza cozi daca nu are loc liber in storage)

Forma generala: enter <a>,<b> <a> = numele sau numarul entitatii storage (este obligatoriu) <b> = numarul care va scadea capacitatea disponibila a entitatii storage (este optional si valoarea default este 1) -------------------------------------------------------------------------------------------------------------------------------------leave <a>,<b> are aceeasi forma generala ca enter <a> = numele entitatii storage (este obligatoriu) <b> = cate unitati se elibereaza din storage (este optional cu default 1) -------------------------------------------------------------------------------------------------------------------------------------transfer este blocul care determina saltul unei tranzactii la un alt bloc Forma generala: transfer <a>,<b>,<c>,<d> <a> = modul de transferare (este optional iar daca lipseste transferul se face neconditionat la blocul cu eticheta b) (functioneaza ca blocul goto) <b>,<c>,<d> = etichete de blocuri si sunt toate optionale -------------------------------------------------------------------------------------------------------------------------------------table initializeaza o histograma Forma generala: [eticheta] table <a>,<b>,<c>,<d> (toti parametrii sunt obligatorii) [eticheta] = element obligatoriu si reprezinta numele histogramei <a> = argumentul histogramei, care furnizeaza datele pentru distributia de frecventa <b> = limita superioara a clasei de frecventa <c> = lungimea unei clase de frecventa <d> = numarul claselor de frecventa --table se scrie la inceputul programului inainte de generate, nu trebuie sa treaca nici o tranzactie prin el. -------------------------------------------------------------------------------------------------------------------------------------tabulate Forma generala: tabulate <a>,<b> <a> = numele histogramei (este obligatoriu) <b> = ponderea adica cu cate unitati va creste un dreptungi din histograma (este optional si are default 1) --Trebuie sa fie executat de o tranzactie. --In momentul in care o tranzactie executa blocul tabulate, este evaluata expresia <a> de la table pentru a vedea in ce

clasa de frecventa se incadreaza valoarea respectiva. -------------------------------------------------------------------------------------------------------------------------------------m1 = se traduce ca timpul trecut de la generarea tranzactiilor -------------------------------------------------------------------------------------------------------------------------------------Codul: hist table m1,100,100,20 centrala storage 3 generate 100,60 reincearca gate snf centrala asteapta enter centrala advance 180,60 leave centrala tabulate hist queue fax seize fax depart fax advance 600,180 release fax terminate 1 asteapta advance 300,60 transfer ,reincearca Problema: La un depozit cu o capacitate de 2000 se fac 2 operatii, se aduc materiale in depozit si se scot materiale din depozit. Initial exista 1000 de unitati in depozit. Depunerea de materiale se face o data la 5 zile astfel: daca exista mai mult de 800 unitati in depozit, depunerea este respinsa, daca nu, se depun 1000-nr de materiale din depozit. Scoaterea de materiale se face in urma unei cereri zilnice de un anumit numar ce poate lua cu aceeasi probabilitate valori intre 40 si 63. Simulati evolutia sistemului pentru 200 de zile. Sa se obtina o historgrama care descrie evolutia zilnica a numarului de unitati din depozit. -----------------------------------------------------------------------------------------------------------------------------------------------Blocuri: variable - se defineste o expresie FN: [eticheta] variable [expresie] Se foloseste de obicei inaintea primului generate pentru a folosi expresia se foloseste v$eticheta.

-----------------------------------------------------------------------------------------------------------------------------------------------test - intructiune/bloc care compara valori si controleaza destinatia tranzactiei active pe baza rezultatului. FN: test o a b c o - operator relational obligatoriu (poate fi 2,e,g,ge,l,le,ne) a,b - valorile testate obligatorii; c - etichetat de bloc se verifica rel a, o, b daca e adevarat trece mai departe, daca nu e in relatie cu b, iar c exista se face saltul la c, daca c nu exista se asteapta pana cand a este in relatie cu b -----------------------------------------------------------------------------------------------------------------------------------------------assign - este un bloc folosit pentru a a atribui sau modifica valoarea unui parametru al tranzactiei FN: assign a b c a - numele parametrului tranzactiei active, este obligatoriu b - o valoare nume, numar, string etc., este obligatorie c - nume de functie, este optional Primul parametru poate fi urmat de + sau -, in cazul in care este urmat de + la valoarea parametrului cu numele a se adauga b (a = a + b) iar in cazul - a = a - b Pentru a recupera valoarea parametrului se scrie p$[numele parametrului] -----------------------------------------------------------------------------------------------------------------------------------------------s$ reprezinta numarul de unitati dintr-un storage rm1 este generatorul de numere aleatoare cu numarul 1 si genereaza numere intregi cuprinse intre 0 si 999 In GPSS in locul operatorului % (modulo) se foloseste @. a@b reprez restul impartii lui a la b. Va fi nevoie de un numar aleator de la functia random() in cariera de programator -----------------------------------------------------------------------------------------------------------------------------------------------Codul problemei: scadere variable 1000-s$depozit aleator variable rn1@24+40 hist table s$depozit,100,100,20 depozit storage 2000 generate 5 test g s$depozit,800 depunere terminate 0

depunere enter depozit,v$scadere terminate 0 generate 1 assign extragere,v$aleator test ge s$depozit,p$extragere,pleaca leave depozit,p$extragere pleaca tabulate hist terminate 0 generate 7 terminate start 5 terminate 1 PROBLEMA La un atelier de reparatii calculatoare exista un angajat care trebuie sa faca urmatoarele operatii: - revizia calculatoarelor din atelier - reparatii de lunga durata pentru calculatoarele clientilor care sosesc la atelier - reparatii de scurta durata pentru calculatoarele clientilor care sosesc la atelier Revizia calculatoarelor detinute de atelier incepe la fiecare 40 +/- 8 ore si dureaza 10 +/- 1 ora. Reparatiile de scurta durta au cea mai mare prioritate, sosesc la fiecare 90 +/- 10 minute si dureaza 15 +/- 5 minute. Reparatiile de lunga durata au o prioritate mai mare decat reviziile, sosesc la fiecare 5 +/- 1 ora si dureaza 120 +/- 30 minute. Simulati functionarea departamentului timp de 50 de zile. Determinati utilitatea angajatului. Determinati si reprezentati grafic sub forma de histograma statisticile pentru urmatorii timpi de asteptare: coada la revizie, reparatiile de lunga durata, de scurta durata si coada generala pentru care sunt luati in considerare toti timpii de asteptare indiferent de serviciul ii sunt asociati. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------qtable este o comanda care defineste o histograma asociata unei enititati queue. Forma generala: <eticheta> qtable a, b, c, d eticheta - este obligatorie si reprezinta numele histogramei a - este obligatoriu si reprezinta numele entitatii queue pentru care se construieste histograma restul la fel ca table Perechea lui qtable este depart <nume tabel> qtable poate fi folosit oriunde in program si colecteaza date automat(nu are nevoie de tabulate) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------preempt simuleaza intrarea unei tranzactii la un serviciu cu un singur punct de servire dupa ce in prealabil a fost indepartata tranzactia care eventual ocupa acel serviciu Forma generala: preempt a, b, c, d, e a - este obligatoriu si reprezinta numele facilitatii a carei ocupare se simuleaza b - este un operand care semnifica modul in care este indepartata tranzactia care ocupa initial facilitatea. Poate fi pr sau poate sa lipseasca

Daca este pr atunci indepartarea se face in functie de prioritate. Daca lipseste si facilitatea este ocupata de o tranzactie prin preempt atunci tranzactia activa asteapta c - este optional si reprezinta eticheta blocului la care este trimisa tranzactia care ocupa initial facilitatea. Daca lipseste tranzactia respectiva va ramane in asteptare pana la eliberearea facilitatii d - este optional si reprezinta numele unui parametru asociat tranzactiei care ocupa initial facilitatea. In acest parametru este memorat timpul rezidual e - este optional si poate fi re sau sa lipseasca. Daca este re tranzactia nu se mai poate intoarce la facilitate si in acest caz c devine obligatoriu Perechea lui preempt este return si un singur parametru, numele facilitatii. preempt poate inlocui seize ----------------------------------------------------------------------------------------------------------------------------------------------------------------------fr$<nume facilitate> reprezinta gradul de utilizare al unei facilitati si ia valori intre 0(deloc utilizat) si 1000 (utilizat non-stop) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------Codul problemeI: histograma_generala qtable coada_generala 10,10,20 histograma_revizii qtable coada_revizii 10,10,20 histograma_lunga qtable coada_lunga 10,10,20 histograma_scurta qtable coada_scurta 10,10,20 generate 2400,480 queue coada_generala queue coada_revizii seize angajat depart coada_generala depart coada_revizii advance 600,60 release angajat terminate 0 generate 90,10,,,3 queue coada_generala queue coada_lunga preempt angajat,pr depart coada_generala depart coada_lunga advance 15,5 return angajat terminate 0 generate 300,60,,,2 queue coada_generala queue coada_scurta preempt angajat,pr depart coada_generala

depart coada_scurta advance 120,30 return angajat terminate 0 generate 480 terminate 1 Problema Intr-o linie de productie robotizata lucreaza doua masini secventiale si un robot care deplaseaza componentele de la punctul de sosire la prima masina, de la prima masina la a 2 a masina si de la a doua masina la iesirea din acest spatiu de productie. Timpul intre sosirile componentelor la aceasta linie de productie este distribuit exponential cu o medie de 150 secunde. Componentele sunt prelucrate secvential mai intai de prima masina si apoi de cea de a 2 a masina. Robotul are nevoie de 8+- 1 sec pentru a prinde sau elibera componentele. De asemenea robotul are nevoie de 6 sec pentrui a aduce componentele din zona sosirilor pana la prima masina, 7 sec pentru a duce componentele de la prima masina la a 2 a masina si 5 sec pentru a duce componentele de la a 2 a masina pana in zona componentelor prelucrate. Timpul de prelucrare al primii masini de distribuit normal cu o medie de 60 sec si o deviatie standard de 10 sec, iar timpul de prelucrare al celei de a 2 a masini e distribuit exponential cu o medie de 100 sec. Sa se simuleze functionarea liniei de productie pentru 75 de componente. Sa se determine distributia timpului necesar ca o componenta sa fie prelucrata, utilizarea roboltului si a celor 2 masini, timpul mediu pe care il asteapta fiecare componenta in fiecare etapa de prelucrare. generate (exponential(1,0,150)) genereaza o data la 0=originea 150=media Pentru asteptare : advance (normal(1,60,10)) 1=generatorul de nr aleatoare 60=media 10=deviatia standard ----------------------------------------------------------------------------------------------------------------------------------------------------------------------Codul problemei: histograma table m1,100,100,20 generate (exponential(1,0,150)) queue coada_robot seize robot depart coada_robot

advance 8,1 advance 6 advance 8,1 release robot queue coada_masina1 seize masina1 depart coada_masina1 advance (normal(1,60,10)) release masina1 queue coada_robot seize robot queue coada_robot advance 8,1 advance 7 advance 8,1 release robot queue coada_masina2 seize masina2 depart coada_masina2 advance (exponential(1,0,100)) release masina2 queue coada_robot seize robot depart coada_robot advance 8,1 advance 5 advance 8,1 release robot tabulate histograma terminate 1 Problema Un atelier de reparatii are 3 departamente. Clientii sosesc la fiecare 20 de minute. Atunci cand un client soseste la atelier lasa la receptie aparatul care doreste sa fie reparat. O persoana de la primul departament vine si ia aparatul de la receptie pentru a incepe reparatia. Dupa ce produsul a fost reparat, il readuce la receptie de unde va fi preluat de cineva din departamentul 2. Dupa ce si aceasta persoana a terminat reparatia va duce aparatul la receptie pentru a fi preluat de cineva din departamentul 3. Odata ce produsul a trecut de departamentul 3 acesta va fi returnat la receptie apoi clientul pe care la adus. In departamentul 1 lucreaza 8 angajati iar reparatiile dureaza 62 de minute. In departamentul 2 lucreaza 23 de angajati iar reparatiile dureaza 184 de minute. In departamentul 3 lucreaza 16 angajati iar reparatiile dureaza 128 de minute. Exista 20% sanse ca aparatul

odata ajuns la un departament sa se constate ca nu sunt necesare reparatii in acel departament caz in care aparatul va fi returnat la receptie imediat si va astepta sa fie preluat de urmatorul departament. Timpul necesar unui angajat ca sa mearga la receptie este de 3 minute initial 30 de produse se afla la receptie si asteapta intrarea in departamentul 1, 40 asteapta pentru departamentul 2 si 35 pentru departamentul 3. Simulati activitatea atelierului pentru 5 zile considerand ziua avand 8 ore. Construiti cate o histograma care sa arate numarul de aparate ce asteapta la fiecare dintre cele 3 departamente in fiecare ora. Afisati grafic utilizarea angajatilor din fiecare departament. Precizati cate cozi de asteptare se formeaza in acest model si colectati date despre aceste cozi. transfer a,b,c a este un numar intre 0 si 1 b si c sunt etichete de bloc Exemplu: transfer 0.3,b,c -> 30% din tranzactii se duc in c iar restul in b, daca b sau c lipseste se trece mai departe ------------------------------------------------------------------------------------------------------------------------------------------------------savevalue a,b a este numele entitatii savevalue b este valoare pe care o va lua acest savevalue a poate fi urmate de semnul + sau -, in cazul + se va adauga b iar in cazul - se va scadea b ------------------------------------------------------------------------------------------------------------------------------------------------------Codul problemei: hist1 table x$asteptare1,10,10,20 hist2 table x$asteptare2,10,10,20 hist3 table x$asteptare3,10,10,20 generate 20 dep1 storage 8 dep2 storage 23 dep3 storage 16 queue coada1 enter dep1 savevalue asteptare1-,1 depart coada1 transfer 0.2,,l1 advance 62 l1 leave dep1 advance 3

savevalue asteptare2+,1 queue coada2 enter dep2 savevalue asteptare2-,1 depart coada2 transfer 0.2,,l2 advance 184 l2 leave dep2 advance 3 savevalue asteptare3+,1 queue coada3 enter dep3 savevalue asteptare3-,1 depart coada3 transfer 0.2,,l3 advance 128 l3 leave dep3 advance 3 terminate generate 480 terminate 1 generate 60 tabulate hist1 tabulate hist2 tabulate hist3 terminate generate ,,,1 savevalue asteptare1,30 savevalue asteptare2,40 savevalue asteptare3,35 Tema pentru 10 la testul de pe 21.05: Sa inceapa munca departamentul 2 si departamentul 3 in acelasi timp cu departamentul 1... si sa isi faca norma de 40 respectiv 35. Exemplu: Un supervizor supervizeaza muncitorii apoi se retrage iar toata munca se opreste. Intra un alt supervizor si munca reincepe doar pentru produsele noi din receptie. Faceti astfel incat cand intra un nou supervizor munca sa se rezume la ultimele produse la care se lucrau. Ar trebui sa se adauge 6 linii de cod la cel de sus pentru a rezolva problema. Biletul nr. 9 O benzinarie are doua pompe de benzina. Clientii sosesc la fiecare 5-10 minute iar o alimentare dureaza intre 3 si 11 minute. Cand clientii sosesc la benzinarie, se aseaza la pompa la care coada este cea mai scurta (atentie! Nu la pompa care se va elibera prima!). Daca ambele cozi sunt mai lungi de 4 persoane clientul pleaca.

Se cere sa se reprezinte grafic utilizarea celor doua pompe pe o perioada de 5 zile precum si numarul de clienti pierduti in aceasta perioada. histograma_coada1 qtable coada1 10,10,20 histograma_coada2 qtable coada2 10,10,20 generate 7.5,2.5;foarte bine, clientul = tranzactia queue coada1 ;nu aici, ca astfel bagi in ambele cozi persoanele queue coada2 test g q$coada1,4 iesire;aici e mai complicat, trebuia mai intai sa determini pompa la care te asezi ;trebuia sa ai ceva de genul test l q$coada1,q$coada2,folosestePompa2 ; si imediat dupa sa faci verificarea daca sunt mai mult de 4 la coada apoi sa faci intrarea in coada1 si sa ocupi pompa1. ;nu ai prins ideea test g q$coada2,4 iesire seize pompa1 ;in nici un caz nu e asa. Daca pui asa, ocupi AMBELE pompe. Nu te ajuta cu nimic seize pompa2 depart coada1 depart coada2 advance 7,4;e corect release pompa1 release pompa2 iesire terminate 1; in nici un caz nu ai terminate 1 aici. Nu numeri masinile. Opresti simularea dupa 5 zile, trebuie sa ai un generate separat in care sa numeri zile/ore/timp. ;nu ai numarat clientii, se facea cu un savevalue. Grad de rezolvare 15% Motiv: Nu a folosit corect seize, nu a folosit corect terminate, nu a numarat masinile pierdute, nu a folosit corect queue. mda yo am luat 10% =))) un felk de nota 1 .. trebuie sa ma prezint din nou... deci nu e de gluma... si tot dak sunteti curiosi am scris si codu asta :; problema 13, email: balan.alexandru90@yahoo.com (7) hist qtable coada1 10,10,20;gresit domnule, si sintaxa si ce masori. Nu am cerut histograme cu timpii de asteptare la sectorul de drum ingustat.. Nu este gresit dar nu faci ce se cere (histograma cu nr de masini, care se face cu table normal si un savevalue) hist qtable coada2 10,10,20 generate 5;ok queue coada1;ok preempt strada,pr,ambulanta ;Toate preempturile tale functioneaza ca niste seizeuri, ai aceeasi

prioritate la tranzactii. De altfel aici este foarte gresit ce faci. Nu ai inteles paramentru C al lui preempt si nici nu era nevoie de el. depart coada1 advance 2,1;ok return strada terminate generate 3;ok queue coada2 preempt strada,pr,ambulanta;foarte gresit depart coada2 advance 2,1;ok return strada terminate ambulanta generate 60;FOARTE gresit sa transferi ceva la generate! preempt strada,pr;aici trebuia preempt, dar daca ai pus sus preempt si aici nu ai dat prioritate...degeaba advance 2,1;ok return strada;ok tabulate hist;nu se face tabulate aici, si in nici un caz nu se face tabulate la qtable terminate generate 720;aici e bine terminate 1 Grad de rezolvare 10% problema 4, email: giriuta_robert@yahoo.com (47) hist table m1,100,100,20 carusel storage 12; bun, 12 facilitati care functioneaza in paralel generate 30;corect reincearca gate snf carusel asteapta;aici lipseste o virgula, dar e corect enter carusel;corect; advance 480;ei aici iti lipseste o smecherie, trebuia sa astepti sa se umple caruselul, altfel omul sta in carusel 8 minute is pleaca leave carusel;ok tabulate hist;este ok pus tabulate, dar histograma nu e corecta. Este o coincidenta faptul ca aici e tabulate, histograma ta masoara altceva decat trebuie terminate 1; nu asa. Nu trebuie sa numaram clientii, trebuie sa rulam programul 12 ore, deci mai trebuie un generate in care sa il folosim ca ceas (vezi laboratorul 4). asteapta advance 900;foarte bine aici, pozitionat corect si timpul corect transfer ,reincearca;excelent Grad de rezolvare 65%

Motiv: In afara de histograma, ce ai scris e corect si are sens, bravo!(+) Lipseste partea in care sincronizezi cei 12 ocupanti ai caruselului(-), astfel incat sa se dea jos toti in acelasi timp. Asta se facea cu un gate SF carusel, care bloca tranzactia curenta pana cand caruselul era plin. Lipseste histograma Lipseste numaratoarea clientilor Problema 4 histclienti table s$carusel,10,10,20;aici trebuia sa folosesti assign ca sa numeri de cate ori e transferat la revenire si sa tabulezi la sfarsit. carusel storage 12;corect generate 30; bun reincarcare gate snf carusel ,revine;bun enter carusel ;bun gate sf carusel;Bravo! perfect, asa blochezi oamenii, asteapta umplerea caruselului advance 480;bun leave carusel;bun revine advance 900;aici ai sfeclit-o, trebuia sa muti asta jos, dupa terminate, ca sa nu reintre pe aici :) transfer ,reincarcare; corect, f bine tabulate histclienti; e bun pus tabulate dar table e gresit, deci nici pe asta nu il iau in considerare terminate 1;aici ai gresit, nu ma intereseaza numarul de clienti servicici timpul. email : r3d_bull90@yahoo.com (24) Nume: Dieaconescu Cristian Grad de rezolvare: 85% Motiv: Ceea ce ma interesa, acel gate de dupa enter, este facut(+) Ai gresit histograma(-) Ai pus gresit codul pentru revenire(-) problema 4? Balan Alexandru? balan.alexandru90@yahoo.com histcl table s$carusel,100,100,20; trebuia sa definesti un parametru pe care sa il incrementezi de fiecare data cand il trimiti la blocul pleaca si pe ala sa il tabulezi ;corect era: hist table p$incercari,100,100,20 (desi ai fi putut sa pui ceva mai uman gen 1,1,20 pentru ca erau incercari:D) carusel storage 12 generate 30 reload gate snf carusel,pleaca enter carusel gate sf carusel advance 480

leave carusel tabulate histcl; Aici se tabula, e corect, dar nu ai facut ce trebuie la table terminate pleaca advance 900 ;assign incercari+,1 transfer ,reload generate 43200 terminate 1 Grad de rezolvare 90% Motiv: Totul perfect, mai putin histograma si implicit savevalue generate 58 ;se creaza tranzactii la fiecare 58 de unitati de timp queue coada ;masoara coada care eventual se formeaza seize benzina ;tranzactiile incearca sa acopere facilitatea "benzina", se formeaza o coada iar tranzactiile se aseaza in acea coada depart coada ;marcheaza iesirea din coada a unei tranzactii advance 51 ;asteapta 51 de unitati de timp release benzina ;elibereaza facilitatea "benzina" terminate 1 ;marcheaza incheierea duratei de viata a tranzactiei create, si deconteaza un contor generate 60 ;se creaza tranzactii la fiecare 58 de unitati de timp queue coada ;masoara coada care eventual se formeaza seize benzina ;tranzactiile incearca sa acopere facilitatea "benzina", se formeaza o coada iar tranzactiile se aseaza in acea coada depart coada ;marcheaza iesirea din coada a unei tranzactii advance 40 ;asteapta 40 de unitati de timp release benzina ;elibereaza facilitatea "benzina" terminate 0 ;marcheaza incheierea duratei de viata a tranzactiei create, si deconteaza un contor generate 40 queue coada2 ;masoara coada care eventual se formeaza seize motorina ;tranzactiile incearca sa acopere facilitatea "benzina", se formeaza o coada iar tranzactiile se aseaza in acea coada depart coada2 ;marcheaza iesirea din coada a unei tranzactii advance 40 ;asteapta 40 de unitati de timp release motorina ;elibereaza facilitatea "benzina" terminate 1 ;marcheaza incheierea duratei de viata a tranzactiei create, si deconteaza un contor generate 33,8 ;se creaza tranzactii la fiecare 58 de unitati de timp queue coada ;masoara coada care eventual se formeaza seize benzina ;tranzactiile incearca sa acopere facilitatea "benzina", se formeaza o coada iar tranzactiile se aseaza in acea coada depart coada ;marcheaza iesirea din coada a unei tranzactii advance 40 ;asteapta 40 de unitati de timp release benzina ;elibereaza facilitatea "benzina" terminate 1 ;marcheaza incheierea duratei de viata a tranzactiei create, si deconteaza un contor

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