Proceduri Computationale Si Structuri de Date

Introducere

Prezentarea temei

Aflată la intersecția dintre mai multe discipline ( Cibernetică Economică, Informatică, Modelarea și Simularea Proceselor Economice ), tema aleasă reprezintă un mod de integrare și aplicare a cunoștințelor și rezultatelor din mai multe arii de specialitate, facilitând în același timp o interacțiune accesibilă oricărui tip de utilizator, atât pentru datele introduse în sistem cât și pentru rezultate.

Principala componentă a lucrării, cea pe baza căreia sunt făcute analizele asupra felului în care interacționează entitățile din model și analizele intrări-ieșiri, este programul construit cu ajutorul limbajelor și tehnologiilor specifice motorului grafic ales. În speță, este vorba de concretizarea grafică bi-dimensională a unui model cibernetic bazat pe agenți prin care se dorește aproximarea realității, în scopul simulării și optimizării cozilor de așteptare multiple pe un orizont de timp dat.

Prima etapă a întregului proces o reprezintă introducerea input-urilor sub format numeric, sau prin selectarea distribuției de probabilitate a sosirilor. Aceste distribuții sunt specifice felului în care agenții intră în sistem, urmând forma celei alese. De exemplu, se poate simula un mod de sosire de formă triunghiulară, presupunând că mijlocul orizontului de simulare este o oră de vârf, iar în afara acesteia sosirile tind să descrească într-o manieră liniară.

A doua etapă, incepută după pregătirea valorilor inițiale, presupune simularea grafică propriu-zisă din perspectiva “Top-down” , la diferite viteze de parcurgere ( de la 1 până la 100 ) a incintei unui complex comercial, cu elemente fizice și interacțiuni dinamice reprezentate sugestiv.

În a treia etapă, odată cu terminarea completă a pasului de simulare pe un timp dat, se vor afișa diverse date specifice agenților și sistemului, ce ajută la compararea tipurilor diferite de scenarii care pot fi realizate, precum și un indicator de performanță exprimat ca o valoare numerică ce trebuie maximizată.

În etapa a patra, se realizează o multitudine de simulări folosind aceiași parametri, în scopul obținerii unor valori medii semnificative, după care se compară rezultatele cu cele obținute în urma rulării unor scenarii diferite.

Modul în care sunt procesate datele de intrare este alcătuit dintr-o serie de algoritmi și etape specifice în care se desfășoară operații asupra unor structuri de date, pentru a imita cât mai bine lumea reală.

Motivația alegerii temei

Odată cu dezvoltarea tehnologiei și a puterii de calcul, majoritatea metodelor de simulare, previzionare și modelare se fac cu ajutorul echipamentelor informatice ce rulează produse software specializate. În prezent, tendința tehnicilor de această natură se orientează spre metode nedeterministe, cum ar fi modelarea bazată pe agenți.

Motivația principală a alegerii temei o reprezintă necesitatea construirii noilor soluții și moduri de analză și modelare bazată pe simularea computerizată, având avantajul de a reda atât într-o dimensiune vizuală,, cât și într-o dimensiune matematică prin intermediul outputurilor.

Scopul simulării, pe lângă posibilitatea de vizualizare propriu-zisă, este optimizarea numărului de cozi de așteptare folosind date statistice și indicele de performață calculate pe baza lor. Odată ajuns in etapa de inițializare, utilizatorul va putea alege numărul de cozi de așteptare disponibile. După repetări pe diverse configurații, acesta va putea decide pe baza indicatorilor rezultați cea mai bună soluție din punct de vedere al costului.

Prezentarea tehnologiilor și uneltelor folosite

Programul este alcătuit dintr-un ansamblu de ferestre ce cuprinde o interfață de inițializare, una de simulare și una de afișare a outputului, realizate cu:

Platforma de reprezentare Unity3D versiunea 5.1.0 Personal Edition ce reprezintă motorul grafic, cu ajutorul căreia sunt prelucrate interacțiunile în mod automat interacțiunile fizice, cu ajutorul obiectelor de tip ,, RigidBody ” ce urmează rute de navigație pe o hartă virtuală generată ,,compile-time” și ,,run-time” numită ,,NavMesh”.

Limbajul de programare C#, ce funcționează pe baza versiunii .NET integrată cu platforma Unity3D

Diverse resurse grafice și texturi folosite pentru reprezentare – textura podelei, agenților, casieriei, etc.

Mediul integrat de dezvoltare Visual Studio 2013 Professional

Descrierea modelului cibernetic

Spațiul simulării privit ca un sistem adaptiv complex

Din punct de vedere al tipologiilor sistemelor, spațiul simulării, constituit din toate elementele ce pot fi privite ca entități computaționale sau informaționale poate fi privite ca un sistem adaptiv complex. Acest fapt este datorat atât proprietăților predefinite care stau la baza configurației de rulare, cât și a proprietăților emergente ce reies din urma interacțiunilor. Pe lângă acestea, este prezentă și o buclă feedback cu efect stabilizator.

Întregul sistem este în consecință un model de simulare bazat pe agenți, care urmeză caracteristicile generale ale unui sistem adaptiv complex, cu scopul de a maximiza și vizualiza anumite rezultate.

Un sistem adaptiv complex este un sistem complex care include unități planificatoare, deci unități care sunt orientate către atingerea unor scopuri care încearcă să exercite un anumit grad de control asupra mediului său înconjurător pentru a facilita atingerea acestor scopuri. 1

Pornind de la diverse definiții din literatura de specialitate 2, putem deduce că principalele caracteristici și proprietăți specifice acestor sisteme sunt :

Compunerea din agenți individuali

Agenții prezintă comportamente generate pe baza propriilor modele mentale

Agenții au model mental propriu sau comun cu ceilalți agenți

Modelele mentale ale acestora sunt dinamice, facilitând procese de învățare și adaptare

Unele interacțiuni dintre agenți pot fi integrate în alte sisteme

Interacțiunile dintre agenți sunt cele care generează comportamentul general al sistemului

Interacțiunile dintre agenți determină schimbarea reciprocă de stare

Întreg sistemul poate dobândi noi comportamente

Sistemul prezintă neliniaritate

Caracteristicile sistemului au o caracteristica impredictibilă

Elementul de noutate este dedus din comportamentul de ansamblu

Este prezentă auto-organizarea

În continuare, vom detalia aceste caracteristici și vom exemplifica felul în care funcționează în cadrul sistemului simulării, surprinzând aspecte semnificative ce conduc la această concluzie.

În materie de agenți individuali, sistemul este compus din entități informatice reprezentate la nivel grafic prin intermediul texturilor, entități ce prezintă un ciclu de viață, de la intrarea în sistem până la ieșirea și distrugerea lor din memorie. Tipurile de agenți prezenți sunt menite să abstractizeze persoanele care achiziționează produse sub form agenților reactivi, precum și stațiile, privite un tip de agenți cu funcție informațională sub forma meta-agenților. Unul dintre parametri de intrare inaccesibili ai sistemului setează în mod aleator locația unde aceștia intră în sistem, reprezentată grafic sub forma intrării în complexul comercial.

Modelul mental al acestora este unul ce ține seamă de ceilalți agenți, fie că este vorba de interacțiuni fizice sau interacțiuni pur informaționale cum sunt cele de decizie asupra locului de stat în coadă, fiecare agent sub formă de cumpărător fiind inițializat cu un scop propriu, adică cel al efectuării cumpărăturilor și ieșirii din magazin într-un timp cât mai scurt.

Odată ce este creat un nou agent pentru a simula activitatea unei persoane, acesta primește un coș de cumpărături împreună cu locațiile din incintă la care va trebui să meargă, simulând astfel comportamentul unei persoane reale. În cadrul funcției de atingere a scopului, aceștia se vor deplasa la diverse locații și vor interacționa cu mediul, format din reprezentarea grafică a raioanelor sau locațiilor unde sunt prezente produse. Odată ajunși la locația respectivă, vor deveni staționari pentru un timp predefinit în parametri de intrare, după care vor relua ciclul până când vor atinge numărul de produse cumpărate setat la inițializare.

După terminarea ciclului vor merge către o zonă de alocare, ascunsă utilizatorului, aici fiind repartizați pe baza unui algoritm ce cunoaște starile tuturor cozilor de așteptare în vederea luării deciziei optime. Ajunși în coadă, simularea urmează un curs natural al deplasărilor, cei care termină parcurgând distanța până la ieșire, iar cei care sunt încă prezenți în coadă mutându-se într-un loc mai apropiat de stație.

Un aspect important al comportamentului agenților îl constituie posibilitatea de a abandona, decizie luată de către agent atunci când, între timp, coada se umple, astfel facilitând comportamentul de adaptare și învățare. Deoarece acesta decide că va aștepta prea mult timp la coadă, renunță la produsele cumpărate și se îndreaptă spre ieșire. Acest tip de comportament este relevat prin indicatorul de abandon de la sfârșitul simulării, fie în valoare absolută, fie dedus procentual din numărul total de agenți intrați în sistem.

Un alt tip de comportament expus este cel al agenților care decid să nu intre deloc în incintă, din cauza aglomerației prea mari care ar genera traiectorii nedorite și nefirești ale sistemului. Astfel, dacă aceștia vor considera că numărul de agenți din interior este mai mare decât un parametru predefinit, nu vor intra în sistem și deci nu vor fi considerați ca făcând parte din numărul total al agenților calculat în ultima fereastră a simulării.

Modelul mental al fiecărui agent este compus și dintr-o mulțime de stări, dintre care numai una este activă la un anumit momen. Stările pe care un agent le poate avea sunt relevate de stadiul la care se află, ca de exemplu cel de așteptare la coadă sau cel de a se deplasa spre locația de unde inteționează să achiziționeze un nou produs.

Privit ca un unui model multi-agent, arhitectura se poate constitui sub forma agenților reactivi – persoanele și meta-agenților – stațiile care dețin informații despre starea generală a persoanelor, acționând deci ca un agent de cunoaștere socială.

Printre caracteristicile prezentate de către agenții reactivi se pot enumera autonomia, adaptabilitatea, reactivitatea, mobilitea, sociabilitatea și inteligența. Pe de altă parte, meta-agenții prezintă un alt set de caracteristici, printre care cel mai important este realizarea funcției informaționale, de primire și transmitere a informației.

Mediul fizic informațional, cel ce definește principiile și procesele care dirijează și facilitateză existența unei populații de entități, este reprezentat din mai multe elemente:

marginile spațiului navigațional disponibil reprezentat sub forma unor bariere fizice

raionele sau spațiile de cumpărături cu care agenții interacționează pentru cumpărături ( în sensul că odată ajunși la locația stabilită sunt puși într-o stare de așteptare temporară )

alte elemente statice din sistem, cum ar fi reprezentarea fizică a stațiilor și locațiile unde aceștia vor aștepta în coadă în funcție de ordinea lor.

Accesibilitatea, măsura în care un agent își cunoaște mediul este reprezentată de totalitatea zonelor în care acestuia îi este permis să călătorească, locații determinate în program în mod static, adică la compilare. Pentru a se deplasa la o anumită coordonată, acesta va călători numai pe spațiul permis de către componenta NavMesh a solului.

Controlabilitatea, sau măsura în care agentul poate modifica mediul, este în acest caz nulă, acestora nefiind permise operații care să afecteze permanent mediul.

Din punct de vedere al temporalității, toate acțiunile se desfășoară într-un spațiu continuu, limitat numai de către viteza procesorului și numărul de evaluări executate pe secundă de către motorul grafic ( în general, mai mare de 60 de cadre pe secundă ).

De asemenea, dintre caracteristicile importante prezentate de către mediu, acesta nu permite plasarea simultană a doi agenți în același spațiu, aceștia evitându-se atunci când o coliziune este iminentă.

Comunicarea inter-agent, sub forma transferului de informații și determinării de comportamente pe baza lor, se realizează intre agenții reactivi și cozile de așteptare, aceștia trecând mai întâi printr-un process de alocare realizat de o entitate pur informațională, care doar calculează coada disponibilă cu timp minim de așteptare și transferă dialogul cu agentul către coada respectivă. Protocoalele de comunicație sunt reprezentate sub forma unor proceduri sau funcții ce activează anumite comportamente la apariția evenimentelor. Un exemplu reprezentativ ar fi că, atunci când un agent termină de stat la coadă, următorului agent îi este schimbată starea pentru a reflecta faptul că devine primul în coadă. După această operație, verificând schimbarea de stare, meta-agentul poate determina avansarea în coadă a tuturor agenților prezenți, schimbându-și în același timp propria stare într-una ce deține un loc liber în plus.

Conectivitatea și inter-dependența sunt deci asigurate de către regulile simple care guvernează comportamentul agenților, fie că e vorba de interacțiuni între agenți sau între agenți și mediu.

Coevoluția în acest context este dată în mare parte de felul cum agenții reacționează la întâlnirea celorlalți, precum și de felul în care se evidențiază un proces de peisaje cuplate, deformate, în care mișcările adaptive ale fiecărei entități schimbă peisajele vecinilor săi. 3

Explorarea spațiului posibilităților se produce atunci când agenții iau decizii cum ar fi cea de a abandona sau nu sistemul din cauza timpului de aștepare prea mare la coadă. Aceștia sunt deci supuși unei alegeri ce determină bifurcații ale sistemului, prin optimizarea utilității individuale. Având în vedere acest lucru, schimbări și decizii minore la nivel de agent se reflectă asupra întregului sistem prin crearea unei noi stări de aglomerație ce nu mai permite fie intrarea altor agenți în sistem, fie abandonul unora dintre ceilalți agenți.

Din punct de vedere al auto-organizării și emergenței, sistemul prezintă caracteristici prin stările generale pe care poate să le aibă în intervale diferite de timp. În urma aplicării regulilor generale, sistemul se auto-organizează din punct de vedere al menținerii funcționării și fiabilității, evitând o incintă atât de aglomerată ce produce imposibilitatea de a se deplasa a unor agenți, sau oprirea completă a tuturor operațiilor. Proprietățile emergente reies din felul în care regulile locale permit apariția unor situații globale cum ar fi starea de aglomerație ce determină o funcționare mai lentă a tuturor proceselor desfășurate, sau starea în care cozile sunt libere, incinta fiind lipsită de un număr semnificativ de agenți.

Impredictibilitatea sistemului este dată de felul pur probabilistic după care sunt asociate locațiile de cumpărături cu produsele înregistrate la inițializare, fiind un proces incontrolabil. De altfel, timpul sosirii agenților nu poate fi cunoscut a priori, deoarece este un proces bazat pe șansa probabilistică dedusă din tipul distribuției alese. Acest lucru permite diversificarea traiectoriilor de rulare, care, deși urmează un tipar prestabilit al formei sosirilor, nu conferă alte informații temporale exacte, funcțiile de densitate de probabilitate fiind evaluate în timpul execuției , adică la run-time.

Această diversitate generată de modelul probabilistic asigură faptul ca două simulări nu vor fi la fel, chiar daca avem aceiași parametri de intrare, pentru oricât de multe rulări.

După cum se observă în fig 1.1 există și o buclă feedback specifică sistemului, cu rol stabilizator. Influența exercitată asupra inputului de către o parte a outputului este constituită aici de limitarea numărului de agenți ce intră în sistem, pe baza evaluării facute asupra stării curente. În termeni practici, rezultatul buclei de stabilizare produce inabilitatea sistemului de creare a unui număr ridicol de agenți, ce nu ar reprezenta felul în care un astfel de proces de simulare ar decurge în mod natural.

Bucla feedback identificată este reflectată în fig 1.1 cu ajutorul componentelor procesului circulare de evaluare:

Apariția evenimentului de atingere a intervalului de evaluare a sosirilor, interval bazat pe datele de intrare furnizate de utilizator.

Evaluarea stării de aglomerație, prin verificarea numărului de agenți prezenți în incintă.

Luarea deciziei:

Dacă este atins numărul maxim de agenți, fluxul de control va urma bifurcația DA.

Dacă nu este atins numărul maxim de agenți, fluxul de control va urma bifurcația NU.

Așteptarea până la apariția următorlului eveniment.

Fluxul informațional pe parcursul orizontului de timp

Fig 1.1

Proceduri computaționale și structuri de date

2.1 Proprietățile agenților reactivi

Modelul cibernetic descris în cap. 1 are ca substrat computațional un ansamblu de structuri de date împreună cu o serie de proceduri sau funcții, create pentru a imita comportamente și proprietăți. Fie că este vorba de proprietăți accesibile, ce pot fi modificate prin interfața de inițializare, fie că este vorba de proprietăți ascunse ce sunt disponibile numai în cadrul programului și ajută la calculul și tranziția stărilor, toți agenții urmează un șablon din punct de vedere al conținutului informațional.

Unele dintre aceste proprietăți sunt sugestive pentru utilizator și au sens, cum ar fi timpul calculat până în acel moment de stat în coadă sau coșul de cumpărături, iar altele reprezintă informații ajutătoare, independente de ciclul simulării, ca de exemplu culoarea agentului sau stările intermediare ce conduc agentul spre ieșire odată cu terminarea statului la coadă.

Proprietățile agenților reactivi

Fig 2.1.1 – Sursă : “Scripts / Person.cs”

După cum se poate observa în figura de mai sus, fiecare agent prezintă acest set de caracteritici, ce vor fi prelucrate sau analizate atunci când ei trec prin diferite etape.

Proprietățile Renderer, NavMeshAgent și Color se încadrează într-un tip special, deoarece reprezintă componente specifice reprezentării grafice a agentului ( Color, Renderer ) și componente de navigație spațială ( NavMeshAgent, Transform ). La inițializare, culoare este setată cu ajutorul unei proceduri – Fig 2.1.2

Procedura de setare a culorii agenților – getNewColor

Fig. 2.1.2 Sursă: “Scripts/ Misc/ PersonColor.cs”

În vederea stabilirii stărilor agenților, avem o structură de date de tip enumerație care va avea o singură valoarea activă la un moment dat:

FinishedTotal este activă atunci când agentul a terminat de cumpărat toate produsele, urmând să se îndrepte spre zona de alocare.

FinishedItem este activă atunci cand agentul a terminat un singur produs, urmând să se îndrepte spre următoarea destinație.

Buying este activă atunci când agentul a ajuns la destinație, dar se află în așteptare la raionul unde i-a fost setată destinația.

Start este activă doar la început, în etapa de inițializare.

Waiting și WaitingFirstInLine sunt stări pe care agentul le dobândește atunci când, după alcarea în cadrul unei cozi, așteaptă pe locul destinat. Odată ajuns primul în linie, starea va fi transformată în WaitingFirstInLine.

ExitingIntermmediate1, ExitingIntermmediate2 și Exiting sunt stări specifice operației de ieșire din sistem, folosind locații intermediare pentru a seta ruta corectă a acestora.

Destinația curentă, stocată în currentDestination este accesibilă oricând în timpul rulării, reprezentând o structură de date de tip vector cu 3 elemente ce conține coordonatele spațiale de forma X – Y – Z ale următoarei destinații la care agentul trebuie să ajungă, specifice stării în care acest se află.

Timpul pe care un agent îl petrece cumpărând un produs, până în momentul curent este relevat prin variabila finishedTime de tip real, folosită doar pentru a păstra în contextul actual timpul scurs efectuând operația de cumpărare. Valorea acestei variabile are sens doar în stadiul în care starea activă este Buying și ajută astfel la efectuarea de comparații în vederea schimbării stării și trimiterii acestuia către o nouă locație.

Următoarele proprietăți, totalTimeInQueue și insideTime sunt sugestive, prima reprezentând timpul total pe care agentul îl petrece în coadă, iar a doua timpul petrecut în incintă. O altă variabilă, totalTimeFirstInQ , înregistrează doar acei timpi în care agentul este primul la coadă, pe baza ei făcându-se trecerea la următoarea stare, cea de ieișire. Este important de menționat că valoarea ei va fi specifică agentului, în funcție de mărimea coșului de cumpărături. Astfel, un agent ce are doar câteva produse va aștepta primul în linie un timp substanțial mai mic față de altul cu un număr mai mare de produse achiziționate. Toate variabilele menționate aici vor avea la etapa de inițializare valoare nulă, urmând să fie incremenetate pe măsură ce se efectuează prelucrări.

O altă variabilă ce conține informații asupra stării este hasAbandoned, inițializată cu valoarea de tip boolean falsă. Dacă pe parcursul execuției agentul va abandona, atunci aceasta va fi setată,true, fiind esențială pentru calculul statisticilor. Când agentul va fi distrus din memorie, odată cu ieșirea din sistem, variabila va fi evaluată și indicatorii finali vor fi ajustați prin incrementarea numărului de agenți ce au abandonat cu o unitate.

Cea mai importantă proprietate este reprezentată de coșul de cumpărături, numit Bucket ( Fig. 2.1.3 ), reprezentat în memorie de o structură de date special creată, prezentă într-un context separat al organizării obiectelor.

Structura de date a coșului de cumpărături

Fig. 2.1.3 – Sursă: “Scripts/ Managers/ PersonManager.cs”

Fiecare agent primește astfel, odată creat în memorie un coș de cumpărături, la rândul lui cu proprietăți specifice. În constructorul creat, observăm că acesta conține o listă de alte obiecte, numite Items ( Fig. 2.1.4 ), ce vor lua rolul numărului de produse pe care acesta intenționează să le achiziționeze, fiecare cu un număr specific de secunde pentru care va trebui să aștepte la coadă.

Structura de date a unui produs din coșul de cumpărături

Fig. 2.1.4 – Sursă: “Scripts/ Managers/ PersonManager.cs”

Segregarea structurilor de date prezentate este necesară pentru alocarea unui număr aleator de produse într-un coș de cumpărături dat, cu ajutorul unui interval alcătuit dintr-o valoarea minimă și una maximă. Intervalul de valori va putea fi specificat prin interfața de inițializare a programului.

Odată cu inițializarea unui obiect de tip Bucket specific unei persoane, aceasta primește și o variabilă întreagă ce conține numărul de produse, numită bucketCount.

Atribuirea se face după inițializarea obiectului, prin numărarea efectivă a elementelor din listă. Acest lucru ajută la ușurința preluării datelor, atunci când este nevoie să știm dacă agentul respectiv mai are de achiziționat vreun produs și în consecință să se deplaseze către o nouă locație.

2.2 Procedurile agenților reactivi

Printre principalele operații executate de agenți se regăsesc:

getClosestQAllocationArea

Această funcție execută găsirea celui mai apropiat punct de coordonate spațiale de zona ce începe procesul de alocare către o coadă.

Procedura getClosestQAllocationArea

Fig. 2.2.1 – Sursă: “Scripts/ Person.cs”

OnTriggerEnter

Odată ce agentul intră în spațiul fizic delimitat de către zona de alocare, dacă a finalizat toate operațiile de achiziție, atunci se folosește procedura allocatePersonToFittestQueue, descrisă la secțiunea meta-agenților. Dacă nu se reușește alocarea către o coadă, atunci agentului îi este schimbată starea într-o stare intermediară de ieșire, devenind astfel un agent ce a abandonat statul la coadă și fiind contabilizat în consecință.

Procedura de detecție a coliziunii onTriggerEnter

Fig. 2.2.2 – Sursă: “Scripts/ Person.cs”

startCountingQWaitTime

Ajuns in stadiul de a aștepta la coadă, se foloște o verificare periodică pentru a se observa dacă agentul încă prezintă starea de Waiting sau WaitingFirstInLine. În caz afirmativ, se incrementează timpul stocat în variabila totalTimeInQueue, după care firul execuției este oprit pentru o secundă, urmând ca după reluare să se efecueze aceeași verificare, tot procesul reluându-se până când agentul iese din starea de așteptare.

Procedura de numărare a secundelor petrecute în coadă startCountingQWaitTime

Fig. 2.2.3 – Sursă: “Scripts/ Person.cs”

startCountingInsideTime

Similar ca în situația cozilor, se înregistrează și un timp al agentului petrecut în incintă ce va avea valori în funcție de numărul de operații pe care le efectuează și în funcție de starea generală de aglomerație, în cazul în care există. Observația în acest caz este că lipsește condiția de oprire, deoarece acest ciclu se execută pe toată durata de viață a obiectului.

Procedura de numărare a secundelor petrecute în incintă startCountingInsideTime

Fig. 2.2.4 – Sursă: “Scripts/ Person.cs”

Ciclul de actualizare sau update ( Anexe –Person.cs ), ce se realizează de un număr mare de ori pe secundă, conține și el operații și metode ce au în vedere evaluarea unor expresii și tranziția stării curente către una nouă:

Verifică dacă agentul în starea Waiting a depășit timpul alocat așteptării la raft, și dacă este adevărat atunci starea este schimbată în FinishedItem.

Verifică dacă agentul este plasat primul în coadă și pornește procedura de numărare a secundelor, destinată doar stării de ocupare a primului loc în coadă.

Verifică dacă agentul este plasat în coadă dar nu este primul și pornește procedura de numărare a secundelor dacă evaluarea este adevarată.

Incrementează contorul global al agenților care au părăsit coada odată ce găsește un agent al cărei proprietăți hasAbandoned este setată ca adevărată

Generalizând pe baza acestor tipuri de comportamente, putem deduce un ciclu de viață al agenților, de la etapa de inițializare până la cea în sunt eliminați din memorie.

Diagrama tranziției stărilor agenților

Fig. 2.2.5

Proprietățile meta-agenților

Tipuri de agenți prezenți în scenariu se regăsesc și sub forma meta-agenților, entități ce dețin informații despre agenții reactivi și le influențează comportamentul, îndeplinind și o funcție de control. Meta-agenții ce pot apărea sunt de două feluri:

Entitatea informaționaă a cozii, ce conține o listă a persoanelor aflate în coadă și folosește funcții specifice pentru a produce înaintarea lor și schimbarea de stări.

Entitatea informațională a zonei de alocare, ce alocă o persoană către coada cu timpul minim de așteptare.

În cadrul inițializării acestor meta-agenți, se pot distinge următoarele proprietăți:

Proprietățile meta-agenților

Fig. 2.3.1 – Sursă: “Scripts/ Q.cs”

Proprietatea numberOfPersons, inițializată cu valoare nulă reprezintă numărul de persoane ce așteaptă în coada respectivă, la momentul evaluării.

Proprietatea isActivated reprezintă un câmp de tip boolean și stabilește dacă o coadă este activă sau nu. Acest lucru se determină prin verificarea numărului total de cozi selectat de către utilizator, agenții folosind doar acele cozi care au această proprietate trecută cu valoarea true.

Proprietatea speedToQslot stabilește viteza de deplasare a agenților reactivi, odată de aceștia ajung în stadiul de a fi alocați către una dintre cozi.

Numărul de locuri disponibile, este calculat folosind structura de date Slot (FIG). Fiecare dintre cele cinci cozi de așteptare disponibile au alocate la start un număr predefinit de zece obiecte de tip Slot, starea lor fiind accesibilă prin intermediul proprietății isOcuupied.

Structura de date a unui loc din coadă

Fig. 2.3.2 – Sursă: “Scripts/ Q.cs”

2.4 Procedurile meta-agenților

În principal, procedurile prezentate au rolul de a manipula sau accesa starea sau comportamentul agenților reactivi într-un mod centralizat, prin acest lucru stabilindu-se un grad de ordine al sistemului. Printre principalele proceduri se află:

getTotalWaitTime

Această procedură este folosită atunci când este nevoie de alocarea către coada cu timp de așteptare minim, de către entitatea ce deține funcția de management al alocării. Folosită pentru toate cozile disponibile, ne permite să comparăm timpii și să alocăm în acest fel într-un mod optim, agenții îndreptându-se spre coada cu timpul de așteptare minim.

Procedura getTotalWaitTime

Fig. 2.4.1 – Sursă: “Scripts/ Q.cs”

putPersonInQ

Odată ce o persoană este alocată catre o anumită coadă, atunci ea va fi plasată din punct de vedere fizic și informational, pe unul din locurile disponibile. Dacă se întâmplă ca locația găsita să fie exact poziția de la nivelul stației, adică nu mai sunt alte locuri ocupate, starea agentului va fi schimbată la WaitingFirstInLine, altfel fiind trecut doar ca Waiting.

Procedura de plasare a agenților în coadă putPersonInQ

Fig. 2.4.2 – Sursă: “Scripts/ Q.cs”

pushQslots

Această procedură va fi rulată atunci când este necesară deplasarea agenților la următoarea poziție din coadă, pe baza faptului că primul cumpărător a terminat și se va îndrepta spre ieșire.

Din fragmentul de cod se poate deduce că în primă instanță se elibereaza din vectorul slots prima poziție, după care se realizează o iterație asupra pozițiilor, transferând persoanele de pe poziția i la poziția i – 1. ( Fig. 2.4.3 )

Procedura de incrementare a poziției agenților pushQslots

Fig. 2.4.3 – Sursă: “Scripts/ Q.cs”

allocatePersonToFittestQueue

Fiind cea mai importanta dintre proceduri, aceasta aparține entității zonei de alocare și realizează repartizarea agentului către una dintre cozi în mod optim din punct de vedere al timpului de așteptare. Presupunând că avem două cozi diferite, cu număr diferit de agenți, acesta va fi repartizat către cea care are timpul de așteptare însumat al tuturor agenților minim, neținând cont de numărul lor. Procedura are ca rezultat o variabilă de tip bool , ce va deveni adevarată doar dacă se va reuși alocarea. Acest lucru este util pentru a determina dacă agentului i-a fost găsit un loc în coadă sau nu.

Procedura de incrementare a poziției agenților pushQslots

Fig. 2.4.4 – Sursă: “Scripts/ Managers/ QManager.cs”

Metode și principii de alocare

Metodele și principiile de așteptare folosite se referă la felul în care este gestionat întreg fluxul informațional, regulile pe care trebuie să le urmeze fiecare entitate ce efectuează operații. Aceste reguli sunt specifice cazului de simulare cu mai multe fire de așteptare, și se pot regăsi sub forma disciplinei de servire și a principiilor de procesare. Împreună, ele redau cursul firesc al acțiunii luat de activitățile dintr-o coadă de așteptare.

Discplina de servire ,,FCFS” ( First –come, first-served ) 4 este folosită pentru toate cozile active aflate din sistem și are ca mod de funcționare servirea primului agent din coadă, adică cel mai apropiat de ieșire. După cum este ilustrat și în Fig. 3.1, singurul criteriu după care se realizează procesarea îl reprezintă poziția în coadă, spre deosebire de alte principii ce țin cont de prioritatea agenților sau urmează o altă ordine ( SIRO – Service in Random Order, LCFS – Last-come, first-served ). Acest model este ales astfel încât să simuleze cât mai bine situația reală dintr-un centru comercial, urmând un raționament de tipul ,,Primul venit, primul servit”.

Disciplina de servire ,,FCFS”

Fig. 3.1

Din punct de vedere al realizării acestui procedeu folosind metode computaționale, se folosesc două dintre procedurile prezentate la secțiunea dedicată meta-agenților.

Prima procedură, numită pushQSlots ( Fig. 2.4.3 ), asigură avansarea agenților cu un loc odată ce unul dintre ei urmează sa iasă din sistem, eliberând în același timp ultimul loc din coadă ce obișnuia să fie ocupat.

Pe de altă parte, procedura allocatePersonToFittestQ ( Fig. 2.4.4 ) asigură influxul constant de persoane, acestea ocupând primul loc găsit disponibil în coadă, cât mai aproape de prima poziție. Împreună, acest ansamblu de proceduri asigură respectarea principiului teoretic la FCFS și conferă o dimensiune logică felului de aranjare a agenților.

Principiul direcționării către coada cu timp minim se referă la felul în care agenții decid plasamentul într-una dintre cozi, conform propriului model mental. Efectul este obținut cu ajutorul procedurii allocatePersonToFittestQ ( Fig. 2.4.4 ).

În primă instanță, persoana se marchează ca nealocată, indicele cozii cu timp minim este setat ca o valoare negativă, iar timpul minim dintre toate cozile găsite este setat ca infinit ( cel mai mare număr ce poate fi stocat într-o variabilă întreagă – int.MaxValue, Fig 3.2 ).

În a doua etapă, printr-o iterație efectuată asupra celor cinci cozi, dacă se identifică un timp de așteptare mai mic pentru coada specifică iteratorului curent, atunci timpul minim devine cel al cozii curente, iar indicele cozii de timp minim, numit shortestQueue devine egal cu indicele cozii curente. ( Fig 3.3 )

În ultima etapă, dacă acest indice nu a fost realocat, adică nu s-a găsit niciun loc liber în coadă, agentul este marcat ca abandon. În cazul în care s-a găsit o coadă cu timp de așteptare minim, este executată procedura putPersonInQ. ( Fig 2.4.2 )

Pentru a simplifica, sunt folosite proceduri ajutătoare cu scopul de a deduce informații triviale, așa cum este getTotalWaitTime ( Fig 2.4.1 ). O altă procedură folosită în acest sens este getSlotsAvailable, care are simplul rol de a evalua dacă o coadă are sau nu un loc disponibil.

Folosind aceste informații, putem deduce întreg fluxul informațional ce duce la stabilirea alegerii optime, de la stadiul în care agentul ajunge în zona de alocare, până când acesta iese din coadă.

Prima etapă a procesului de alocare

Fig. 3.2

A doua etapă a procesului de alocare

Fig. 3.3

4. Tehnici Monte-Carlo și distribuții de probabilitate

4.1 Distribuții de probabilitate

Distribuțiile de probabilitate sunt folosite pentru a genera tiparul sosirii agenților, cu ajutorul funcțiilor de probabilitate de densitate specifice fiecăreia.

Tipurile de distribuții alese ( Erlang, normală, triunghiulară ), sunt menite să simuleze diferite moduri de sosire ale agenților, adăugând scenariului simulat o perioadă de vârf, în care se introduc în sistem agenți la o rată maximă. În același timp, furnizează și perioade în care numărul de genți ce vor fi introduși va fi redus, așa cum se întâmplă în jurul orelor de inchidere a programului.

De exemplu, pentru simularea unui scenariu în care ora de vârf este 14:00, cu deschiderea centrului la 8:00 și inchiderea la 22:00, putem folosi o distribuție normală sau triunghiulară, în funcție de tipul de creștere pe care vrem sa îl aibă funcția. Dacă sosirile se intensifică în timp liniar, putem deci folosi o distribuție triunghiulară; în cazul creșterii exponențiale folosind în conesecință o distribuție normală.

Tipurile de distribuții folosite au parametri specifici, necesari pentru a plasa cea mai mare parte a funcției de densitate de repartiție la dreapta lui zero. Scopul acestei translatări este împărțirea unui interval suficient de mare de pe abscisă în intervale egale, asupra cărora se poate deduce un proces de normalizare simplificat, în cadrul orizontului de timp simulat.

4.1.1 Distribuția Erlang

Folosind parametri prezentați, presupune o rată exponențial crescătoare de sosire pentru prima jumătate a intervalului simulat, după care numărul sosirilor se atenuează.

Parametri : k = 4; = 4

Funcția de densitate de probabilitate devine:

(4.1.1.1)

(4.1.1.2)

Forma funcției densitate de probabilitate a distribuției Erlang

ț

Fig. 4.1.1.1

După cum se observă în Fig. 4.1.1.1, majoritatea valorilor distribuției se află în intervalul [0, 2.5]. Prin normalizarea timpului scurs până în momentul calculării, putem obține probabilități pentru orice moment, acolo unde x semnifică procentul parcurgerii orizontului de timp simulat.

Calcularea funcției densitate de prbabilitate a distribuției Erlang

Fig. 4.1.1.2

4.1.2 Distribuția normală

Folosind parametri prezentați, presupune o rată exponențial crescătoare de sosire pentru prima jumătate a intervalului simulat, după care numărul sosirilor se atenuează în același fel, într-un mod simetric.

Parametri : = 3;

Funcția de densitate de probabilitate devine:

(4.1.2.1 )

(4.1.2.2 )

Forma funcției densitate de probabilitate a distribuției normale

Fig. 4.1.2.1

După cum se observă în Fig. 4.1.2.1, majoritatea valorilor distribuției se află în intervalul [0, 6]. Prin normalizarea timpului scurs până în momentul calculării, putem obține probabilități pentru orice moment, acolo unde x semnifică procentul parcurgerii orizontului de timp simulat.

Calcularea funcției densitate de prbabilitate a distribuției normale

Fig. 4.1.2.2

4.1.3 Distribuția triunghiulară

Folosind parametri prezentați, presupune o rată liniar crescătoare de sosire pentru prima jumătate a intervalului simulat, după care numărul sosirilor se atenuează în același fel, într-un mod simetric.

Parametri: = 0 ; = 2

Funcția de densitate de probabilitate devine:

( 4.1.3.1)

Forma funcției densitate de probabilitate a distribuției triunghiulare

Fig. 4.1.3.1

După cum se observă în Fig. 4.1.3.1, valorile distribuției se află în totalitate în intervalul . Prin normalizarea timpului scurs până în momentul calculării, putem obține probabilități pentru orice moment, acolo unde semnifică procentul parcurgerii orizontului de timp simulat.

Calcularea funcției densitate de prbabilitate a distribuției triunghiulare

Fig. 4.1.3.2

4.2 Tehnici Monte-Carlo

Tehnicile Monte-Carlo sunt folosite în general în cadrul procedurilor de eșantionare repetate în scopul obținerii rezultatelor numerice. Numitorul comun este reprezentat de generatorul de numere aleatoare, de cele mai multe ori întâlnit sub forma generatorului de distribuție uniforma în intervalul . Folosind acest instrument, se pot face comparații cu funcțiile de densitate de probabilitate sau cu cele de probabilitate cumulată .

În unele cazuri, acolo unde forma funcțiilor de probabilitate cumulată este prea greu de determinat sau lipsește o formă analitică, se poate recurge la tehnici cum ar fi Metoda respingerii von Neumann.

În cadrul simulării, tehnicile stohastice de tip Monte-Carlo sunt folosite pentru a determina dacă, pentru un moment de timp , din cadrul evaluărilor execuate la secundă asupra orizontului de timp, este necesară sau nu introducerea unui nou agent. Deși cunoaștem funcția de densitate de probabilitate a distribuției dorite, introducerea în sistem a agenților se face pe baza unei metode nedeterministe, folosind un procedeu similar metodei respingerii.

Metoda respingerii-acceptării von Neumann constă în generarea de numere aleatoare ce se conformează unei distribuții dorite, bazându-se pe generarea a două serii de numere aleatoare.

Fiind dată o funcție de dinsitate de probabilitate notată (x), se generază șirul de numere aleatoare uniform distribuite pe intervalul , șir ce este folosit pentru a plasa în mod aleator o valoarea pe abscisă. Al doilea șir, notat va fi folosit pentru a putea fi comparat cu valoarea funcțiilor de tipul f(. Astfel, numărul aleator generat va fi acceptat ca urmând distribuția țintă doar dacă f( < .

Generatorul de numere aleatoare în intervalul [0,1] este specific limbajului folosit, și se găsește sub forma unei proceduri specific platformei UnityEngine. Această procedură primește ca parametric două valoari, de tipul real – float.

Procedura de generare a numerelor aleatoare unfirom distribuite în interrvalul [0,1]

UnityEngine.Random.Range(0f,1f)

Fig. 4.2.1

Pentru realizarea metodei respingerii, vom parcurge etapele ce determină dacă un agent va fi sau nu va fi introdus în sistem. În acest caz concret, vom folosi ca distribuție țintă distribuția normală prezentată la secțiunea 4.1.2.

În prima etapă, se normalizează valoarea procentuală a timpului scurs până în momentul, relativă la timpul total al simulării. Normaliarea se face conform distribuției alese, fiecare având un coeficienți diferiți. În acest caz, este vorba de alungierea intervalului cu șase unități:

Normalizarea procentului de timp scurs în relație cu distribuția normală

Fig. 4.2.2

Dacă presupunem că suntem în stadiul în care s-a desfășurat deja 30% din totalul orizontului de timp acordat, acest lucru înseamnă ca valoarea pe abscisă ce va fi evaluată va lua valoarea = 1.8

Procedeul de normalizare prezentate are ca rol transformarea valorii , ce se află în intervalul , într-o valoarea aflată în intervalul [0,6] ce acoperă punctele de pe abscisă a distribuției normale alese aproape în totalitate. ( Fig. 4.1.2.1 )

În cea de-a doua etapă, se calculează valoarea funcției de densitate de probabilitate în punctul după normalizare, folosind următoarea formulă :

Evaluarea funcției densitate de probabilitate după normalizare

Fig. 4.2.3

Considerând că în exemplul de mai sus am luat , atunci valoarea funcției va fi egală cu 0.194 .

În a treia etapă, comparăm valorile = 0.194 cu un număr generat aleator în intervalul . Acest lucru ne este permis deoarece este știut că funcția de densitate a distribuției normale se va încadra pe ordonată în intervalul [0,1] , pe tot intervalul de pe abscisă ales .

Comparația valorii calculate a funcției probabilitate de densitate cu un număr aleator generat

Fig. 4.2.4

În cazul în care rezultatul evaluării funcției, în cazul nostru este mai mare decât un număr aleator generat, numărul va fi acceptat, iar funcția va întoarce un rezultat de tip boolean adevărat. Acest lucru ne permite așadar introducerea de agenți într-un mod nedeterminist, ținând cont de o distribuție aleasă. Rezultatul acestei funcții este evaluat la un interval ales de utilizator, în următorul bloc de cod:

Utilizarea metodei respingerii cu ajutorul procedurii getDistrib

Fig. 4.2.5

Procedura ce este rulată la un interval prestabilit – implicit o secundă – , numită InstantiateNewPerson, conține condițiile logice inițializării unui nou agent. Se observă că este evaluat rezultatul procedurii DistributionManager.getDistrib(), în caz adevărat inițializându-se un nou agent.

Etapele prezentate mai sus pot fi sintetizate sub forma unei diagrame ce conține întreg fluxul operațional ce surprinder și procesul de decizie. (Fig. 4.2.6)

Ordinea desfășurării operațiilor în cadrul introducerii unui nou agent

Fig. 4.2.6

5. Descrierea datelor de intrare

Datele de intrare se referă la variabile cu ajutorul cărora se vor efectua operațiile de natură computațională, fiind disponibile în etapa de inițializare din prima fereastră a programului ( Fig. 5.1 ). Odată începută simularea, prin intermediul butonului de start, nu se vor mai putea schimba aceste valori. Pe parcursul simulării vor fi disponibile date referitoare la procentul parcurgerii simulării, numărul total de agenți din sistem și numărul de agenți ce au decis să abandoneze.

Fereastra de inițializare

Fig. 5.1

Fereastra de inițializare cumprinde setarea următorilor parametri:

Number of queues reprezintă numărul disponibil de cozi de așteptare, valorile posibile fiind încadrate în mulțimea . Un număr mai mare de cozi va conduce în consecință la eficientizarea procesării.

Sim time reprezintă orizontul de timp simulat, în minute.

Person probability check interval reprezintă intervalul de timp scurs – în secunde – între două executări ale metodei respingerii. Un interval de timp mai mare va genera un număr mai mic de agenți. În cazul unei distribuții bazate pe probabilitate, P-value numărul mediu de agenți din sistem pe tot parcursul rulării va fi :

Buy basket se referă la parametri coșului de cumpărături, având variabile aleatoare ce urmează o distribuție uniformă în intervalul de tip . Astfel, Items nr. min și Items nr. max va fi numărul de produse pe care un agent le va cumpăra.Un interval discret de tipul va avea în consecință o dispersie mai mică față de un interval , unde . Celelalte două valori, Min item time și Max item time, urmează o logică similară, numai că se referă la timpul pe care fiecare dintre produsele cumpărate se va adăuga la timpul total de așteptat la coadă specific coșului de cumpărături al agentului.

Shelf waiting time reprezintă durata de timp în secunde pe care agenții o vor petrece în fața zonelor de unde urmează să achiziționeze un produs.

Arrival distribution shape este forma distribuției după care agenții vor intra în sistem, având cele trei posibilități descrise la secțiunea 4.1. În cazul în care se optează pentru o probabilitate constantă a sosirii, se poate folosi opțiunea P-value, cu o anumită șansă de probabilitate, încadrată între . De exemplu, dacă stabilim ca șansa să fie de și Person probability check interval este setat cu valoare întreagă unitară, va fi introdus un nou agent în sistem la fiecare secundă. Similar, dacă probabilitatea este de , șansa ca în secunda următoare să mai fie introdus un agent este de ½ .

6. Descrierea outputului

Output-ul este reprezentat de valori de interes sau indicatori asupra agenților ce vin de folos fie în determinarea numărului optim de cozi, fie când dorim comparăm diverse scenarii din punt de vedere al eficienței. Acestea cuprind și un indice de perfomanță KPI, calculat pe baza indicatorilor rezultați în tabelele statistice.

Fereastra de output

Fig. 6.1

În tabela Agent statistics – Averages sunt prezenți indicatori medii, minimi și maximi cu privire la timpii specifici operațiilor. Waiting time in queue reprezintă timpul pe care agenții îl petrec în coadă, contorizându-se pe parcursul ocupării unei poziții, până la ieșirea din coadă. Indicatorul folosit pentru calcularea timpului petrecut în sistem de către agenți este Waiting time inside, acesta fiind înregistrat de la etapa de inițializare până la distrugerea din memorie a obiectului. Cu cât timpul de așteptare înregistrat aici este mai mare, putem spune că s-a ajuns la un grad mai mare de aglomerație.

În tabela Agent statistics sunt prezente date ce descriu întregul ciclu al agenților, cum ar fi numărul total de agenți intrați în sistem pe întreg parcursul simulării, numit Total agents entered.

Numărul total de agenți ce au abandonat achiziționarea produselor din cauza ocupării complete a locurilor din coadă este Total agents abandoned . Folosind aceste două informații, putem calcula sub formă de raport procentul de abandon, notat ca %Abandoned.

Măsura agenților ce nu au fost introduși în sistem din cauza aglomerației, Total agents lost este prezentă în valoarea absolută. Un număr semnificativ de mare de agenți ce nu intră în sistem sugerează creșterea numărului de cozi de așteptare sau schimbarea distribuției.

Datele referitoare la numărul de produse cumpărate prin valoarea lor absolută este Total items bought, la fel și numărul de produse ce nu au fost cumpărate din cauza timpilor de așteptare prea mari, notate ca Total items abandoned.

Indicatorul KPI din tabela Global reprezintă indicele de performață al sistemului și este calculat pe baza celorlalte valori ca o măsura sintetizată a eficienței. Fiind util în comparația scenariilor cu număr diferit de cozi de așteptare, este calculat după formula următoare:

( 6.1 )

Primul termen al formulei reprezintă o proporție pozitivă din numărul total de vizitatori, deoarece acest lucru va duce eventual la creșterea profitului.

Al doilea termen este măsura gradului de abandon, având o importanță ce crește în mod pătratic; un procent mai mare de abandon descurajează vizitele următoare și are efecte pe termen lung.

Al treilea termen reprezintă un indice de disconfort al agenților, prin creșterea timpilor medii și maximi de așteptare în sistem.

Al patrulea termen reprezintă proporția agenților ce nu au intrat în sistem din cauza aglomerației, în totalul agenților evaluați, acestuia atribuindu-se de asemenea o importanță pătratică.

5. Rularea scenariilor de simulare

5.1 Simularea scenariilor economice

Pentru surprinderea mai multor tipuri de activități economice din punct de vedere al mărimii centrului comercial, se pot folosi scenarii în care se ajustează variabilele de intrare. De exemplu, pentru simularea unui centru comercial de dimensiuni mici vom furniza valori mici pentru numărul maxim de produse cumpărate, la fel și pentru timpul de așteptare la raioane.

Scenariile simulate prezentate vor fi în număr de zece pentru fiecare caz, urmând ca din acestea să se deducă valori medii ale indicatorilor.

5.1.1 Simulrea unui complex comercial de dimensiuni medii

Se realizează simulări bazate pe următorii parametri:

Este de menționat că, în comparație cu scenariul unui complex comercial de dimensiuni mari, timpii de așteptare au valori mai mici, iar intervalul de evaluare a probabilității este de două secunde. Tipul distribuției este unul bazat pe probabilitate generată într-un mod uniform, fapt care duce la inexistența perioadelor de vârf. La fiecare două secunde, dacă numărul aleator generat va fi mai mic decât 0.3, atunci un nou agent va fi introdus în sistem.

Număr obiectelor ce vor fi cumpărate de către agenți se va afla în intervalul , iar timpul pe care fiecare dintre aceste obiecte îl va adăuga la timpul total de așteptare la stație se va afla în intervalul .

Timpul de așteptare la raft, Shelf waiting time este trecut cu valoarea de zece secunde.

Numărul cozilor disponibile, Number of queues are ovaloare medie, având în vedere că parametri de intrare permit o valoare întreagă din intervalul .

Rezultatele celor zece simulări cu parametri specificați sunt:

Tabel 5.1.1.1

Pe baza acestora, putem deduce indicatorii medii :

Tabel 5.1.1.2

Se observă că acestă configurație a variabilelor de intrare este relativ eficientă, având un procent de abandon al agenților de doar 3.38%. De altfel, timpii medii și maximi de așteptare în coadă sunt relativ mici, având valorile de 1.15 minute și respectiv 2.2 minute.

Indicatorul de performanță KPI are o valoare medie de 19996 unități, iar numărul total al produselor pe care agenții au decis să le abandoneze este de 761.

Indicatorul mediu al timpului petrecut în incinta complexului este de 2.15 minute, acesta având valori mai mari în scenarii ce generează aglomerație. Indicatorul pentru numărul maxim de minute petrecute în coadă, Waiting time in queue Max, împreună cu cel mediu, Waiting time in queue Average vor deveni prin înmulțire un termen component al formulei de determinare al indicelui de performanță, funcționând ca un termen ce relevă gradul de disconfort.

5.1.2 Simulrea unui complex comercial de dimensiuni mari

Se realizează simulări folosind următorii parametri:

Distribuția aleasă în acest caz este Erlang, deoarece într-un complex commercial de dimensiuni mari tinde să existe un interval de timp în care vor exista mai mulți cumpărători.

Numărul minim și maxim de produse este incrementat față de cazul cazul precedent, la fel și numărul cozilor de așteptare ce este setat la valoarea maximă.

Rezultatele celor zece simulări cu parametri specificați sunt:

Tabel 5.1.2.1

Pe baza acestora, putem deduce indicatorii medii : Tabel 5.1.2.2

Se observă că scenariul simulat este relativ ineficient din punct de vedere al gestionării tuturor agenților, deoarece procentul de abandon este de 11%. În acest caz, se poate opta pentru mărirea numărului de cozi de așteptare, dacă se consideră că ceilalți parametri pot fi validați cu ajutorul datelor statistice.

De asemenea, timpii de așteptare medii și maximi în coadă au o valoare ridicată, fiind de 0.84 minute și respectiv 3.9 minute. Deși starea de aglomerație nu a împiediat sosirea unor noi agenți, fapt sugerat de indicatorul TAL= Total agents lost , putem spune totuși că eficiența sistemului este una scăzută.

5.1.2 Găsirea numărului optim de cozi de așteptare

Găsirea numărului optim de cozi se face cu ajutorul simulărilor repetate folosind aceiași parametri, cu excepția numărului de cozi. Deoarece funcția de cost asociată funcționării stațiilor este necunoscută, vom stabili o funcție liniară pentru cazul analizat, folosind datele de ieșire generate de scenarii cu un număr al cozilor incrementat progresiv.

Pentru scenariul simulat, vom avea următorii parametri:

Outputurile prezentate în continuare vor fi calculate ca indicatori medii pe baza a zece procese de simulare, având următoarele rezultate:

Tabel 5.1.2.1

Din cazurile prezentate, se observă tendința de creștere a indicatorilor timpilor de așteptare, la fel și creșterea procentului de abandon, pe măsură ce scădem numărul de cozi.

Fig. 5.1.2.1 Fig. 5.1.2.1

Valoarea optimă este obținută atunci când sunt activate toate cele cinci cozi disponibile, procentul de abandon fiind în acest caz nul. Pentru a alege varianta optimă, trebuie să se estimeze funcția de cost a punerii în funcțiune a unei stații. Presupunând că aceasta are o formă liniară, dorim să determinăm numărul optim, alegând dintre două variante fezabile ( 4 sau 5 cozi de așteptare ).

Ipoteze:

=410

=0

Determinarea echilibrului:

= f ( 5 )-f ( 4 )

410b = 5a-4a a = 410b

Conform echilibrului determinat, în cazul în care funcția de cost a stației depășește valoarea , atunci nu este rentabilă deschiderea a cinci stații de așteptare. În cazul în care relația este de forma a < 410b, deschiderea tuturor cozilor de așteptare disponibilă este mai profitabilă.

Concluzie

În concluzie, modelele de simulare computerizată ce pot produce rezultate ușor comparabile cu situațiile reale pot ajuta procesul de luare a deciziilor și de optimizarea costurilor datorită atât gradului de fidelitate vizuală, interpretabilă de orice utilizator, cât și datorită informațiilor statistice rezultate. Folosirea tehnicilor de tip Monte-Carlo pentru generarea unor scenarii nedeterministe, având ca suport o putere considerabilă de procesare poate reda într-un mod mai fidel realitatea față de tehnicile analitice, surprinzând evenimente la scară mică, comportamente și proprietăți specifice tuturor entităților informaționale simulate.

Ținând cont că efortul pentru a desfășura o astfel de simulare este minim din momentul conceperii programului suport și a modelului matematic în comparație cu strângerea datelor prin interviu sau analiză la fața locului, putem spune că aceste tehnici conferă un raport cost-beneficiu bun, acesta urmând să se îmbunătățească pe măsura creșterii puterii de calcul.

Flexibilitatea este dată de ușurința cu care se pot face analize de senzitivitate, modificând doar parametri de interes pentru aflarea relațiilor de tip cauză-efect, cu consecințe imprevizibile pe termen lung. Spre deosebire de tehnicile analitice, posbilitatea ca într-un scenariu de simulare cum sunt cele prezentate în Cap. 5 să se repete este practic nulă, în ciuda faptului că păstrăm aceiași parametri. Acest efect este generat de multitudinea de evenimente ce apar în mod impredictibil pe baza influențelor probabilistice și a bifurcațiilor traiectoriilor posibile.

Complexitatea modelelor simulate nu prezintă o limită informațională, ci doar una computațională, astfel încât modelele ce pot fi simulate cu tehnicile prezentate fiind capabile să surprindă orice aspect dorit al unui scenariu simulat de natură economică, socială, militară, etc.

Similar Posts

  • Intrarea pe Piata de Hardware a Companiei Microsoft In Romania

    Сuрrinѕ Intrоducеrе 2 Сaрitоlul I. Ρarticularitățilе ѕtratеgiilоr dе intrarе ре рiеțеlе ѕtrăinе 3 1.1 Dеfinirеa cоncерtului dе markеting intеrnațiоnal 3 1.2 Ρrеzеntarеa ѕtragiilоr dе markеting intеrnațiоnal реntru intrarеa ре о рiață ѕtrăină 11 Сaрitоlul II. Ρrеzеntarеa gruрului Micrоѕоft și a activității în cadrul рiеțеi din Rоmânia 22 2.1 Ρrеzеntarеa Соmрaniеi Micrоѕоft 22 2.2 Еvоluția Micrоѕоft…

  • Criptografia cu Cheie Publica

    Capitolul I NOȚIUNI FUNDAMENTALE DESPRE CRIPTOGRAFIE 1.1 Introducere Criptografia protejează informația vehiculată prin rețelele moderne de calculatoare. De-a lungul istoriei omenirii, dorința și necesitatea comunicării confidențiale au dus la perfecționarea științei scrierilor secrete, numite azi criptografie. Cunoștințele actuale referitoare la începuturile criptografiei sunt furnizate de diferite lucrări despre științele, religiile, războaiele de pe vremea unor…

  • Utilizarea Limbajului Html la Realizarea Paginii Web

    CUPRINS INTRODUCERE CAPITOLUL I: INTERNET ȘI WORD WIDE WEB I.1. Introducere în Internet I.2. Arhitectura World Wide Web CAPITOLUL II: LIMBAJUL HTML II.1. Generalități II.2. Editarea unui document HTML II.3. Structura unui document HTML II.4. Formatarea paragrafelor II.5. Formatarea fonturilor II.6. Folosirea imaginlor GIF și JPG II.7. Liste în Limbajul HTML II.8. Inserarea tabelelor II.9….

  • Lumea Fabricatiei 3d

    LUCRARE DE LICENȚĂ “Lumea Fabricației 3D” Cuprins Introducere Capitolul 1. Fabricația 3D Concepte,evoluții,principii Tehnologii de fabricație 3D Aplicații și dispositive necesare fabricației 3D Domenii de aplicabilitate 3D Avatajele si riscurile fabricației 3D Tradițional VS 3D Capitolul 2. Piața forței de muncă și producția 3D 2.1 Influența producției 3D asupra forței de muncă 2.2 Producția 3D…

  • Platforme de E Learnig

    LUCRARE DE LICENȚĂ Platforme de E-Learnig INTRODUCERE Proiectul tratează aspecte teoretice ale proiectării unei aplicații web, tehnologiile utilizate pentru dezvoltarea acesteia și transpune aceste aspecte în practică prin crearea unei aplicații web care are ca scop administrarea sarcinilor de lucru prin intermediul unei platforme e-learning. La început, în prima parte a anilor ‘90, World Wide…