Realizzazione di un simulatore software scritto in C++ per simulare un prototipo di sistema reale. Si parte da una simulazione a run indipendenti e poi si passa ad una simulaizone a batch per lo studio del fenomeno del transitorio iniziale. In seguito si realizza una Rete di Petri, tramite il tool GreatSPN, equivalente al sistema da studiare, si effettua la simulazione e si confrontano i risultati ottenuti nei 2 casi.
Simulazione ad Eventi Discreti (C++) e tramite Rete di Petri di un sistema.
1. Magazzino pezzi da lavorare LABORATORIO DI SIMULAZIONE Molinari Davis Esercizio per la parte pratica dell’esame Sistema da simulare
2. PRIMA PARTE “ Nella prima fase si dovr à analizzare il sistema e si dovranno definire (sulla carta) le variabili di stato, gli eventi - distinguendo quelli incondizionati, che dovranno essere memorizzati nella FEL da quelli condizionati, trattati in seguito al verificarsi di un cambiamento di stato causato da un evento incondizionato, le procedure per il trattamento degli eventi, gli accumulatori per il calcolo degli indici di prestazione. “
3.
4.
5.
6. GESTIONE DELL’EVENTO DI SCARTO DI UN PEZZO (EVENTO CONDIZIONATO) Per vedere se un pezzo è da scartare o meno faccio così: Definisco, con una #define, all’inizio del programma una costante simbolica che indica quale è la probabilità che il pezzo venga scartato e che potrà chiamarsi ad esempio P_SCART. Poi, utilizzando la libreria “rnd.h” presente nel progetto effettuo la generazione casuale (pseudo-casuale) di un numero compreso fa 1 e 100. A questo punto vado a vedere se il numero generato è minore o uguale al valore di P_SCART. Se lo è vorrà dire che il pezzo è da scartare (e quindi andrò ad incrementare il contatore dei pezzi scartati), altrimenti no. Chiamando ad esempio ‘p’ il numero generato avrò la situazione: 1 <= p <= P_SCART SCARTO IL PEZZO P_SCART < p <= 100 NON SCARTO Siccome i pezzi possono essere scartati dopo le lavorazioni di entrambe le macchine, suppongo che le probabilità di scarto siano diverse e quindi ho definito 2 costanti P_SCART1 e P_SCART2 e, a seconda della situazione in cui mi trovo (se a fine lavorazione1 o a fine lavorazione2), confronto il numero generato con il relativo valore della probabilità di scarto.
7. Tipo_Evento ARRIVO Coda1 += N Coda 1 == N Inserisci in FEL un evento PARTENZA dalla stazione 1 Inserisci in FEL l’evento del prossimo ARRIVO di N pezzi SI NO Flow-chart della gestione di un evento di tipo ARRIVO
8. Tipo_Evento PARTENZA-1 Scarto? Coda2 <= K Coda1 -- Coda2 ++ Serv1 = bloccato Coda1 -- PezziScart ++ Coda2 == 1? Coda1 > 0 ? Inserisci in FEL un evento PARTENZA2 Inserisci in FEL un evento PARTENZA1 NO NO NO NO SI SI SI SI Flow-chart della gestione di un evento di tipo Partenza dal servitore 1
9. Tipo_Evento PARTENZA-2 Coda2-- Scarto? Coda2 > 0 Serv1 bloccato? Coda1 > 0 Coda1 -- Coda2 ++ Inserisci in FEL un evento PARTENZA2 Inserisci in FEL un evento PARTENZA1 NO NO NO NO SI SI SI SI PezziScart ++ Serv1 = Non bloccato Flow-chart della gestione di un evento di tipo Partenza dal servitore 2
10. GESTIONE DELL’EVENTO DI “FINE SIMULAZIONE ” Tipo_Evento FINE SIMULAZIONE Rimuovo dalla FEL L’ evento di tipo ARRIVO EndOfSimulation = true In questo modo non arresto brutalmente la simulazione ma blocco gli arrivi e finisco di gestire i pezzi che sono presenti nel sistema. In questo modo può capitare che la simulazione non termini esattamente al tempo stabilito ma qualche istante dopo a causa della fine del trattamento di qualche pezzo. L’arresto del simulatore avverrà solo quando EndOfSimulation varrà true e la FEL sarà vuota. Quindi ho realizzato 2 nuove funzioni che lavorano sulla List, una per rimuovere gli eventi di tipo ARRIVO e un che restituisce true se la lista è vuota o false altrimenti. Quindi avrò, nel ciclo do-while principale del programma la seguente condizione: do Clock(); while (EndOfSimulation == false || Lista.Vuota() == false);
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29. Funzione Clock() del simulatore La funzione clock() rappresenta il cuore del simulatore, e viene richiamata dal main del programma all’interno di un ciclo do-while fino a quando non si è raggiunta la fine della simulazione. Essa quando viene richiamata preleva il primo evento presente nella Future Event List tramite il metodo Get e aggiorna il valore della variabile CurrentTime, che rappresenta l’istante attuale della simulazione, impostandola al valore dell’istante di tempo associato all’evento appena estratto dalla FEL. A questo punto effettua un controllo su che tipo di evento è quello appena estratto e chiama di conseguenza l’opportuna funzione di gestione. Nel caso si tratti dell’evento di fine simulazione, SIM_END, viene chiamata la funzione che si occupa di togliere l’evento di tipo ARRIVO dalla FEL fermando cosi i futuri arrivi, e viene anche impostato a true il valore della variabile booleana EndOfSimulation che gestisce la fine della simulazione. Il codice della funzione Clock() è nella slide seguente
30.
31. Funzione Main del simulatore main(int argc, char* argv[]) { int j; long seed; if (argc != 2) usage(argv[0]); NRun = atoi(argv[1]); if (NRun == 0) { printf("ERRORE: Il parametro passato deve essere un intero."); usage(argv[0]); } u1.open("utilizzazione1.txt"); u2.open("utilizzazione2.txt"); thr.open("throughput.txt"); tdp.open("tempPerm.txt"); for (j = 1; j <= NRun; j++) { cout << "Inserisci il seme per la generazione dei numeri casuali: "; cin >> seed; seme.set(seed); inizializza(); do Clock(); while (EndOfSimulation == false || Lista.Vuota() == false); Report(); } u1.close(); u2.close(); thr.close(); tdp.close(); cout << "FINE SIMULAZIONE" << flush; }
32.
33.
34. Funzionamento del simulatore Se il programma viene lanciato correttamente, inizia la simulazione e vengono stampate a video le informazioni dei pezzi in arrivo e in partenza. Alla fine di ogni run vengono stampati a video, oltre che su files per la successiva analisi, i risultati ottenuti. Screenshot di esempio
35.
36. Esportazione dei risultati su foglio di calcolo Excel Il simulatore scrive i risultati della simulazione su diversi file di testo, uno per ogni grandezza che si vuole prendere in considerazione e studiare. Negli screenshot qui di fianco è riportato il contenuto del file Throughput.txt che contiene tutti i valori calcolati dal simulatore per tale grandezza. In questo caso particolare i valori si riferiscono alla simulazione a batch dove vengono eseguiti 10 Run da 15 batch ciascuno per un totale qundi di 150 valori che verrano poi esportati su un foglio di calcolo Excel.
37.
38.
39.
40. 'Utilizzazione del servitore 2 wbookExcel = appExcel.Workbooks.Open(CurDir() + "nalisi.xls") foglioExc = appExcel.Worksheets("Tabella2") objReader = New StreamReader("utilizzazione2.txt") For i = firstRow To lastRow For n = firstCol To lastCol foglioExc.Cells(i, n).Value = objReader.ReadLine().Replace(".", ",") Next n Next i foglioExc.SaveAs(CurDir() + "tilizzazione2.xls") 'Throughput del sistema senza scarti wbookExcel = appExcel.Workbooks.Open(CurDir() + "nalisi.xls") foglioExc = appExcel.Worksheets("Tabella2") objReader = New StreamReader("throughput.txt") For i = firstRow To lastRow For n = firstCol To lastCol foglioExc.Cells(i, n).Value = objReader.ReadLine().Replace(".", ",") Next n Next i foglioExc.SaveAs(CurDir() + "hroughput.xls") 'Throughput del sistema senza scarti wbookExcel = appExcel.Workbooks.Open(CurDir() + "nalisi.xls") foglioExc = appExcel.Worksheets("Tabella2") objReader = New StreamReader("tempPerm.txt") For i = firstRow To lastRow For n = firstCol To lastCol foglioExc.Cells(i, n).Value = objReader.ReadLine().Replace(".", ",") Next n Next i foglioExc.SaveAs(CurDir() + "empPerm.xls") appExcel.Quit() End Sub End Module
41.
42.
43. Dimensione del campione e accuratezza del risultato Se si desidera ottenere un risultato con una certa accuratezza può essere necessario effettuare più esperimenti di simulazione: come stabilire quanti? Si inizia con un numero R 0 di repliche. Se l’accuratezza non è stata raggiunta si cerca di stimare quante ulteriori repliche sono necessarie per raggiungere l’accuratezza. Supponiamo di voler raggiungere una accuratezza di , cioè t α/2,R-1 S R R conoscendo il valore S 0 per R = R 0 si può tentare una stima di quanti run aggiuntivi sono necessari: R (t α/2,R-1 S 0 / ) 2 poiché R compare sia a sinistra che a destra della disequazione (numero di gradi di libertà della t), operiamo una sostituzione di t α/2,R-1 con z α/2 (dato che t α/2,R-1 z α/2 , R dovra’ essere (z α/2 S 0 / ) 2 ) Il valore iniziale di repliche (Run) che ho adottato è 15.
44.
45.
46.
47. Tabella dei risultati dell’esperimento di simulazione con 15 run indipendenti senza batch: Throughput 0,182274226 0,181421774 INTERVALLO DI CONFIDENZA ACCURATEZZA 0,000426226 STUDENT 2,145 VARIANZA 0,000198707 somma delle differenze valor medio 3,94843E-08 8,29171E-06 0,181848 7,33326E-06 0,002708 0,17914 1,33225E-05 0,00365 0,178198 2,8224E-06 -0,00168 0,183528 2,23204E-06 -0,001494 0,183342 5,29E-10 2,3E-05 0,181825 2,17858E-06 -0,001476 0,183324 6,56384E-06 0,002562 0,179286 6,46176E-06 -0,002542 0,18439 5,53536E-07 0,000744 0,181104 1,28522E-05 0,003585 0,178263 9,72816E-06 0,003119 0,178729 2,503E-05 -0,005003 0,186851 1,87964E-06 -0,001371 0,183219 3,40772E-06 -0,001846 0,183694 9,58441E-07 -0,000979 0,182827 quadrato differenza valor medio - valore Risultato ottenuto
48. Tabella dei risultati dell’esperimento di simulazione con 15 run indipendenti senza batch: utilizzazione servitore 1 0,954992065 0,950742335 INTERVALLO DI CONFIDENZA ACCURATEZZA 0,002124865 STUDENT 2,145 VARIANZA 0,000990613 somma delle differenze valor medio 9,81314E-07 0,000206076 0,9528672 0,000158261 0,0125802 0,940287 0,000841302 0,0290052 0,923862 4,27662E-08 -0,0002068 0,953074 3,20786E-05 -0,0056638 0,958531 2,33888E-05 0,0048362 0,948031 5,1984E-10 -2,28E-05 0,95289 0,000312377 0,0176742 0,935193 0,000970497 -0,0311528 0,98402 0,000184465 -0,0135818 0,966449 0,000586037 0,0242082 0,928659 3,62548E-05 0,0060212 0,946846 0,000501975 -0,0224048 0,975272 3,27047E-05 -0,0057188 0,958586 7,49748E-05 -0,0086588 0,961526 4,78145E-05 -0,0069148 0,959782 quadrato differenza valor medio - valore Risultato ottenuto
49. Tabella dei risultati dell’esperimento di simulazione con 15 run indipendenti senza batch: utilizzazione servitore 2 0,678124507 0,674940693 INTERVALLO DI CONFIDENZA ACCURATEZZA 0,001591907 STUDENT 2,145 VARIANZA 0,000742148 somma delle differenze valor medio 5,50783E-07 0,000115664 0,6765326 3,35519E-05 -0,0057924 0,682325 5,00358E-05 0,0070736 0,669459 0,000241069 -0,0155264 0,692059 2,98737E-06 -0,0017284 0,678261 2,51462E-05 0,0050146 0,671518 4,55976E-05 0,0067526 0,66978 0,00016873 0,0129896 0,663543 8,33094E-05 -0,0091274 0,68566 6,37762E-07 0,0007986 0,675734 0,000161204 0,0126966 0,663836 0,000200806 0,0141706 0,662362 0,00028674 -0,0169334 0,693466 3,94058E-05 -0,0062774 0,68281 0,000173512 -0,0131724 0,689705 8,21126E-05 0,0090616 0,667471 quadrato differenza valor medio - valore Risultato ottenuto
50. Tabella dei risultati dell’esperimento di simulazione con 15 run indipendenti senza batch: Tempo di permanenza nel sistema 211,0541033 176,19443 INTERVALLO DI CONFIDENZA ACCURATEZZA 17,42983665 STUDENT 2,145 VARIANZA 8,125797971 somma delle differenze valor medio 66,02859267 13866,00446 193,6242667 4382,607708 66,20126667 127,423 8003,318234 89,46126667 104,163 411,0648117 -20,27473333 213,899 16,632259 4,078266667 189,546 2651,762489 51,49526667 142,129 1482,424538 38,50226667 155,122 4451,994315 66,72326667 126,901 30475,63922 -174,5727333 368,197 4,716425671 -2,171733333 195,796 6389,966602 79,93726667 113,687 4600,673759 67,82826667 125,796 46515,15925 -215,6737333 409,298 430,6980773 20,75326667 172,871 629,7724091 25,09526667 168,529 9483,396751 -97,38273333 291,007 quadrato differenza valor medio - valore Risultato ottenuto
63. Tavola della distribuzione Student Siccome gli intervalli di confidenza che calcolo sono al 95% (α/2 = (100-95)/2 % = 2,5%) devo prendere il valore della student sulla colonna dello 0.975 e per quanto riguarda la riga dei gradi di libertà della distribuzione (df = degree of freedon) devo prendere il valore del numero di run – 1. Avendo eseguito 5 run devo prendere il valore della riga 4. Il valore ottenuto l’ho colorato e cerchiato nell’immagine sottostante: t α /2,n-1
64. Tabella dei risultati dell’esperimento di simulazione con 5 run indipendenti senza batch: Throughput 0,188262 0,17969 INTERVALLO DI CONFIDENZA ACCURATEZZA 0,004286 STUDENT 2,776 VARIANZA 0,001543986 somma delle differenze valor medio 2,38389E-06 4,76778E-05 0,1839764 3,59568E-05 0,0059964 0,17798 5,29644E-06 0,0023014 0,181675 8,92269E-07 -0,0009446 0,184921 1,54418E-05 -0,0039296 0,187906 1,1721E-05 -0,0034236 0,1874 quadrato differenza valor medio - valore Risultato ottenuto
65. Tabella dei risultati dell’esperimento di simulazione con 5 run indipendenti senza batch: Utilizzazione Servitore1 0,85735 0,81027 INTERVALLO DI CONFIDENZA ACCURATEZZA 0,02354 STUDENT 2,776 VARIANZA 0,008480292 somma delle differenze valor medio 7,19154E-05 0,001438307 0,8338184 0,001321352 0,0363504 0,797468 7,877E-06 -0,0028066 0,836625 2,78425E-05 -0,0052766 0,839095 0,000304593 -0,0174526 0,851271 0,000116956 -0,0108146 0,844633 quadrato differenza valor medio - valore Risultato ottenuto
66. Tabella dei risultati dell’esperimento di simulazione con 5 run indipendenti senza batch: Utilizzazione Servitore2 0,65616 0,623329 INTERVALLO DI CONFIDENZA ACCURATEZZA 0,016416 STUDENT 2,776 VARIANZA 0,00591352 somma delle differenze valor medio 3,49697E-05 0,000699394 0,6397454 0,000328385 0,0181214 0,621624 0,000486838 0,0220644 0,617681 1,55047E-05 -0,0039376 0,643683 0,000288545 -0,0169866 0,656732 0,000371009 -0,0192616 0,659007 quadrato differenza valor medio - valore Risultato ottenuto
67. Tabella dei risultati dell’esperimento di simulazione con 5 run indipendenti senza batch: Tempo medio di permanenza 53,52156 40,728 INTERVALLO DI CONFIDENZA ACCURATEZZA 6,39678 STUDENT 2,776 VARIANZA 2,30431936 somma delle differenze valor medio 5,309887713 106,1977543 47,12478 89,31535246 9,45068 37,6741 2,735980646 1,65408 45,4707 6,810116544 -2,60962 49,7344 19,23980314 -4,38632 51,5111 16,88240179 -4,10882 51,2336 quadrato differenza valor medio - valore Risultato ottenuto
68.
69. Tavola della distribuzione Student Avendo ampliando il numero di campioni su cui si basa l’esperimento da 5 a 15 occorre prendere in considerazione il nuovo valore della distribuzione T di Student. Ponendo sempre: 95% (α/2 = (100-95)/2 % = 2,5%) devo prendere sempre il valore della colonna 0.975 però questa volta il numero di gradi di libertà sarà 15 – 1 = 14. Nello screenshot sottostante ho evidenziato tale valore, utilizzato per eseguire i calcoli.
70. Tabella dei risultati dell’esperimento di simulazione con 15 run indipendenti senza batch: Throughput 0,18280146 0,18161654 INTERVALLO DI CONFIDENZA ACCURATEZZA 0,00059246 STUDENT 2,145 VARIANZA 0,000276205 somma delle differenze valor medio 7,62892E-08 1,60207E-05 0,182209 3,40402E-06 -0,001845 0,184054 6,48025E-07 0,000805 0,181404 2,79893E-06 -0,001673 0,183882 7,4529E-08 -0,000273 0,182482 5,79121E-07 -0,000761 0,18297 1,57252E-06 0,001254 0,180955 5,79121E-07 -0,000761 0,18297 1,57252E-06 0,001254 0,180955 5,79121E-07 -0,000761 0,18297 3,74911E-05 0,006123 0,176086 1,27916E-06 -0,001131 0,18334 1,57252E-06 0,001254 0,180955 1,27916E-06 -0,001131 0,18334 1,4352E-06 0,001198 0,181011 1,26167E-05 -0,003552 0,185761 quadrato differenza valor medio - valore Risultato ottenuto
71. Tabella dei risultati dell’esperimento di simulazione con 15 run indipendenti senza batch: Utilizzazione Servitore 1 0,827609427 0,823142707 INTERVALLO DI CONFIDENZA ACCURATEZZA 0,00223336 STUDENT 2,145 VARIANZA 0,001041194 somma delle differenze valor medio 1,08408E-06 0,000227658 0,825376067 1,96078E-05 0,004428067 0,820948 0,000156477 0,012509067 0,812867 2,31945E-05 0,004816067 0,82056 8,99071E-05 -0,009481933 0,834858 6,7403E-05 -0,008209933 0,833586 5,12751E-07 0,000716067 0,82466 6,7403E-05 -0,008209933 0,833586 5,12751E-07 0,000716067 0,82466 6,7403E-05 -0,008209933 0,833586 0,00174023 0,041716067 0,78366 9,26971E-05 -0,009627933 0,835004 5,12751E-07 0,000716067 0,82466 9,26971E-05 -0,009627933 0,835004 4,72657E-06 0,002174067 0,823202 0,00020805 -0,014423933 0,8398 quadrato differenza valor medio - valore Risultato ottenuto
72. Tabella dei risultati dell’esperimento di simulazione con 15 run indipendenti senza batch: Utilizzazione Servitore 2 0,636132284 0,63159025 INTERVALLO DI CONFIDENZA ACCURATEZZA 0,002271017 STUDENT 2,145 VARIANZA 0,001058749 somma delle differenze valor medio 1,12095E-06 0,000235399 0,633861267 5,78776E-05 -0,007607733 0,641469 0,000109783 -0,010477733 0,644339 3,93472E-05 -0,006272733 0,640134 3,77152E-05 0,006141267 0,627720 1,87763E-06 0,001370267 0,632491 4,58501E-05 0,006771267 0,627090 1,87763E-06 0,001370267 0,632491 4,43725E-05 0,006661267 0,627200 1,87763E-06 0,001370267 0,632491 0,000431653 0,020776267 0,613085 8,68324E-06 -0,002946733 0,636808 4,57147E-05 0,006761267 0,627100 8,68324E-06 -0,002946733 0,636808 5,84725E-05 -0,007646733 0,641508 0,000177522 -0,013323733 0,647185 quadrato differenza valor medio - valore Risultato ottenuto
73. Tabella dei risultati dell’esperimento di simulazione con 15 run indipendenti senza batch: Tempo medio di permanenza nel sistema 47,56398387 45,61865613 INTERVALLO DI CONFIDENZA ACCURATEZZA 0,972663871 STUDENT 2,145 VARIANZA 0,45345635 somma delle differenze valor medio 0,205622662 43,18075893 46,59132 27,88030083 -5,28018 51,8715 48,08202017 6,93412 39,6572 2,308515584 -1,51938 48,1107 71,60002842 -8,46168 55,0530 1,64999163 1,28452 45,3068 10,58057773 -3,25278 49,8441 1,64999163 1,28452 45,3068 10,58057773 -3,25278 49,8441 1,64999163 1,28452 45,3068 102,6314877 10,13072 36,4606 16,17986266 4,02242 42,5689 10,58057773 -3,25278 49,8441 16,17986266 4,02242 42,5689 0,001029126 -0,03208 46,6234 15,3004581 -3,91158 50,5029 quadrato differenza valor medio - valore Risultato ottenuto
74. Differenza di accuratezza tra i 2 esperimenti di simulazione a 5 e 15 run 0,004286 5 0,0005924 15 Accuratezza Numero di run Throughput 0,02354 5 0,00223336 15 Accuratezza Numero di run Utilizzazione Servitore 1 0,016416 5 0,002271017 15 Accuratezza Numero di run Utilizzazione Servitore 2 6,39678 5 0,972663871 15 Accuratezza Numero di run Tempo medio di permanenza
75. Differenza in termini di errore percentuale 2,36 % 5 0,33 % 15 Accuratezza Numero di run Throughput 2,85 % 5 0,27 % 15 Accuratezza Numero di run Utilizzazione Servitore 1 2,59 % 5 0,36 % 15 Accuratezza Numero di run Utilizzazione Servitore 2 13,73 % 5 2,08 % 15 Accuratezza Numero di run Tempo medio di permanenza
91. Differenza di accuratezza tra i 2 esperimenti di simulazione a batch (15 batch) svolti con 10 e 15 run 0,0029 10 0,0019 15 Accuratezza Numero di run Throughput 0,0145 10 0,0098 15 Accuratezza Numero di run Utilizzazione Servitore 1 0,0108 10 0,008 15 Accuratezza Numero di run Utilizzazione Servitore 2 4,06 10 3,17 15 Accuratezza Numero di run Tempo medio di permanenza
92. Confronto dei risultati: Simulatore vs GreatSPN 0,18599 0,1856 0,18212 15 0,1865 0,1856 0,1806 10 Estremo sup. GreatSPN Estremo inf. Run Throughput 0,8428 0,83663 0,8231 15 0,84391 0,83663 0,81492 10 Estremo sup. GreatSPN Estremo inf. Run Utilizzazione servitore 1 0,6520 0,6445 0,63606 15 0,6503 0,6445 0,6287 10 Estremo sup. GreatSPN Estremo inf. Run Utilizzazione servitore 2 52,64 57,30 46,30 15 52,16 57,30 44,04 10 Estremo sup. GreatSPN Estremo inf. Run Tempo medio di permanenza
93. Realizzazione del sistema con reti di Petri e simulazione con il tool GreatSPN Screenshot dell’interfaccia di GreatSPN con la rete di Petri equivalente al sistema
98. GreatSPN: impostazione della distribuzione del tempo di interarrivo dei pezzi Per eseguire la simulazione sulla rete di Petri equivalente al sistema da studiare occorre ovviamente impostare i corretti valori delle distribuzioni per le transizioni. GreatSPN lavora con la distribuzione esponenziale, motivo per cui si è adottata questa scelta anche nell’implementazione del simulatore software. Lo screenshot mostra il valore per la transizione che gestisce gli arrivi che è impostata a 0,08 come nel codice del simulatore. Inoltre viene anche impostata come transizione a servitore singolo come previsto nel sistema reale.
99. GreatSPN: impostazione della distribuzione dei tempi di servizio dei 2 servitori Nel codice del simulatore, lo ricordo, i valori che avevo impostato erano: Exponential TempoServizio1(0.29,&seme); Exponential TempoServizio2(0.32,&seme); I 2 screenshot sottostanti mostrano come ho impostato gli stessi valori anche in GreatSPN.
100. GreatSPN: impostazione delle probabilità di scarto dei pezzi da parte delle 2 postazioni Nei 2 screenshot sottostanti si vede come ho impostato le percentuali di scarto delle 2 postazioni. Lo scarto viene rappresentato nella rete di Petri come una transazione immediata, che quindi richiede tempo 0. (indicate dal rettangolo nero pieno, a differenza delle precedenti che erano temporizzate rappresentate quindi dal rettangolo bianco “vuoto”). Con la seguente definizione indico la probabilità che ha un token di finire in ramo della rete (uscire, quindi tornare nel posto “popolazione”) piuttosto che in un altro (proseguire alla stazione 2 nel caso di uscita dalla stazione 1). Le relative transazioni di “NonScarto1” e “NonScarto2” avranno probabilità data da 1 meno i valori indicati qui sotto. Probabilità scarto1 = 15% Probabilità scarto2 = 10%
101. GreatSPN: i risultati Per quanto riguarda i risultati ricavati con greatSPN, alcuni, come il Throughpu, sono visualizzati direttamente nella rete dopo il calcolo della Steady-StateSolution. Questo perché esso si riverisce ad una transazione. Altri, quelli riguardanti i posti, come le Utilizzazioni dei servitori sono mostrati tramite il comando “Show” in apposite finestre.
102. GreatSPN: i risultati Utilizzazione 2: 0,64459 Utilizzazione 1: 83663 Per vedere i risultati delle Utilizzazioni dei 2 servitori, che sono tra quelle che interessano e che si devono studiare occore utilizzare il comando “Show” results e poi cliccare sui rispettivi posti. Vengono cosi aperte le rispettive finestre con i risultati. I 2 screenshot sottostanti mostrano i valori delle Utilizzazioni dei 2 servitori risultanti dalla simulazione con GreatSPN.
103. GreatSPN: calcolo del tempo medio di permanenza Per quanto riguarda il calcolo del tempo medio di permanenza il discorso è diverso, in quanto tale grandezza non si ha a disposizione direttamente ma occorre ricavarla in modo indiretto tramite una formula, partendo sempre da alcuni valori ricavati tramite GreatSPN. Quelli che ho cerchiato in blu nell’immagine ad esempio servono per il calcolo del numero medio di pezzi nel sistema.
104.
105.
106.
107.
108. Confronto dei risultati: Simulatore vs GreatSPN 0,18599 0,1856 0,18212 15 0,1865 0,1856 0,1806 10 Estremo sup. GreatSPN Estremo inf. Run Throughput 0,8428 0,83663 0,8231 15 0,84391 0,83663 0,81492 10 Estremo sup. GreatSPN Estremo inf. Run Utilizzazione servitore 1 0,6520 0,6445 0,63606 15 0,6503 0,6445 0,6287 10 Estremo sup. GreatSPN Estremo inf. Run Utilizzazione servitore 2 52,64 57,30 46,30 15 52,16 57,30 44,04 10 Estremo sup. GreatSPN Estremo inf. Run Tempo medio di permanenza