Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Telecomunicazioni LS
4 Appendice algoritmi 41
1
Chapter 1
1.1 Requisiti
Realizzare un simulatore software per lo studio del comportamento di sistemi
i cui arrivi sono generati da processi di Poisson, Pareto e Switched Poisson
Process. Si richiede di valutare i seguenti indici di prestazione:
1
IDC è la misura normalizzata della dispersione di una distribuzione di probabilità.
Misura quanto un set di arrivi sono dispersi regolarmente rispetto ad un modello statistico
standard. Essa è definita come rapporto tra varianza e media.
2
Validare i dati sperimentali ottenuti tramite i modelli matematici studiati.
2
1.2 Analisi del problema
1.2.1 Simulatore statistico e modelli di traffico
Il simulatore statistico da realizzare prevede lo studio di tre modelli di traf-
fico differenti. Il sistema a stati risultante ha come rappresentazione dello
stato corrente il numero degli arrivi. Una singola simulazione ha come
oggetto di studio uno o più modelli di traffico ed è composta da un nu-
mero m di esperimenti ognuno dei quali comprende un campione di n arrivi
generati.
Ogni modello di traffico riproduce nel simulatore il comportamento del
sistema reale corrispondente. Il comportamento emerge dallo studio dell’in-
sieme dei tempi di arrivo ottenuti fornendo in input alla legge caratteristica
del modello una generazione di numeri random.
Le formule analitiche che descrivono le leggi caratteristiche di ogni mo-
dello sono riassunte nella tabella (1.1).
Pareto
x
αK α
Z
K x≥κ
τ= α+1
dt = 1 con
κ t (1 − y) α x<0
SPP
− ln(y) − ln(y)
τ= z=
λi qi
3
Sono riportate di seguito le equazioni usate nel simulatore per il calcolo
degli indici di prestazione:
Intervallo di confidenza
r
S 2 (n)
δ = t(n−1, 1− α2 )
n
Index of dispersion for counts
V ar[k(T )]
IDC(T ) =
E[k(T )]
4
1.2.2 Parametri di ingresso
Nella tabella seguente i parametri da specificare al simulatore:
Simulatore
s numero di simulazioni
m numero di esperimenti per simulazione
n numero di arrivi per esperimento (campione)
Poisson
λ frequenza degli arrivi
Pareto
α specifica α per la distribuzione di Pareto
κ specifica κ per la distribuzione di Pareto
SPP
λ0 frequenza degli arrivi per lo stato 0
λ1 frequenza degli arrivi per lo stato 1
q01 frequenza del cambio di stato 0 → 1
q10 frequenza del cambio di stato 1 → 0
5
1.3 Simulazioni ed analisi dei risultati
Con lo scopo di descrivere in modo chiaro i risultati ottenuti dal lavoro del
simulatore, vengono presentate per ogni serie di simulazioni una tabella di
input, una tabella di output e la rappresentazione grafica dell’andamento
dell’indice di prestazione richiesto.
Una serie di simulazioni prevede che ogni singola simulazione venga lan-
ciata con lo stesso numero di esperimenti. La numerosità del campione
oggetto del singolo esperimento varia da simulazione in simulazione, in par-
ticolare viene incrementata fino ad un valore limite nell’ultima simulazione.
Pertanto le tabelle input e output sono relative alla simulazione più affida-
bile, ovvero quella con la più alta numerosità del campione.
6
Figure 1.1: Andamento δ in Poisson
7
1.3.2 Simulazioni Pareto
• Il valore δ nelle serie Pareto (2.2) e Pareto (3.2) decresce con l’aumen-
tare della numerosità del campione di arrivi n, mentre nella serie
Pareto (1.2) ha un valore maggiore ed instabile. Questo risultato è
dovuto al notevole indice di varianza questa particolare distribuzione
• Il valore dell’indice IDC nel caso della serie Pareto (3.2) è circa 0.24
per poi arrivare al valore 0.82 della serie Pareto (2.2). Nel caso della
serie Pareto (1.2) invece ha un valore elevato 10.8 ovvero ciò che ci si
aspetta da una distribuzione con una burstiness elevata.
8
Figure 1.2: Andamento δ in Pareto (1.2)
9
Figure 1.3: Andamento δ in Pareto (2.2)
10
Figure 1.4: Andamento δ in Pareto (3.2)
11
1.3.3 Simulazioni SPP
• Il valore δ sia nella serie SPP (1) che nella serie SPP (2) decresce fino
a stabilizzarsi su valori molto bassi
• Il valore IDC nel caso della serie SPP (1) presenta un valore molto
alto, giustificato dal bursting forzato dalla differenza 5 ÷ 50 tra le
frequenze di arrivo tra gli stati q0 e q1 . A conferma di questa ipotesi,
nella serie SPP (2) il valore dell’IDC scende fino ad 1.03 portandosi
al valore atteso per una distribuzione di Poisson
12
Figure 1.5: Andamento δ in SPP (1)
13
Figure 1.6: Andamento δ in SPP (2)
14
1.3.4 Simulazione comparativa
Per ottenere dei dati confrontabili dalla simulazione comparativa, bisogna
imporre ai tre modelli di traffico lo stesso valore della frequenza degli arrivi λ.
Lo si può fare a posteriori, calcolando il valore di λ prodotto dal modello
SPP ed imponendolo in ingresso al lancio della serie di Poisson. Per la serie
di Pareto bisogna calcolare il parametro κ derivandolo dal λ di riferimento.
• L’indice IDC nel caso della serie SPP presenta un valore molto alto,
giustificato dal bursting forzato dalla differenza 5 ÷ 50 tra le frequenze
di arrivo degli stati q0 e q1 . Nella serie Poisson raggiunge il valore
atteso ∼ 1 e nella serie Pareto assume il valore ∼ 0.3
15
Figure 1.7: Andamento δ nell’analisi comparativa
16
Chapter 2
2.1 Requisiti
Realizzare un simulatore software per lo studio del comportamento di sistemi
a coda M/G/1 ovvero sistemi in cui gli arrivi, di tipo poissoniani, sono
processati da un solo servitore secondo una semplice politica First Come
First Served. Per i tempi di servizio è richiesto lo studio di tre casi differenti:
• La stima del tempo medio di attesa in coda degli utenti (η̄) ed il suo
andamento
17
2.2 Analisi del problema
2.2.1 Simulatore statistico e sistemi a coda
Il simulatore statistico da realizzare prevede lo studio di tre sistemi a coda
che differiscono per la distribuzione dei tempi di servizio. Il sistema M/G/1
ha come rappresentazione dello stato corrente il numero degli utenti presenti
ed è un sistema ad eventi. Gli eventi si dividono in arrivi e partenze. Un
evento di arrivo ha come parametri l’istante di arrivo e il tempo di servizio,
mentre un evento partenza ha come parametri l’istante di partenza.
Il simulatore implementa un algoritmo che porta a compimento ogni sin-
gola simulazione analizzando gli eventi generati. La pseudocodifica dell’algo-
ritmo è riassunta nell’appendice (4 - 4.2). L’algoritmo utilizza una struttura
dati che contiene gli eventi ordinati in base al tempo. La simulazione ter-
mina quando il numero degli eventi di partenza analizzati raggiunge il nu-
mero degli eventi di arrivo. Al termine della simulazione, vengono calcolati
gli indici η̄ e δ e graficato l’andamento.
Le formule analitiche che regolano la generazione dei tempi di servizio
sono riassunte nella tabella (2.1).
M/D/1
θ = θ̄
M/Pareto/1
κ
θ= 1
(1 − y) α
dove
θ̄(α − 1)
κ=
α
18
2.2.2 Parametri di ingresso
Nella tabella seguente i parametri da specificare al simulatore:
Simulatore
N numero totale di arrivi per simulazione
θ̄ tempo medio di servizio
ρ utilizzazione del servitore (0 < ρ < 1)
α specifica α per la distribuzione di Pareto
19
Sistema Tempo medio di attesa in coda η̄
M/G/1
λE[θ̄2 ]
η̄ =
2(1 − ρ)
M/M/1
E[θ̄2 ] = 2θ2
λ2θ2 λθ2
η̄ = =
2(1 − ρ) (1 − ρ)
M/D/1
E[θ̄2 ] = θ2
λθ2
η̄ =
2(1 − ρ)
M/Pareto/1
θ̄2
E[θ̄2 ] = θ̄2 +
α(α − 2)
λ θ̄2
η̄ = (θ̄2 + )
2(1 − ρ) α(α − 2)
20
2.3.1 Simulazione M/G/1 con α = 2.5
id serie N θ̄ ρ − range α
M/M/1 1 · 105 5 0.01 ÷ 0.9 −
M/D/1 1 · 105 5 0.01 ÷ 0.9 −
M/Pareto/1(2.5) 1 · 105 5 0.01 ÷ 0.9 2.5
id serie ρ η̄atteso η̄ δ
M/M/1 0.1 0.556 0.551 0.01
M/D/1 0.1 0.278 0.279 0.0050
M/Pareto/1(2.5) 0.1 0.5 0.441 0.012
M/M/1 0.2 1.25 1.268 0.016
M/D/1 0.2 0.625 0.635 0.0070
M/Pareto/1(2.5) 0.2 1.125 0.979 0.017
M/M/1 0.5 5.0 4.989 0.036
M/D/1 0.5 2.5 2.478 0.016
M/Pareto/1(2.5) 0.5 4.5 4.367 0.061
M/M/1 0.8 20.001 20.412 0.103
M/D/1 0.8 10.001 9.903 0.046
M/Pareto/1(2.5) 0.8 18.001 16.011 0.105
M/M/1 0.9 45.001 42.16 0.191
M/D/1 0.9 22.501 22.025 0.1
M/Pareto/1(2.5) 0.9 40.501 36.68 0.193
21
Figure 2.1: Andamento η̄(ρ)
22
Figure 2.2: Andamento δ relativo ad η̄
23
2.3.2 Simulazione M/G/1 con α = 1.5
id serie N θ̄ ρ − range α
M/M/1 1 · 105 5 0.01 ÷ 0.9 −
M/D/1 1 · 105 5 0.01 ÷ 0.9 −
M/Pareto/1(1.5) 1 · 105 5 0.01 ÷ 0.9 1.5
id serie ρ η̄atteso η̄ δ
M/M/1 0.1 0.556 0.551 0.01
M/D/1 0.1 0.278 0.277 0.0050
M/Pareto/1(1.5) 0.1 −0.093 111.999 6.049
M/M/1 0.2 1.25 1.25 0.016
M/D/1 0.2 0.625 0.627 0.0070
M/Pareto/1(1.5) 0.2 −0.209 7.203 0.261
M/M/1 0.5 5.0 5.04 0.036
M/D/1 0.5 2.5 2.533 0.016
M/Pareto/1(1.5) 0.5 −0.834 338.575 7.364
M/M/1 0.8 20.001 19.917 0.098
M/D/1 0.8 10.001 9.618 0.045
M/Pareto/1(1.5) 0.8 −3.334 439.304 5.221
M/M/1 0.9 45.001 47.041 0.208
M/D/1 0.9 22.501 24.312 0.105
M/Pareto/1(1.5) 0.9 −7.501 185.956 1.496
24
Figure 2.3: Andamento η̄(ρ)
25
Figure 2.4: Andamento δ relativo ad η̄
26
2.3.3 Simulazione M/G/1 con α = 3
id serie N θ̄ ρ − range α
M/M/1 1 · 105 5 0.01 ÷ 0.9 −
M/D/1 1 · 105 5 0.01 ÷ 0.9 −
M/Pareto/1(3) 1 · 105 5 0.01 ÷ 0.9 3
id serie ρ η̄atteso η̄ δ
M/M/1 0.1 0.556 0.54 0.01
M/D/1 0.1 0.278 0.273 0.0050
M/Pareto/1(3.0) 0.1 0.371 0.378 0.0080
M/M/1 0.2 1.25 1.256 0.016
M/D/1 0.2 0.625 0.623 0.0070
M/Pareto/1(3.0) 0.2 0.834 0.823 0.013
M/M/1 0.5 5.0 5.05 0.036
M/D/1 0.5 2.5 2.534 0.016
M/Pareto/1(3.0) 0.5 3.334 3.221 0.026
M/M/1 0.8 20.001 20.39 0.107
M/D/1 0.8 10.001 9.336 0.044
M/Pareto/1(3.0) 0.8 13.334 13.512 0.079
M/M/1 0.9 45.001 43.409 0.198
M/D/1 0.9 22.501 24.17 0.107
M/Pareto/1(3.0) 0.9 30.001 29.629 0.133
27
Figure 2.5: Andamento η̄(ρ)
28
Figure 2.6: Andamento δ relativo ad η̄
29
Chapter 3
Sistema a coda
M/G/1//PRIO
3.1 Requisiti
Realizzare un simulatore software per lo studio del comportamento di sistemi
a coda M/G/1//PRIO con priorità non preemptive.
Come nel capitolo precedente, si tratta di sistemi a coda infinita in cui
gli arrivi, di tipo poissoniani, sono processati da un solo servitore.
La differenza sostanziale con i sistemi simulati finora è nella politica
con cui vengono servite le richieste. Il servitore deve rispondere a richieste
appartenenti a diverse classi di priorità, ognuna delle quali ha una propria
frequenza di arrivo (λ) ed un indice di classe (C) che definisce la classe
di appartenenza di una richiesta. Il simulatore deve quindi schedulare le
richieste pendenti in base alla priorità della classe di appartenenza secondo
questi criteri:
• Il tempo medio di attesa (η̄) per ogni richiesta, in assenza delle classi
di priorità
30
Per semplicità effettuare le simulazioni generando tempi di servizio pois-
soniani, focalizzando quindi lo studio sui sistemi M/M/1. In seguito bisogna
validare analiticamente e confrontare i risultati ottenuti.
31
3.2 Analisi del problema
3.2.1 Simulatore statistico e sistemi a coda con gestione delle
classi di priorità
Il simulatore statistico da realizzare prevede lo studio di un sistema
M/G/1//PRIO che ha come rappresentazione dello stato corrente il numero
degli utenti presenti.
Ogni utente è associato ad una classe di priorità. Il sistema gestisce
la coda rispettando le priorità tra gli utenti, dando quindi precedenza di
servizio agli utenti che appartengono alla classe di priorità con indice mi-
nore. Trattandosi di un sistema M/G/1, ciò impone al simulatore (come
nel capitolo precedente) la gestione degli eventi, questa volta guidata dalle
classi di priorità. Gli eventi differiscono dagli stessi studiati per il capi-
tolo precedente per la presenza aggiuntiva dell’identificativo della classe di
priorità.
L’algoritmo implementato nel simulatore utilizza due strutture dati, esse
contengono rispettivamente un lista degli eventi futuri che contiene gli eventi
ordinati in base al tempo di occorrenza ed una lista di coda degli utenti
ordinati in base alla classe di priorità e al tempo di arrivo. La pseudo-
codifica dell’algoritmo per il simulatore è riportata nell’appendice (4 4.4).
La simulazione termina quando il numero degli eventi di partenza analizzati
raggiunge il numero degli eventi di arrivo. Al termine della simulazione,
vengono calcolati gli indici η̄ e δ e graficato l’andamento degli stessi.
32
3.2.2 Parametri di ingresso
Nella tabella seguente i parametri da specificare al simulatore:
Simulatore
N numero totale di arrivi per simulazione
θ̄ tempo medio di servizio
ρ utilizzazione del servitore (0 < ρ < 1)
nclassi numero delle classi di priorità
33
Sistema M/M/1
Tempo di interarrivo τ
− ln(y)
τ=
λ
Tempo di servizio θ
− ln(y)
θ= 1
θ̄
ζ̄
η¯r =
(1 − Sr−1 )(1 − Sr )
Pr 2
1 i=1 λi 2θ
Pr
Sr = i=1 ρi
η¯0 = 2 1−ρ0
r
λi 2θ2
P
ζ̄ = 12 ri=1 λi E[θi 2 ] η¯1 = 12 (1−ρ0i=1
P
⇒ )(1−ρ 0 −ρ1 )
E[θi 2 ] = 2θ2
Pr
λi 2θ2
η¯2 = 12 (1−ρ0 −ρ1i=1
)(1−ρ0 −ρ1 −ρ2 )
34
3.3.1 Simulazione M/M/1//PRIO con 2 classi di priorità
35
Figure 3.1: Andamento η̄(x) per 2 classi di priorità
36
Figure 3.2: Andamento δ relativo ad η̄ per 2 classi di priorità
37
3.3.2 Simulazione M/M/1//PRIO con 3 classi di priorità
38
Figure 3.3: Andamento η̄(x) per 3 classi di priorità
39
Figure 3.4: Andamento δ relativo ad η̄ per 3 classi di priorità
40
Chapter 4
Appendice algoritmi
41
Listing 4.1: Algoritmo simulatore a coda M/G/1, utility
1 /∗∗
∗ Utility
3 ∗/
inizializza() {
5 k = 0;
free = 0.0;
7 now = 0.0;
arrivi = 0;
9 partenze = 0;
w = 0.0;
11 inserisci nuovo evento(expon(lambda),arrivo,serv());
}
13 // genera un tempo interarrivo con distribuzione
// esponenziale con parametro lambda
15 expon(lambda);
// genera un tempo di servizio secondo la distribuzione scelta
17 serv();
42
Listing 4.2: Algoritmo simulatore a coda M/G/1
1 /∗∗
∗ Algoritmo
3 ∗/
inizializza();
5 while (partenze < N) {
e = estrai evento();
7 now = e time;
if (e type == arrivo) {
9 k++;
arrivi++;
11 if (k == 1) {
free = now + e service;
13 } else {
w = w + (free − now);
15 free = free + e service;
}
17 inserisci nuovo evento(free, partenza, 0);
if (arrivi < N) {
19 inserisci nuovo evento(now + expon(lambda), arrivo, serv());
} else if (e type == partenza) {
21 k−−;
partenze++;
23 }
}// fine while
25 // tempo medio di attesa in coda
w = w/N;
43
Listing 4.3: Algoritmo simulatore a coda M/G/1, utility
/∗∗
2 ∗ Utility
∗/
4 inizializza() {
k = 0;
6 free = 0.0;
now = 0.0;
8 arrivi = 0;
partenze = 0;
10 w = 0.0;
for (j = 1; j <= C; j++) {
12 arrivi[j] = 0;
w[j] = 0;
14 inserisci nuovo evento(expon(lambda[j]), arrivo, serv());
}
16 }
// inserisce un nuovo utente in fondo alla lista
18 appendi(q[j], time, service);
inserisci nuovo evento(time, type, class, service);
44
Listing 4.4: Algoritmo simulatore a coda M/G/1
1 /∗∗
∗ Algoritmo
3 ∗/
inizializza();
5 while (partenze < N) {
e = estrai evento();
7 now = e time;
if (e type == arrivo) {
9 k++;
arrivi++;
11 arrivi[e class]++;
if (k == 1) {
13 free = now + e service;
inserisci nuovo evento(free, partenza, e class, 0);
15 } else {
free = free + e service;
17 appendi(q[e class], now, e service);
}
19 if (arrivi < N) {
inserisci nuovo evento(
21 now + expon(lambda[e class]),
arrivo, e class, serv(e class)
23 );
}
25 } else if (e type == partenza) {
k−−;
27 partenze++;
if (k > 0) {
29 j = 1;
while (q[j] == NULL){
31 j++;
w[j] = w[j] + (now − q[j] t arr);
33 inserisci nuovo evento(
now+q[j] service, partenza, j, 0
35 );
q[j] = q[j] next;
37 }
}
39 }
} // fine while
41 for (j = 1; j <= C; j++) {
w = w + w[j];
43 // tempo medio di attesa in coda per la classe j
w[j] = w[j]/arrivi[j];
45 }
w = w/N;
45