Esame di Stato 2008-2009
Bianco Riccardo – 5A Informatica
(realizzata in gruppo con Colosimo Paolo)
La teoria delle code
La distribuzione di Poisson applicata al problema delle file di attesa e le possibili soluzioni
Tesina
Tesina
Indice
Introduzione
Teoria
Breve biografia di Poisson
La variabile casuale poissoniana
Il processo di Poisson
Variabile aleatoria del numero di arrivi
Variabile aleatoria del numero di serviti
Il programma creato
Analisi di un sistema M/M/1 (1 fila d’attesa – 1 stazione di servizio)
Risoluzione dell’esercizio proposto
Analisi dei risultati
Resoconto testuale
Analisi di un sistema M/M/m (1 fila d’attesa – k stazioni di servizio)
Risoluzione dell’esercizio proposto
Analisi dei risultati
Resoconto testuale
Conclusioni generali
Strumenti utilizzati
Bibliografia
2
2
3
4
4
4
7
8
9
13
14
15
16
20
21
23
24
24
24
Pagina 1
Introduzione:
Quanti di noi non si sono trovati almeno una volta nella vita in coda? In autostrada, al supermercato,
all’ufficio postale o in attesa a un call-center: l’elenco di situazioni in cui “perdiamo” tempo ad attendere è
potenzialmente infinito.
Il comportamento che mostriamo in coda assume diverse sfumature: c’è chi
attende tranquillamente il proprio turno, c’è chi comincia a inveire verso gli
impiegati dello sportello, spesso supportato dalle altre persone in coda,
lamentando una scarsa efficienza del servizio e
c’è chi, avendone la possibilità, cambia la sua fila
d’attesa, così come tentò a suo tempo un
automobilista in uno spot pubblicitario del 2000.
Purtroppo, il cambio di corsia non ebbe l’effetto
sperato. L’obiettivo di questa tesina è di dimostrare che le code non sono
regolate dalle leggi di Murphy (“La fila accanto è sempre più veloce”), ma da
leggi matematiche ben precise nelle quali trova larga applicazione la
distribuzione di Poisson.
Teoria:
Come si è già detto, la formazione delle code, e quindi il relativo problema di code si presenta sovente
nella vita di tutti i giorni. Di solito, l’obiettivo di chi fornisce un servizio è di renderlo più efficiente possibile,
per evitare possibili lamentele che potrebbero portare alla perdita del cliente.
Non sempre l’ampliamento del servizio risolve i problemi: si pensi a un’autostrada con 7 caselli. Dopo
continue richieste da parte degli automobilisti, vengono aggiunti altri 5 caselli. Se i caselli aggiunti
rimangono però inutilizzati per la maggior parte del tempo, le spese per il sostentamento delle strutture
aggiunte ricadrebbero sull’utente finale.
Sorge dunque il problema di fornire all’utente un servizio con tempi di attesa accettabili: per questi motivi
è necessario uno studio meticoloso:
 sull’arrivo delle persone alla stazione di servizio
 sulla fruizione del servizio
 sulla partenza delle persone dalla stazione, dopo aver fruito il servizio
In realtà, una coda non si riduce a tre fattori. Si può sapere a priori in che momenti della giornata arriva una
persona per richiedere un servizio? Si sa qual è il tempo medio per servire un utente? Si sa se ogni cliente è
disponibile ad attendere o rinuncia al servizio, provocando un mancato guadagno o peggio ancora la
perdita di tale cliente? Si sa sempre per quanto tempo il gestore resta nullafacente, in attesa di un cliente
da servire? Si conosce a fondo la portata del sistema?
La prima ricerca sulla teoria delle code è opera dell’ingegnere danese A.K. Erlang, che, nei primi decenni del
XX secolo studiò la congestione del traffico telefonico in una centrale telefonica non automatica con N
addetti. Egli introdusse dunque una distribuzione di probabilità (che da lui prese il nome): solo dopo la
Seconda Guerra Mondiale, con lo sviluppo della ricerca operativa, si sono avute applicazioni dei lavori di
Erlang anche in ambiti molto diversi da quello degli impianti telefonici. Va aggiunto, inoltre, che mentre
Pagina 2
nella maggior parte di problemi di R.O. si cerca di ottimizzare una funzione economica, la teoria delle file
d’attesa è volta soprattutto alla descrizione del fenomeno.
Per effettuare lo studio servono dunque diversi parametri. Uno su tutti, l’organizzazione della stazione di
servizio.
Tipo di
Caratteristiche
Rappresentazione schematica
coda *
M/M/1 E’ formata da una sola fila d’attesa e una sola
stazione di servizio. Vale il principio del “prima
arrivi, prima vieni servito”.
Esempio: un ambulatorio medico
M/M/m E’ formata da una sola fila d’attesa, ma viene
gestita con n stazioni di servizio. Anche in
questo caso vale il principio del “prima arrivi,
prima vieni servito”.
Esempio: un negozio con più commessi
E’ formata da n file d’attesa, ciascuna delle
quali servita da una stazione. Non vale più il
principio del “prima arrivi, prima vieni servito”,
o meglio, non vale più globalmente, ma solo
nell’ambito di ogni singola fila.
Esempio: un supermercato
* La notazione usata è stata inventata da David George Kendall:
A/B/c/d/e-x
A: processo stocastico degli arrivi (con M si indicano gli arrivi di tipo markoviano, secondo un processo di
Poisson)
B: processo stocastico dei tempi di servizio (con M si indica una densità di probabilità esponenziale)
c: numero di serventi
d: (facoltativo) Capacità massima della coda (esclusa la capacità del sistema di servizio), se non indicata pari
a∞
e: (facoltativo) Dimensione della popolazione (ovvero, il numero possibile dei clienti del sistema a coda), se
non indicato pari a ∞
x: (facoltativo) Metodo di gestione della coda, se non indicato è FIFO (“il primo arrivato è il primo servito”)
Ma la domanda di fondo è: perché trova larga applicazione la distribuzione di Poisson?
Prima di rispondere a questa domanda, verrà presentato qualche cenno biografico relativo alla vita del
matematico francese.
Breve biografia di Poisson
Simeon Denis Poisson nasce nel 1781 e muore nel 1840. Oltre ad essere un matematico, si è occupato
anche di fisica, astronomia e probabilità.
Tra le altre cose, si ricorda l’applicazione della matematica all’elettricità e al magnetismo.
Inoltre, contribuì allo sviluppo dell’attuale statistica (si occupò di quest’argomento poco
prima della sua morte) introducendo (durante una ricerca sulle statistiche giudiziarie) la
distribuzione di Poisson, limite della distribuzione di Pascal e della distribuzione
binomiale.
Pagina 3
La variabile casuale poissoniana
La variabile casuale poissoniana è definita con la funzione di probabilità
𝝀𝒙
𝑷 𝒙 = (𝒆 )
𝒏!
−𝝀


λ è un qualsiasi valore positivo (λ > 0) equivalente al numero di successi che ci si aspetta che si
verifichino in un dato intervallo di tempo.
x è il numero delle occorrenze per cui si vuole prevedere la probabilità (x ≥ 0)
La poissoniana è detta legge degli eventi rari, in quanto può essere applicata al posto della variabile casuale
binomiale B(p;n) quando la probabilità p di un evento è molto bassa e contemporaneamente la grandezza
del campione n è molto alta, ovvero quando un evento è raro, ma il numero di eventi che si verificano (λ =
np) è comunque finito.
Il processo di Poisson
Il processo di Poisson è un processo puramente casuale di arrivi che soddisfano le seguenti ipotesi:
1. non vi sono mai arrivi simultanei
2. gli arrivi sono eventi indipendenti (dal punto di vista del calcolo delle probabilità)
3. la probabilità pn(t) che in un intervallo di tempo t si abbiano esattamente n arrivi dipende solo da n
e dalla durata di t e non dalla posizione dell’intervallo nell’arco del tempo (condizione di
stazionarietà)
4. la probabilità che in un intervallo di tempo ∆t “sufficientemente piccolo” si abbia un solo arrivo è
direttamente proporzionale: dunque, la probabilità che nell’intervallo ∆t si abbiano due o più arrivi
è trascurabile
Per analizzare il processo degli arrivi secondo le precedenti quattro ipotesi si introducono due variabili
aleatorie:
1. il numero di arrivi in un tempo t
2. la durata dell’intervallo di tempo fra due arrivi successivi
Variabile aleatoria del numero di arrivi
La variabile aleatoria del numero di arrivi si indica con 𝑁(𝑡).
Questa variabile corrisponde al numero degli arrivi nell’intervallo di tempo ]0; 𝑡[. Si può scegliere anche
un intervallo di tempo ]𝑡0 ; 𝑡0 + 𝑡[, così come suggerisce la terza ipotesi di Poisson.
Ad ogni valore di n = 0, 1, 2, 3 … si deve associare la rispettiva probabilità pn(t), ovvero la probabilità che nel
tempo t arrivino nel sistema esattamente n unità.
In primo luogo, si considera il caso n = 0 e si calcola la probabilità che non vi siano arrivi. In un intervallo t
“sufficientemente piccolo” si può verificare al massimo un arrivo (quarta ipotesi). Inoltre, per la proprietà di
distribuzione di probabilità delle variabili casuali
Pagina 4
𝑖= ∞
𝑖= ∞
𝑝𝑖 = 1
𝑒 𝑞𝑢𝑖𝑛𝑑𝑖
𝑝𝑖 Δ𝑡 = 1
𝑖=0
𝑖=0
Per la quarta ipotesi, si ha:
𝑝0 Δ𝑡 = 1 − 𝜆Δ𝑡 − 𝑜(Δ𝑡)
Considerando ora l’intervallo ]𝑡; 𝑡 + Δ𝑡] in cui la probabilità p0(t + ∆t) è composta dai due eventi
𝐸′0 : nell’intervallo di tempo ]0; t] non si hanno arrivi
𝐸′′0 : nell’intervallo ]t; t + ∆t] non si hanno arrivi
per l’indipendenza degli eventi si può scrivere che:
𝑝0 t + Δ𝑡 = 𝑝0 𝑡 ∗ 𝑝0 Δ𝑡
Sostituendo nell’eguaglianza il valore di 𝑝0 Δ𝑡 che si ottiene nella formula precedente si ricava la
relazione:
𝑝0 t + Δ𝑡 = 𝑝0 𝑡 ∗ [1 − 𝜆Δ𝑡 − 𝑜 Δ𝑡 ]
Effettuando le opportune semplificazioni e passando al limite si ha:
𝑝′0 𝑡 = −𝜆 ∗ 𝑝0 𝑡
Risolvendo l’equazione differenziale a variabili separabili (tenendo conto che per t = 0, p0(0) = 1) si ricava:
𝒑𝟎 𝒕 = 𝒆−𝝀𝒕
Questa relazione esprime la probabilità che nell’intervallo di tempo +0; t+ nel sistema vi siano 0 arrivi. In
modo analogo si ricavano le relative equazioni differenziali per n≥1, il cui sistema è risolto da:
𝒑𝒏 𝒕 = 𝝀𝒕
𝒏
(𝒆−𝝀𝒕 )
𝒏!
Si può dunque concludere che N(t) ha una distribuzione di Poisson di parametro 𝜆𝑡. Per avere un paragone
dell’importanza di questa distribuzione, si pensi al ruolo che gioca la distribuzione normale nella teoria del
campionamento.
La funzione che esprime la probabilità che nel sistema vi siano n arrivi è funzione sia di n che di t.
Fissato t, pn(t) risulta funzione di n. Poiché n è un numero naturale, la funzione è una successione e si
rappresenta con punti sul piano cartesiano.
Pagina 5
In questo studio, però, risulta di maggior interesse fissare n, e rappresentare la pn(t) per alcuni valori di n.
Si pone dunque λt = x, e si ha la funzione
(𝒆−𝒙 )
𝒇 𝒏 𝒙 = 𝒙𝒏
𝒏!
Fissando n = 0, 1, 2, 3 si ottiene questo grafico.
Con n piccolo le curve sono asimmetriche, mentre all’aumentare di n tendono a diventare simmetriche.
Ricordando che il valore medio di una variabile distribuita secondo Poisson è il parametro stesso, si ricava
che
𝑴𝑵 𝒕
= 𝝀𝒕
che equivale a dire: il numero medio di arrivi è λt.
Pagina 6
Se poi si fissa t = 1 (unità di tempo), risulta che M*N(1)+ = λ, ragion per cui si può concludere che:
′
𝝀 = 𝒏𝒖𝒎𝒆𝒓𝒐 𝒅𝒊 𝒂𝒓𝒓𝒊𝒗𝒊 𝒏𝒆𝒍𝒍 𝒖𝒏𝒊𝒕à 𝒅𝒊 𝒕𝒆𝒎𝒑𝒐
(1/ λ rappresenta il tempo medio fra due arrivi)
Variabile aleatoria del numero di serviti
L’altra variabile aleatoria considerata nella teoria delle code è 𝑇, ovvero la durata dell’intervallo fra due
arrivi consecutivi.
Per chiarire meglio il concetto, ecco una rappresentazione degli arrivi su un asse temporale, partendo da t =
0.
0
t1
t2
t3
…
Supponiamo di far partire la nostra rilevazione in un negozio alle 16:21. Alle 16:25 arriva il primo cliente,
alle 16:31 il secondo, alle 16:40 il terzo, alle 16:56 il quarto e così via. Questi intervalli di tempo fra due
arrivi successivi sono alcuni dei valori della variabile aleatoria T.
La probabilità che la durata dell’intervallo di tempo fra due arrivi consecutivi sia t si calcola tenendo conto
che:
1. la funzione di ripartizione f(t) = P(T≤t) è la probabilità che l’intervallo di tempo fra due arrivi
successivi sia non maggiore di un certo valore t (>0).
2. se vi sono due arrivi successivi in un tempo ≤ t, vi è almeno un arrivo nell’intervallo di tempo t.
Dunque, la probabilità espressa al punto 1 è uguale alla probabilità che vi sia almeno un arrivo
nell’intervallo di durata t.
Si può quindi scrivere che:
𝑛 =∞
𝑝𝑛 𝑡 = 1 − 𝑝0 𝑡 = 1 − 𝑒 −𝜆𝑡
𝐹 𝑡 = 𝑃 𝑇≤𝑡 = 𝑃 𝑁 𝑡 >0 =
𝑛=1
Siccome nelle distribuzioni continue di probabilità la funzione di densità è la derivata della funzione di
ripartizione, allora si può scrivere che:
𝒇 𝒕 = 𝝀𝒆−𝝀𝒕
Pagina 7
Per t>0, la funzione decresce al crescere di t, quindi la probabilità di avere tempi lunghi fra due arrivi è
molto piccola.
Di contro, è più probabile che fra due arrivi consecutivi ci sia un breve intervallo di tempo. Il valore medio di
questa distribuzione coincide con 1/ λ, che, come già detto, rappresenta il tempo medio fra due arrivi.
Per chiarire questo concetto, facciamo un esempio.
In un negozio di informatica giungono in media 50 persone ogni 25 minuti. Tenendo conto che la
distribuzione è poissoniana, calcolare la probabilità che fra due arrivi successivi ci sia un intervallo non
superiore a 6 minuti.
λ = 50 persone / 25 minuti = 2 persone al minuto
Dalla funzione di ripartizione 𝑭 𝒕 = 𝟏 − 𝒆−𝝀𝒕 si ricava che:
𝑭 𝟓 = 1 − 𝑒 −12 = 𝟎, 𝟗𝟗𝟗𝟗𝟗𝟑𝟖𝟓𝟓
Si è dunque quasi certi che una persona entrerà 5 minuti dopo l’ingresso della precedente.
Per lo studio dei tempi di servizio si può fare un ragionamento simile al precedente, supponendo che le
durate del servizio siano casuali e soddisfino alle condizioni indicate per gli arrivi.
Infatti, la probabilità che un servizio venga effettuato in un ∆t sufficientemente piccolo è pari a µ∆t, con
′
𝝁 = 𝒏𝒖𝒎𝒆𝒓𝒐 𝒅𝒊 𝒔𝒆𝒓𝒗𝒊𝒕𝒊 𝒏𝒆𝒍𝒍 𝒖𝒏𝒊𝒕à 𝒅𝒊 𝒕𝒆𝒎𝒑𝒐
(1/µ rappresenta la durata media del servizio)
Inoltre, la variabile aleatoria “durata di un servizio” è analoga alla variabile aleatoria “durata dell’intervallo
fra due arrivi successivi”. Ragionando come già fatto in precedenza, si può scrivere che:
−𝝁𝒕
𝒈 𝒕 = 𝝁𝒆
Il programma creato
Durante il corso di laboratorio di calcolo è stato creato un
programma che permette la risoluzione di semplici sistemi di code
M/M/1 e M/M/m.
Logo del programma
L’interfaccia grafica è semplice e consente, una volta scelto il tipo di coda, l’immissione di scelte e dati
unicamente numerici (viene infatti effettuato un controllo sui dati immessi da tastiera).
Pagina 8
Dopo aver inserito i dati necessari (ed eventualmente i dati relativi al calcolo delle probabilità) il
programma mostra una schermata con i risultati e permette di effettuare una nuova simulazione, oppure di
esportare un file sul Desktop che contiene il resoconto dettagliato in formato .txt del sistema di coda
simulato.
Con il programma creato, è stato possibile risolvere velocemente due sistemi di coda tra i tanti presenti sui
testi di riferimento. Di seguito verranno riportati due esempi, corredati da una breve spiegazione teorica: il
primo relativo a una coda con una fila d’attesa e una sola stazione di servizio, il secondo con una fila
d’attesa e n stazioni di servizio.
Analisi di un sistema M/M/1 (1 fila d’attesa – 1 stazione di servizio)
Il sistema di coda M/M/1 è caratterizzato da una sola stazione di servizio, che si occupa di soddisfare le
richieste delle unità nell’unica fila d’attesa che si forma.
Indicando con:
λ il numero medio di arrivi nell’unità di tempo
µ il numero medio di utenti serviti nell’unita di tempo
il rapporto fra questi due parametri assume una grande importanza nell’analisi dei sistemi M/M/1: prende
il nome di intensità del traffico o fattore di utilizzazione, e indica il numero medio di unità sotto servizio.
Importante sottolineare che tale rapporto sia minore di 1, altrimenti la fila d’attesa diventerebbe illimitata.
𝜌=
𝜆
𝜇
Di seguito, si riporta la traccia di un tipico esercizio.
A un ufficio di pratiche automobilistiche arrivano, nelle 6 ore di apertura, 48 clienti. Il gestore ha
effettuato uno studio sulla produttività, stabilendo che il numero medio di utenti serviti in un’ora è 13.
Calcolare:
1. la probabilità che un cliente debba attendere in coda
2. il numero medio di utenti presenti nel sistema
3. il numero medio di utenti presenti in coda
4. il tempo medio di attesa in coda
5. il tempo medio di attesa nel servizio
6. il tempo medio di attesa nel sistema
7. la probabilità che in coda siano presenti:
a. esattamente 0 persone (quindi la probabilità di trovare lo sportello libero)
b. almeno 3 persone
c. non più di 4 persone
8. la probabilità di dover attendere più di 15 minuti prima di essere serviti
Probabilità di attendere
La probabilità che un utente entrato nell’ufficio ha di attendere equivale al fattore di utilizzazione,
precedentemente citato.
𝜆
𝜌=
𝜇
Pagina 9
CODICE
Function rho(ByVal lambda As Double, ByVal mu As Double) As Double
rho = lambda / mu
End Function
Numero medio di unità presenti nel sistema
Il numero medio di unità presenti nel sistema equivale al numero di persone che l’utente troverà in coda,
inclusa la persona che attualmente è sotto servizio.
Per effettuare il calcolo, si usa la seguente formula:
𝐸 𝑛 =
𝜌
1− 𝜌
CODICE
Function unitaTot(ByVal rho As Double) As Double
unitaTot = rho / (1 - rho)
End Function
Spesso risulta però più interessante sapere il…
Numero medio di unità presenti in coda
Grazie a questa formula
𝐸 𝑚 =
𝜌
− 𝜌
1− 𝜌
(dove m = n – 1, in quanto non viene considerata l’unità sotto servizio) si è invece in grado di sapere il
numero medio di persone che l’utente troverà in coda, senza includere l’utente che viene servito.
CODICE
Function unitaTot(ByVal rho As Double) As Double
unitaTot = rho / (1 - rho)
End Function
Tempo medio di attesa in coda
Quanto tempo dovrà aspettare l’utente prima di essere servito? A questa domanda, risponde la formula
𝜌2
𝜆
𝑤𝑓 =
=
𝜆(1 − 𝜌)
𝜇(𝜇 − 𝜆)
grazie alla quale si può trovare il tempo di attesa in coda di un unità. Va detto che i due tempi (utenti
arrivati e utenti serviti) devono essere basati sulla stessa unità di misura (nel programma prodotto è stato
scelto il minuto).
CODICE
Function tCoda(ByVal lambda As Double, ByVal mu As Double) As String
tCoda = (lambda / (mu * (mu - lambda)))
tCoda = Orologio(tCoda)
End Function
Pagina 10
Nota: è stata introdotta la funzione Orologio, per convertire un tempo in scala decimale (es: 14,5 minuti) in
scala sessagesimale (es: 14 minuti e 30 secondi)
Tempo medio di attesa nel servizio
Come già accennato nella parte teorica, se µ è pari al numero di serviti nell’unità di tempo, il suo reciproco
1
𝜇
indica la durata media del servizio, e quindi il tempo in cui l’unità viene servita.
CODICE
Function tServente(ByVal mu As Double) As String
tServente = (1 / mu)
tServente = Orologio(tServente)
End Function
Tempo medio di attesa nel sistema
Logicamente, il tempo medio di attesa nel sistema può essere calcolato come la somma fra il tempo speso
in coda e il tempo speso nel servizio. Anche questo calcolo è tuttavia regolato da una formula
1
𝑤=
𝜇− 𝜆
che restituisce il tempo medio di attesa nel sistema, senza prima dover calcolare i due tempi medi (di attesa
in coda e nel servizio). Va detto che (ovviamente) i due risultati coincidono.
CODICE
Function tSistema(ByVal lambda As Double, ByVal mu As Double) As String
tSistema = 1 / (mu - lambda)
tSistema = Orologio(tSistema)
End Function
Calcolo delle probabilità di presenza di n unità nel sistema
Il calcolo delle probabilità relativo alla presenza di n unità nel sistema varia a seconda dei parametri
impostati.
Si suppone, ad esempio di considerare la presenza di 10 unità nel sistema: prima di effettuare calcoli,
bisogna sapere se sono esattamente 10 unità, almeno 10 unità o non più di 10 unità.
Probabilità che nel sistema vi siano esattamente n unità
𝜆 𝑛
𝜆
𝑃𝑛 =
1−
𝜇
𝜇
Probabilità che nel sistema vi siano almeno n unità
𝑃 𝑛 ≥ 𝑁 = 1 − (𝑃0 + 𝑃1 + … + 𝑃𝑁 )
Probabilità che nel sistema vi siano non più di n unità
𝑃 𝑛 ≤ 𝑁 = 𝑃0 + 𝑃1 + 𝑃2 + 𝑃3 + 𝑃4 + … + 𝑃𝑁
Pagina 11
Sviluppando la formula, si ottiene una progressione geometrica, la cui somma è pari a:
𝑃 𝑛 ≤ 𝑁 = 1 + 𝜌𝑁+1
Nell’implementazione dell’algoritmo si è tenuto conto anche di un caso particolare: se si sceglie la
probabilità di trovare almeno 0 persone in coda, in pratica ci si sta chiedendo qual è la probabilità di dover
attendere, che come già visto corrisponde al rapporto fra il numero di arrivi e il numero di serviti.
CODICE
Function probPresenza(ByVal rho As Double, ByVal N As Integer, ByVal tipo As
String) As Double
If N = 0 And ((tipo = "esattamente") Or (tipo = "non più di")) Then
probPresenza = 1 - rho
Exit Function
End If
If N = 0 And tipo = "almeno" Then
probPresenza = rho
Exit Function
End If
If tipo = "esattamente" Then
probPresenza = ((rho ^ N) * (1 - rho))
Exit Function
End If
If tipo = "almeno" Then
i = 0
Pi = 0
While i < N
Pi = Pi + ((rho ^ i) * (1 - rho))
i = i + 1
Wend
probPresenza = 1 - Pi
Exit Function
End If
If tipo = "non più di" Then
probPresenza = 1 - (rho ^ (N + 1))
Exit Function
End If
End Function
Probabilità di dover attendere più di w minuti
Questa probabilità si ricava dalla variabile aleatoria W (tempo di attesa nel sistema), da cui si ricavano
anche il tempo medio di attesa nel sistema e il tempo medio di attesa nella fila. Corrisponde alla probabilità
che un’unità arrivata nel sistema debba attendere più di un certo tempo w prima di essere servita.
Si calcola con la formula:
𝑃 𝑤 > 𝑊 = 𝑒 − 𝜇 −𝜆
𝑤
Pagina 12
CODICE
Function probAttesa(ByVal lambda As Double, ByVal mu As Double, ByVal w As
Integer)
probAttesa = Exp(-(mu - lambda) * w)
End Function
Risoluzione dell’esercizio proposto
Apriamo il programma e selezioniamo il menu Coda M/M/1. Il campo “Numero di stazioni di servizio” sarà
ovviamente non modificabile, e impostato a 1.
Procediamo all’inserimento dei dati.
A inserimento concluso, facciamo click su Simula!. L’applicativo chiederà per mezzo di una finestra di
dialogo se si desidera calcolare anche delle probabilità. Facciamo click su Sì e impostiamo i parametri.
(per calcolare le altre probabilità effettueremo altre due simulazioni con gli stessi dati)
Cliccando su OK il programma ci mostra una finestra con i risultati.
Pagina 13
Altri risultati:
A questo punto possiamo decidere di esportare i risultati sul Desktop, o effettuare una nuova simulazione.
Esportiamo il file e analizziamo i risultati.
Analisi dei risultati:
Dal sistema di coda simulato, emerge che una persona ha circa il 61% di probabilità di dover fare la coda
una volta entrato nell’ufficio di pratiche automobilistiche. La probabilità complementare (ovvero quella di
trovare 0 unità in coda) è del 38,41%.
Troverà dunque altre persone prima di lui: nel caso specifico, può ritenersi abbastanza fortunato, in quanto
mediamente c’è circa una persona in coda e due nel sistema. Infatti, la probabilità di trovare almeno 3 unità
in coda è bassa (23%) e, allo stesso tempo, è molto alta quella di trovare non più di 4 unità in coda (oltre il
90%).
La persona entrata ha circa 1 probabilità su 3 di dover attendere più di 15 minuti. Dopo aver dunque atteso
per 7 minuti e 23 secondi il suo turno, potrà essere servito. Arrivato allo sportello, impiegherà mediamente
4 minuti e 37 secondi per sbrigare la pratica e dopo 12 minuti dal suo ingresso potrà uscire dall’ufficio.
Pagina 14
Resoconto testuale
***********************************
************ FAST QUEUE ***********
***********************************
di Bianco Riccardo e Colosimo Paolo
Data: 17/05/2009
Ora: 13.15.27
Dati della simulazione effettuata
Tipo di coda ......................................... M/M/1
-----------------------------------------------------------Unità arrivate ....................................... 48
In un tempo di ....................................... 6 ore
Unità servite ........................................ 13
In un tempo di ....................................... 1 ora
-----------------------------------------------------------Tempi medi (mm:ss)
Attesa in coda ....................................... 7:23
Attesa nel servizio .................................. 4:37
Attesa nel sistema ................................... 12:00
-----------------------------------------------------------Probabilità di
Attendere ........................................ 0,615384615
Trovare non più di 4 unità in coda ............... 0,911746249
Attendere più di 15 minuti ....................... 0,286504797
-------------------------------------------------------------Numero medio di:
Unità in coda .......................................... 0,985
Unità nel sistema ...................................... 1,6
--------------------------------------------------------------
Pagina 15
Analisi di un sistema M/M/m (1 fila d’attesa – k stazioni di servizio)
Mentre nel sistema di coda M/M/1 veniva considerato un sistema con un’unica fila d’attesa e un unico
posto di servizio, nel sistema M/M/m la fila d’attesa è sempre unica, ma ci sono k posti di servizio, che
vengono definiti canali paralleli.
Un esempio tipico di questo sistema di coda è il problema del parrucchiere con k commessi: il cliente verrà
servito se ci sono posti liberi (quindi, se i clienti presenti n sono minori dei posti di servizio k) mentre dovrà
“leggersi il giornale” se, a un certo istante t, i clienti presenti n sono maggiori dei posti di servizio k.
In questo caso il rapporto
𝜌
𝜆
𝑐𝑜𝑛 𝜌 =
𝑘
𝜇
(con k = n° stazioni di servizio) deve valere meno di 1, altrimenti la fila d’attesa sarebbe illimitata.
Di seguito, si riporta la traccia di un tipico esercizio.
In un magazzino aperto al pubblico arrivano in media 120 clienti al giorno (la giornata lavorativa è di 8
ore). Ogni cliente può essere servito secondo l’ordine di arrivo (FIFO) da uno dei quattro commessi e la
durata media del servizio è pari a 10 minuti. Supponendo che gli arrivi siano distribuiti secondo Poisson e
che i tempi di servizio seguano una legge esponenziale, calcolare:
1. il tempo di attesa in coda
2. il tempo impiegato dal commesso per servire un cliente (in questo caso, 10 minuti)
3. il tempo di attesa nel sistema
4. la probabilità di dover attendere
5. la probabilità di trovare esattamente 3 clienti nel negozio
6. la probabilità di attendere 7 minuti
7. il numero medio di unità in coda e nel sistema
8. i canali mediamente non occupati e quanto tempo al giorno è perso in media dai commessi
perché in attesa di clienti
Probabilità di stato stazionario
La probabilità di stato stazionario corrisponde alla probabilità che nel sistema di coda vi siano esattamente
0 persone. Questa probabilità è alla base di una buona parte dei calcoli che si effettuano per risolvere un
sistema di coda M/M/m.
Si calcola con la formula:
𝑃0 =
𝑛=𝑘−1
𝑥=
𝑛=0
1
𝑥
𝜌𝑛
𝜌𝑘
1
+
∗
𝑛!
𝑘! 1 − 𝜌
𝑘
e consente poi di effettuare i calcoli relativi a ogni 𝑃𝑛 , al numero medio di unità nella fila d’attesa e alla
probabilità che un’unità debba attendere. A loro volta, questi calcoli sono alla base del calcolo del numero
medio di unità presenti nel sistema, dei vari tempi di attesa e della probabilità che un’unità debba
attendere un tempo superiore a w.
Pagina 16
CODICE
Function statoStazionario(ByVal rho As Double, ByVal k As Integer)
sommatoria = 0
i = 0
While i < k
sommatoria = sommatoria + ((rho ^ i) / Fattoriale(i))
i = i + 1
Wend
statoStazionario = 1 / (sommatoria + ((rho ^ k / Fattoriale(k)) * (1 / (1
- (rho / k)))))
End Function
Tempo di attesa in coda
Per calcolare il tempo medio di attesa in coda si utilizza la relazione 𝜈 = 𝜆𝑤𝑓 . Quindi, si può scrivere che:
𝜈
𝑤𝑓 =
𝜆
CODICE
Function tCodaM(ByVal lambda As Double, ByVal ni As Double) As Variant
tCodaM = ni / lambda
End Function
* ni è il numero medio di unità nella fila d’attesa, che deve dunque essere già stato calcolato
Tempo di attesa nel servizio
Il tempo medio di attesa nel servizio è il tempo che occorre a chi serve il cliente per soddisfare le sue
richieste. Nell’esercizio svolto, è chiaro dalla traccia che una persona verrà servita in 10 minuti. Nel caso in
cui la traccia non esplicitasse il tempo di servizio per una singola persona, è possibile ricorrere alla formula
𝑡 = 𝑤 − 𝑤𝑓
ovvero, la differenza fra il tempo speso nel sistema e il tempo atteso in coda.
Tempo di attesa nel sistema
Il tempo medio di attesa nel sistema è il tempo impiegato da un cliente all’interno del magazzino. Si calcola
con la seguente formula:
𝑛
𝑤=
𝜆
CODICE
Function tSistemaM(ByVal lambda As Double, ByVal enne As Double) As Variant
tSistemaM = enne / lambda
End Function
* enne è il valore medio di unità presenti nel sistema, che deve dunque essere già stato calcolato
Probabilità di dover attendere
Per trovare la probabilità che un’unità entrata nel sistema debba attendere prima di essere servita,
riprendiamo il ragionamento fatto nell’introduzione. Se ci sono n persone e k stazioni di servizio:
𝑠𝑖 𝑎𝑡𝑡𝑒𝑛𝑑𝑒
𝑠𝑒 𝑛 > 𝑘
𝑛𝑜𝑛 𝑠𝑖 𝑎𝑡𝑡𝑒𝑛𝑑𝑒
𝑠𝑒 𝑛 ≤ 𝑘
Pagina 17
Fatte queste premesse, la probabilità che un’unità debba attendere equivale alla probabilità che nel
sistema siano presenti tante unità quante sono i posti di servizio, che corrisponde a
𝑛= ∞
𝑃 𝑁≥𝑘 =
𝑃𝑛 =
𝑛=𝑘
𝜌𝑘
1
∗
∗𝑃
𝑘! 1 − 𝜌 0
𝑘
CODICE
Function pAttendereM(ByVal Po As Double, ByVal rho As Double, ByVal k As
Integer) As Variant
a = rho ^ k / Fattoriale(k)
b = 1 / (1 - (rho / k))
pAttendereM = a * b * Po
End Function
*Po è la probabilità di presenza di 0 unità (che dev’essere dunque già calcolata), mentre Fattoriale è una
funzione che consente il calcolo del fattoriale di un numero compreso fra 0 e 170.
Probabilità di trovare esattamente n unità in coda
La probabilità di trovare esattamente n unità in coda differisce lievemente rispetto a quella calcolata in un
sistema M/M/1. Infatti, posto:
𝜆
𝜌=
𝜇
si ottiene un sistema per il calcolo di ogni Pn.
𝜌𝑛
𝑃
𝑠𝑒 𝑛 < 𝑘
𝑛! 0
𝑃𝑛 =
𝑛
𝜌
𝑃
𝑠𝑒 𝑛 ≥ 𝑘
𝑘! 𝑘 𝑛−𝑘 0
Nella funzione creata si è dunque dovuto tenere conto di questa condizione: il numero dei clienti è
maggiore o minore al numero dei posti di servizio?
CODICE
Function probabilitaM(ByVal Po As Double, ByVal rho As Double, ByVal N As
Integer, ByVal k As Integer)
If N < k Then
a = rho ^ N
b = Fattoriale(N)
probabilitaM = (a / b) * Po
Else
a = rho ^ N
b = Fattoriale(k) * (k ^ (N - k))
probabilitaM = (a / b) * Po
End If
End Function
* con Po sempre pari alla probabilità di presenza di 0 unità nel sistema, che dunque dev’essere già calcolato
Nell’esercizio proposto, il numero di clienti per cui si vuole calcolare la probabilità è inferiore al numero di
commessi: il valore di Pn verrà dunque trovato utilizzando il blocco vero dell’if sopra riportato.
Pagina 18
Probabilità di attendere più di n minuti
Spesso può risultare importante sapere quanto tempo un’unità presente nel sistema attenda in coda prima
di essere servita. E’ interessante però sapere anche con quale probabilità un’unità nel sistema attenda più
di w minuti.
La formula per conoscere questo tempo è:
𝑃 𝑊𝑓 > 𝑤 = 𝑒
−𝜇𝑘𝑤
𝑝
1−
𝑘
∗ 𝑃(𝑁 ≥ 𝑘)
CODICE
Function probAttesaM(ByVal mu As Double, ByVal k As Double, ByVal w As
Integer, ByVal rho As Double, ByVal Pnk As Double) As Variant
a = Exp(-mu * k * w * (1 - (rho / k)))
probAttesaM = a * Pnk
End Function
* w è il tempo in minuti per cui si vuole calcolare la probabilità, mentre Pnk corrisponde alla probabilità di
attendere (che, in ordine di esecuzione, dev’essere dunque calcolata precedentemente)
Numero medio di unità in coda e nel sistema
Questi due dati, oltre che essere importanti ai fini del calcolo in sé stesso, sono importanti anche per il
calcolo del tempo medio di attesa in fila e del tempo medio di attesa nel sistema di coda.
Numero medio di unità in coda
Questa quantità si ottiene con la seguente formula
𝜌𝑘+1
𝑛=
∗
𝑘 ∗ 𝑘!
1
1−
𝜌
𝑘
2
∗ 𝑃0
CODICE
Function unitaCodaM(ByVal Po As Double, ByVal rho As Double, ByVal k As
Double) As Variant
a = rho ^ (k + 1)
b = k * Fattoriale(k)
t1 = a / b
c = (1 - (rho / k)) ^ 2
t2 = 1 / c
unitaCodaM = t1 * t2 * Po
End Function
* Po (probabilità di presenza di 0 unità) dev’essere già stata calcolata
Numero medio di unità nel sistema
Per calcolare il numero medio di unità nel sistema, bisogna prima aver calcolato il numero medio di unità in
coda. Infatti, la formula per il calcolo delle unità nel sistema di coda è:
𝑛= 𝜈+ 𝑘− 𝑣= 𝜈+ 𝜌
Pagina 19
CODICE
Function unitaSistemaM(ByVal rho As Double, ByVal ni As Double) As Variant
unitaSistemaM = ni + rho
End Function
*ni è il numero medio di unità in coda
Numero medio di canali non occupati
Un problema che affligge la maggior parte dei gestori di sistemi di coda è (come già detto nella teoria)
l’ottimizzazione del servizio. Quindi, risulta molto importante il calcolo del numero medio di canali non
occupati, al fine di ridurre i costi di gestione.
Si calcola con la seguente formula:
𝑛=𝑘
𝑣=
𝑘 − 𝑛 𝑃𝑛 = 𝑘 − 𝜌
𝑛=0
CODICE
Function canaliNonOccupati(ByVal k As Integer, ByVal rho As Double) As Variant
canaliNonOccupati = k - rho
End Function
Tempo di inattività delle stazioni di servizio
Altro problema di non poca importanza è relativo al tempo di inattività nell’arco della giornata lavorativa
delle stazioni di servizio. Infatti, un tempo elevato può essere (ma non necessariamente) sintomo che la
clientela ritenga il servizio inefficace e dunque preferisca rivolgersi altrove, oppure che siano presenti
troppe stazioni di servizio: il gestore dovrà dunque prendere provvedimenti in tal proposito.
Per questo calcolo risulta necessario sapere in primis il numero medio di canali non occupati. Dunque, la
formula per trovare il tempo di inattività è:
𝑤𝑖𝑛𝑎𝑡𝑡 = 𝑣 ∗ 𝑡𝑒𝑚𝑝𝑜 𝑑𝑒𝑔𝑙𝑖 𝑎𝑟𝑟𝑖𝑣𝑖
CODICE
Function inattivita(ByVal v As Variant, ByVal time As Integer)
inattivita = v * time
End Function
Risoluzione dell’esercizio proposto
Analogamente al precedente esercizio, inseriamo tutti i dati nel programma.
Pagina 20
A questo punto clicchiamo su Simula!. Per inserire le probabilità richieste, facciamo click su Sì alla richiesta
“Vuoi calcolare anche delle probabilità?”
A questo punto, clicchiamo su OK. Il programma restituirà una schermata con i risultati.
Anche in questo caso, possiamo decidere di esportare i risultati sul Desktop o di effettuare una nuova
simulazione. Esportiamo il file ed analizziamo i risultati.
Analisi dei risultati
In questo negozio un cliente che entra ha circa il 32% di probabilità di attendere (l’attesa media è pari a 2
minuti e 8 secondi) l’arrivo di un commesso per essere servito. Al 19% si attesta la probabilità che egli trovi
3 persone in attesa di essere servite, mentre c’è una probabilità su 10 che debba attendere più di 7 minuti.
Il cliente discuterà sul vestito da scegliere con il commesso per circa 10 minuti. Dopo 12 minuti e 8 secondi
il cliente uscirà dal negozio, che mediamente conta tra 0 e 1 unità in coda e circa 3 unità nell’intero sistema.
Per quanto riguarda l’ottimizzazione del servizio, il gestore può ritenersi abbastanza soddisfatto in quanto
nell’arco della giornata le stazioni di servizio non occupate sono 1,5, mentre il tempo di inattività dei
Pagina 21
commessi nelle 8 ore lavorative è pari a 720 minuti, ovvero 12 ore complessive che si perdono in attesa di
clienti.
Va detto che in quest’ottica, riducendo il numero di commessi a 3 si ottengono i seguenti risultati:
Quindi, riducendo i commessi da 4 a 3, il tempo di inattività si riduce di un terzo e i canali non occupati
passano da 1,5 a 0,5, ma aumentano i tempi di attesa per il cliente (il tempo di attesa in coda aumenta di
circa 7 volte) e la probabilità di dover fare la coda, che passa dal 32% al 70%.
Pagina 22
***********************************
************ FAST QUEUE ***********
***********************************
di Bianco Riccardo e Colosimo Paolo
Data: 18/05/2009
Ora: 13.08.11
Dati della simulazione effettuata
Tipo di coda ........................................... M/M/m
-------------------------------------------------------------Unità arrivate ......................................... 120
In un tempo di ......................................... 8 ore
Unità servite ...................................... 1
In un tempo di ..................................... 10 minuti
-------------------------------------------------------------Tempi medi (mm:ss)
Attesa in coda ........................................ 2:08
Attesa nel servizio ................................... 10:00
Attesa nel sistema .................................... 12:08
Inattività delle stazioni di servizio ................. 720:00
-------------------------------------------------------------Probabilità di
Attendere ........................................ 0,319856704
Trovare esattamente 3 unità in coda .............. 0,191914023
Attendere più di 7 minuti ........................ 0,111929935
-------------------------------------------------------------Numero medio di:
Unità in coda .......................................... 0,533
Unità nel sistema ...................................... 3,033
Canali non occupati .................................... 1,5
--------------------------------------------------------------
Pagina 23
Conclusioni generali
Come si nota dall’aggiunta all’esercizio della coda M/M/m, la riduzione dei commessi ha portato alla
diminuzione del numero di canali non occupati e conseguentemente al tempo di inattività delle stazioni di
servizio.
Il problema ricade però sul cliente: una persona che entra nel negozio è disposta ad attendere 7 volte il
tempo che attendeva in precedenza? In generale, lo studio delle file d’attesa permette dunque la
determinazione di parametri come il tempo medio di attesa in coda, la lunghezza media della coda, ecc., in
modo che il gestore possa determinare al meglio l’organizzazione del servizio, con un occhio al disagio
causato dalle attese e un occhio al portafoglio.
Quindi, il servizio dev’essere dimensionato in modo che i clienti attendano poco e i posti di servizio non
utilizzati debbano essere il minor numero possibile. Questi due obiettivi però si contrastano fra di loro: se si
riduce il tempo di attesa, si aumentano le stazioni di servizio e quindi aumentano i costi. Di contro,
diminuendo le stazioni di servizio, e quindi diminuendo i costi, si aumentano i tempi d’attesa, e dunque
bisogna porsi la domanda: il cliente vorrà attendere o si rivolgerà altrove?
In definitiva, qual è il miglior modello di coda tra quelle analizzate: quella con 1 o con k stazioni di servizio?
La coda M/M/m è a piena capacità di servizio quando nel sistema si trovano m clienti, mentre la coda
M/M/1 permette l’erogazione del servizio sempre a piena capacità, anche quando nel sistema si trova solo
un cliente.
Insomma, la scelta del modello di coda ha i suoi vantaggi e i suoi svantaggi: il sistema M/M/1 ha prestazioni
superiori, ma bisogna ovviamente sapere in che contesto è inquadrato.
In conclusione, il problema delle code è abbastanza semplice dal punto di vista numerico, un po’ meno
sotto il punto di vista decisionale.
Strumenti utilizzati:







Microsoft Office 2007, che ha permesso anche la creazione delle varie formule descritte
Microsoft Excel 2007, per le illustrazioni grafiche nella parte teorica
Blocco note, per l’apertura dei file testuali di resoconto
Microsoft Visual Basic 6, per la creazione dell’algoritmo implementato su un’interfaccia grafica
Caratteri tipografici “Ericsson GA628” e “Digital Readout Thick Upright”, per la simulazione dei
display
Carattere tipografico “Ferro Rosso”, per il titolo del programma
Strumento di cattura (presente in Microsoft Windows Vista), per gli screenshoot relativi al
programma
Bibliografia:


Trovato - “Statistica, calcolo delle probabilità, ricerca operativa” – Ghisetti e Corvi Editori
Gambotto Manzone, Longo - “Inferenza statistica e ricerca operativa” - Tramontana
Pagina 24








Schembra - “Metodi per l’analisi e il dimensionamento delle reti / Lezione 2 – Teoria delle code”
(pdf)
“DevX” (http://www.devx.com/vb2themax/Tip/19016) per la funzione del calcolo fattoriale.
“Microsoft Aiuto & Supporto” (http://support.microsoft.com/kb/213449/it) per la funzione che
converte un tempo nel sistema decimale in un tempo nel sistema sessagesimale.
“Il forum di HTML.it” (http://forum.html.it/forum/showthread/t-829214.html) per la funzione che
trova il percorso assoluto del desktop, indipendentemente dal computer su cui si avvia il
programma.
“VB Tips Varie” (http://digilander.libero.it/007mp/vb/vbtips/varie1.htm) per la funzione che
consente di cambiare colore alla barra del titolo
“Flickr” (http://www.flickr.com/photos/ehiuomo/1310624064/) per la foto della barriera di
Venezia-Mestre in copertina
“Wikipedia”, (http://it.wikipedia.org) l’enciclopedia libera
“Youtube”, (http://www.youtube.com/watch?v=UT4dYrpZVY0) per lo spot della compagnia
telefonica “Blu” citato nell’introduzione
Pagina 25