Esempio 3: Mobilificio

Transcript

Esempio 3: Mobilificio
Esempio 3: Mobilificio
Un’azienda operante nel settore dell’arredamento intende simulare il funzionamento del proprio
reparto produttivo. L’azienda produce armadi di diverse qualità, che, a seconda delle esigenza dei
clienti, possono essere standard o personalizzati.
Gli ordini arrivano secondo una distribuzione di Poisson di valor medio L.
All’arrivo di un ordine è necessario un processo di taglio delle lastre e di preparazione dei
semilavorati. Tale processo è effettuato da N1 macchine automatiche identiche, ciascuna delle quali
può produrre un armadio alla volta.
Un eventuale ordine che arrivi quando tutte le macchine sono impegnate viene messo in una coda
FIFO comune a tutte le macchine. La lavorazione di un armadio su una macchina richiede un tempo
uniformemente distribuito in [TMIN1,TMAX1] ed è effettuata senza interruzioni.
Gli armadi devono successivamente subire un’operazione di verniciatura. Gli armadi standard sono
sottoposti a tale operazione su un’unica verniciatrice automatica, che impiega un tempo
uniformemente distribuito in [TMIN2,TMAX2] e che lavora un armadio alla volta. Al termine di
tale operazione esiste una probabilità p1 che la verniciatura risulti difettosa. In tal caso l’operazione
deve essere ripetuta. Gli armadi che devono essere sottoposti a verniciatura e incontrano la
macchina occupata attendono in un’unica coda FIFO. Al termine della verniciatura escono dal
reparto produttivo.
Con probabilità pp il cliente può richiedere un armadio personalizzato. In tal caso la verniciatura è
effettuata da N2 addetti, che impiegano per la lavorazione di un singolo armadio un tempo
uniformemente distribuito in [TMIN3,TMAX3]. Al termine di tale operazione esiste una probabilità
p2 che l’armadio risulti irrimediabilmente danneggiato e debba essere scartato. In tale eventualità
l’ordine viene ripreso dall’inizio delle lavorazioni.
Ogni operatore ha associata una coda FIFO che viene gestita secondo la seguente politica: se
all'arrivo di un armadio c'è un addetto libero, la lavorazione inizia immediatamente, altrimenti
l’armadio viene assegnato all'addetto che ha la coda più corta.
La simulazione termina quando NTOT armadi sono usciti dal sistema (tra scartati e completati). Si
vuole determinare:
•
•
•
•
il tempo medio di permanenza nel sistema degli armadi completati (esclusi gli scartati);
il tempo medio di attesa in coda degli armadi personalizzati completati (esclusi gli scartati);
il tempo medio di attesa in coda degli ordini completati;
il numero di armadi scartati.
Per ottenere i risultati della simulazione si utilizzino i seguenti parametri (le durate si intendano
espresse in minuti):
L=8
N1 = 5
TMIN1 = 20 NTOT = 50
TMAX1 = 50 TMIN2 = 5 TMAX2 = 15 p1 = 0.1
pp = 0.2
N2 = 2
TMIN3 = 40
TMAX3 = 70
1
p2 = 0.2
Proposta di soluzione:
Schema Generale
2
Settore 1: creazione entità ed operazioni.
•
•
L’azienda produce armadi di diverse qualità.
Gli ordini arrivano secondo una distribuzione di Poisson di valor medio L.
Utilizzando il modulo Create, che rappresenta il punto iniziale di ogni simulazione, definiamo il
tipo di entità che vogliamo creare. Inoltre, specificando le modalità di creazione, generiamo il vero
e proprio flusso delle entità nel sistema.
3
Attraverso un modulo Assign, che ci permette di settare nuovi valori a variabili, attributi e variabili
di sistema, definiamo il nuovo attributo “T_INIZIO” settandolo opportunamente a “TNOW”
(istante nel quale l’entità attraversa tale blocco).
Viene poi settato anche l’attributo “Vecchio” a 0, per definire appunto che l’entità rappresenta un
nuovo ordine appena creato.
•
All’arrivo di un ordine è necessario un processo di taglio delle lastre e di preparazione dei
semilavorati. Tale processo è effettuato da N1 macchine automatiche identiche, ciascuna
delle quali può produrre un armadio alla volta.
Il processo di taglio é simulato attraverso il modulo Process. Settando il campo “Action” con
l’opzione “Seize Delay Release” otteniamo le specifiche volute, cioè un’operazione che richiede
una coda, che richiede un ritardo e che infine rilascia l’entità. Passiamo ora a definire le specifiche
che riguardano le risorse utilizzate, settando ad 1 la quantità della risorsa “Tagliatrice”, proprio
perché essa può produrre un armadio alla volta.
4
•
La lavorazione di un armadio su una macchina richiede un tempo uniformemente distribuito
in [TMIN1,TMAX1] ed è effettuata senza interruzioni.
Per simulare il tempo di lavorazione di un processo occorre settare l’opzione “Delay Type” che
specifica il tipo di ritardo. Abbiamo diverse scelte a seconda delle specifiche; nel nostro caso
selezioniamo l’opzione “Uniform” e poi specifichiamo il minimo e il massimo della distribuzione
uniforme, settando i rispettivi campi “Minimum” e “Maximum”.
•
•
L’armadio Personalizzato risulta irrimediabilmente danneggiato e debba essere scartato.
In tale eventualità l’ordine viene ripreso dall’inizio delle lavorazioni.
5
Questo modulo Decide viene creato per suddividere gli ordini nuovi da quelli vecchi, che devono
esseri ripresi dopo che un armadio è stato scartato. La scelta viene fatta attraverso il confronto
dell’attributo “Vecchio” (“Type” impostato a “2-way by Condition”). L’attributo come abbiamo
visto è settato per ogni nuova entità a 0. Quindi, se il valore è ad 1, significa che l’ordine è tornato
indietro. Dovrà allora essere subito rispedito verso il sottomodello Verniciatura Personalizzata,
ricordandoci infatti che soltanto gli ordini di tipo Personalizzato potevano essere ripresi dall’inizio.
•
•
A seconda delle esigenza dei clienti, possono essere standard o personalizzati.
Con probabilità pp il cliente può richiedere un armadio personalizzato.
Al contrario se si ha una nuova entità creata (“Vecchio” a 0) essa è inviata verso un altro modulo
Decide per simulare la probabilità che un cliente richieda nel proprio ordine un armadio Standard o
uno Personalizzato, impostando correttamente il valore “Type” a “2-way by Chance”.
Dopo la suddivisione degli ordini, sempre con due moduli Assign, settiamo i due attributi
“ASPETTATO” e “Personalizzato” come in figura.
6
•
Gli armadi devono successivamente subire un’operazione di verniciatura.
Per rappresentare le due diverse tipologie di verniciatura si è deciso di usare due sottomodelli.
Sottomodello: Verniciatura Standard
•
Gli armadi standard sono sottoposti a tale operazione su un’unica verniciatrice automatica,
che impiega un tempo uniformemente distribuito in [TMIN2,TMAX2] e che lavora un
armadio alla volta.
7
Con un altro modulo Process simuliamo l’operazione di verniciatura standard settando tale modulo
come avevamo fatto per l’operazione di taglio proprio perché abbiamo specifiche simili.
•
Al termine di tale operazione esiste una probabilità p1 che la verniciatura risulti difettosa.
In tal caso l’operazione deve essere ripetuta.
Con un altro modulo Decide simuliamo la probabilità che la verniciatura risulti difettosa.
Ovviamente se si ha esito negativo l’entità continua il suo cammino nel sistema, se no l’ordine
ritorna nel modulo “Verniciatrice Standard” per ripetere il processo.
8
Sottomodello: Verniciatura Personalizzata
•
In tal caso la verniciatura è effettuata da N2 addetti, che impiegano per la lavorazione di un
singolo armadio un tempo uniformemente distribuito in [TMIN3,TMAX3].
Utilizziamo questa volta moduli separati, cioè un modulo Process per ogni addetto (N2 addetti =
N2 processi), per gestire al meglio il fatto che abbiamo una coda per ogni risorsa.
9
•
Se all'arrivo di un armadio c'è un addetto libero, la lavorazione inizia immediatamente.
Con un modulo Decide a tre vie selezioniamo il processo che ha momentaneamente la propria
risorsa libera. Per fare ciò aggiungiamo nelle condizioni le due espressioni:
o Verniciatura P1.WIP == 0
o Verniciatura P2.WIP == 0
•
Altrimenti l’armadio viene assegnato all'addetto che ha la coda più corta.
Se non ci sono addetti liberi allora si passa al secondo modulo Decide che indirizza le entità verso
la coda più corta. Questa volta abbiamo un'unica espressione che rappresenta la condizione da
verificare; cioè controlliamo se il numero di entità in coda nel modulo “Verniciatura P1” è minore
uguale di quelli in coda nel secondo processo:
o NQ(Verniciatura P1.Queue)<=NQ(Verniciatura P2.Queue)
10
N.B.
Ad una prima analisi poteva sembrare ovvio utilizzare soltanto quest’ultimo blocco Decide con la
sua unica condizione; infatti verificando il numero di entità in coda avremmo subito indirizzato gli
ordini verso il processo momentaneamente più libero. Ma operando così non avremmo tenuto in
conto il caso in cui il numero di entità di entrambe le code fosse stato zero, mentre nel modulo
“Verniciatura P1” si aveva un ordine che occupava la risorsa e in “Verniciatura P2” risorsa libera.
Così facendo il blocco “Coda P1 più corta?” avrebbe infatti spedito l’ordine verso il processo P1,
rallentando le operazioni e quindi non simulando correttamente il sistema.
•
Al termine di tale operazione esiste una probabilità p2 che l’armadio risulti
irrimediabilmente danneggiato e debba essere scartato.
Sempre con un modulo Decide simuliamo la probabilità che l’armadio si rovini e venga scartato.
11
•
In tale eventualità l’ordine viene ripreso dall’inizio delle lavorazioni
Se questo si verifica l’entità passa prima in nuovo modulo Assign e poi riprende il suo percorso
all’interno del sistema ritornando al modulo ”Taglio”, proprio perché devono essere ripetute tutte le
operazioni.
Il blocco “ArmadiRovinati” setta ovviamente ad 1 l’attributo “Vecchio” e attraverso la nuova
variabile “rovinati”, utilizzata come contatore, aggiorna il numero di armadi scartati. Viene anche
modificato l’attributo ASPETTATO, settandolo ad “Entity.WaitTime”, per mantenere il tempo
d’attesa, se c’è stato, dell’ordine scartato. Infine, il tempo di ingresso nel sistema dell’armadio viene
re-inizializzato (sto per iniziare a lavorare un nuovo mobile relativo ad un vecchio ordine).
Code
•
•
•
Tutte le macchine sono impegnate viene messo in una coda FIFO (Taglio)
(V. Standard)
Attendono in un’unica coda FIFO
Ogni operatore ha associata una coda FIFO
(V. Personalizzata)
Per definire il tipo di coda associata ad ogni processo apriamo la tabella “Queue” in “Basic
Process”. Come notiamo, di default, abbiamo sempre una coda di tipo FIFO; quindi nel nostro caso
non occorre apportare nessuna modifica.
Risorse
12
•
•
Tale processo è effettuato da N1 macchine automatiche identiche (Taglio)
Tale operazione su un’unica verniciatrice automatica
(V. Standard)
• In tal caso la verniciatura è effettuata da N2 addetti
(V. Personalizzata)
Infine ricordiamoci di controllare il valore “Capacity” nella tabella “Resource” in “Basic Process”.
Di default le capacità di ogni risorsa sono settate ad uno, quindi andiamo a modificare solo il valore
della risorsa “Tagliatrice” settandolo appunto ad 5 = N1. Da notare infatti che il campo “Capacity”
accetta solo valori di tipo intero e non variabili. Invece, siccome abbiamo utilizzato due risorse
divise per il processo di Verniciatura Personalizzata, le capacità di “Addetto1” e “Addetto2”
rimangono ovviamente ad uno.
Ora che tutte le operazioni sono state eseguite le entità possono uscire dal sistema, cioè devono
essere solo distrutte, ma prima di ciò attraverso altri moduli raccogliamo dati e statistiche per poi
ricavare i risultati voluti.
Settore 2: statistiche e distruzione entità.
Gli armadi personalizzati terminato il processo di verniciatura (se tale verniciatura è andata a buon
fine) entrano nel blocco “attesoP ?”. È un modulo Decide che seleziona le entità che hanno atteso
almeno in una coda all’interno dell’intero sistema da quelle che invece non hanno mai aspettato.
Tale scelta viene effettuata a seconda che il valore “Entity.WaitTime”, che memorizza appunto il
tempo di attesa dell’entità, sia maggiore dell’ attributo ASPETTATO. Ricordiamo infatti che
quest’ultimo è sempre settato a zero e il suo valore può variare soltanto se l’ordine deve essere
ripreso dall’inizio a causa di un armadio scartato. In altre parole, l’attributo ASPETTATO
13
memorizza tutto il tempo trascorso in coda dagli armadi relativi allo stesso ordine che sono stati
scartati NON includendo invece il tempo di attesa in coda dell’ultimo armadio che finalmente è
stato verniciato correttamente.
Se la condizione è verificata l’ordine (l’armadio) finisce nel modulo Assign che aumenta il tempo
di attesa in coda globale degli armadi della quantità necessaria. La variabile modificata è:
Sia che l’armadio abbia aspettato o meno, dobbiamo incrementare il numero di armadi
personalizzati usciti dal sistema in modo da poter usare il dato per calcolare il tempo medio atteso
in coda dagli armadi personalizzati completati:
14
Ora tutti gli ordini confluiscono nell’ultimo blocco dedicato alle statistiche, il modulo Assign
“Incrementa Usciti”che, come dice il nome stesso, incrementa il valore di una nuova variabile ogni
volta che un ordine esce dal sistema, aggiornando ogni volta così il numero totale di ordini
terminati. In più vengono prese altre statistiche:
In particolare:
• viene incrementata la variabile che memorizza il numero di armadi/ordini completati
15
•
la variabile che memorizza il tempo totale passato dagli armadi completati nel sistema
•
la variabile che memorizza il tempo totale passato nel sistema dagli ordini
In conclusione tutte le entità finiscono nel modulo Dispose, punto di fine di ogni simulazione.
Qui le entità vengono distrutte e vengono raccolte le statistiche.
Variabili
L=8
N1 = 5
TMIN1 = 20
NTOT = 50
TMAX1 = 50 TMIN2 = 5 TMAX2 = 15 p1 = 0.1
16
pp = 0.2
N2 = 2
TMIN3 = 40
p2 = 0.2
TMAX3 = 70
Ora non ci rimane che aprire la tabella “Variable” in “Basic Process”, inserire ancora le variabili
che ci servono, impostare tutti i valori che ci vengono assegnati e selezionare le variabili che
vogliamo che compaiano sulle tabelle delle statistiche.
•
La simulazione termina quando NTOT armadi(tra completati e rifiutati) sono usciti dal
sistema (o anche quando NTOT ordini sono stati completati).
Ricordarsi poi di impostare nel menù “Run Setup” la condizione di terminazione della simulazione
(NTOT = 50).
17
•
Si vuole determinare:
o il tempo medio di permanenza nel sistema degli armadi completati (esclusi gli
scartati);
o il tempo medio di attesa in coda degli armadi personalizzati completati (esclusi
gli scartati);
o il tempo medio di attesa in coda degli ordini completati;
o il numero di armadi scartati.
Le statistiche vengono definite nella tabella “Statistic” in “Advanced Process”. Non e’ necessario
definire nella tabella il numero di armadi scartati perché e’ sufficiente cercare nei risultati il valore
della variabile rovinati.
Infine eseguire la simulazione, mandando in “run” il sistema e attendere i relativi risultati.
18