Simulazione - Politecnico di Bari

annuncio pubblicitario
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
CAPITOLO VII
7. - Simulazione
Su una definizione rigorosa della Simulazione esistono pareri discordi. Preferiamo dare
una definizione implicita, riassumendo ciò che ne costituisce usualmente il contenuto.
Fare una simulazione significa:
1) Osservare un sistema fisico;
2) Costruire un modello che riproduca le caratteristiche e le regole di funzionamento
essenziali del sistema in esame;
3) Condurre esperimenti sul modello, ossia dedurre, in modo economico ed in tempo
ridotto, il comportamento del sistema reale sotto condizioni prefissate, realizzando
tramite il modello diversi campionamenti del sistema in esame;
4) Analizzare i risultati, valorizzando le alternative di decisione e ricavando
informazioni sui legami tra le decisioni studiate e le prestazioni del sistema.
Quando è impossibile o troppo costoso osservare direttamente il comportamento e
l'evoluzione di un sistema reale, o qualora siano richieste informazioni su un sistema
ancora in fase di progetto, una tecnica usuale è quella di ricorrere a sperimentazioni in
scala ridotta su sistemi pilota.
Spesso però non è possibile, per ragioni tecniche o di costo, fare un modello in scala
ridotta: in tal caso si supplisce con opportune tecniche di Ricerca operativa ed il sistema
viene riprodotto in un modello matematico di tipo deterministico che permette ancora di
studiarne ed ottimizzarne il comportamento.
Vi sono infine casi in cui il sistema osservato è troppo complesso per poterlo descrivere in
termini matematici, o casi in cui, pur essendo possibile in teoria la costruzione di un
modello matematico soddisfacente, la interazione fra le variabili in gioco rende sterili i
risultati, in tali circostanze la Simulazione è l'unico potente strumento di indagine
applicabile e pur non essendo una tecnica ottimizzante fornisce risposte con margine di
errore controllabile e quindi contenibile entro la approssimazione richiesta.
105
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
7.1 - Cenni storici
La Simulazione è una evoluzione e generalizzazione del problema del "Random walk".
L'esempio classico di "Random walk" è un modello che riproduce gli spostamenti casuali
di un ubriaco, inizialmente fermo presso un lampione: il modello permette di determinare
con una certa significatività la distanza media dal punto di partenza dopo un numero n di
passi fatti a caso, mediante la ricostruzione di molti itinerari possibili e la loro valutazione
probabilistica.
Durante la II guerra mondiale Ulam e Von Newmann generalizzarono questa idea,
applicandola al Calcolo Numerico e ad altri problemi pratici, e la perfezionarono nel
cosiddetto metodo di Montecarlo.
Un esempio di applicazione del metodo di Montecarlo è il calcolo di un integrale definito:
b
∫ f ( x)dx
a
dove f(x) è una funzione integrabile in (a, b).
Supponiamo di potere rappresentare la funzione come in figura
Supponiamo di conoscere un valore F tale che, per a < x < b sia F >f (x); pertanto è un
valore maggiore o uguale al massimo relativo di f(x) in (a, b).
Supponiamo di suddividere sia l'intervallo (0, F) che l'intervallo (a, b) in un certo numero
di punti intermedi, fitti adeguatamente.
106
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
Supponiamo di avere suddiviso l'intervallo (0, F) mediante N1 punti, e (a, b) mediante N2
punti. Supponiamo inoltre di scrivere ciascuno dei valori dei punti di separazione e dei
punti di estremo su una tessera e di mettere le tessere risultanti in due urne.
La prima conterrà N1 + 2 tessere relative ai punti dell'intervallo (0, F), la seconda N2 + 2
tessere relative all'intervallo (a, b).
Con riferimento ad una delle due urne, se le tessere in essa contenuta sono uguali tra loro,
ciascuna di esse ha una uguale probabilità "a priori" di essere estratta da un operatore
bendato.
Tale operatore ha il compito di volta in volta di estrarre una tessera da ciascuna delle due
urne. Lettone i valori rispettivamente segnati, le tessere estratte vengono reimmesse nelle
urne di origine, affinché vengano ripristinate le condizioni iniziali.
Si ha così a disposizione un procedimento che di volta in volta ci fornisce una coppia di
valori casuali (x , y ) tali che 0 ≤ y ≤ F e a ≤ x ≤ b .
Ciascuna di tali coppie (x , y ) generate casualmente viene ad essere sottoposta al seguente
test di accettazione:
Dato x si calcola f ( x ); se risulta y ≤ f ( x ) allora la coppia (x , y ) , rappresentativa di un
punto sottostante la curva y = f (x), viene accettata e si contabilizza, se invece è y > f ( x ) ,
allora la coppia (x , y ) è rappresentativa di un punto del rettangolo che ricade sopra la
curva.
Nel corso delle estrazioni, detto E il numero corrente delle estrazioni effettuate ed A il
numero di punti accettati, calcoliamoci di volta in volta il rapporto A/E < 1.
Nei primi cicli tale valore subirà delle oscillazioni da una estrazione all'altra, ma dopo un
numero sufficientemente elevato di prove esso tenderà a stabilizzarsi intorno ad un valore
limite poco variabile da una estrazione all'altra.
Ottenuta una sufficiente stabilizzazione di A/E potremo dire, sulla base della relazione di
proporzionalità:
⎛ A ⎞ S ( sottesa da f ( x ))
⎜ ⎟=
S ( rett .golo )
⎝E⎠
che, essendo
b
S ( sottesa da f ( x)) = ∫ f ( x) dx
a
e
S (rettangolo) = F · (b-a)
fornisce:
b
⎛ A⎞
∫ f ( x) dx = ⎜⎝ E ⎟⎠ ⋅ F ⋅ (b − a)
a
Per esemplificare, se su E = 1000 estrazioni di coppie , se ne sono potute accettare A =
897, si ha:
b
897
∫a f (x ) dx = 1000 (b − a ) ⋅ F = 0,897 (b − a ) ⋅ F
Con il che si è calcolato approssimativamente l'integrale ricercato.
107
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
7.2 - Problemi di altra natura
Il metodo Montecarlo, nato come si è visto, per soddisfare l'esigenza di eludere le
difficoltà del Calcolo Numerico in quei casi di difficile approccio, e in cui era sufficiente
una certa approssimazione, è stato poi applicato anche a problemi di altra natura (specie
nel campo economico ed organizzativo), laddove è presente la necessità di dare una stima
statistica a variabili aleatorie.
Facciamo subito un esempio per chiarire le applicazioni del metodo a questo tipo di
problemi.
7.2.1. - Problema del giornalaio (o della determinazione del lotto economico di
magazzino).
Un giornalaio vende giornali a € 1,50 /copia. Il suo guadagno è di € 0,25/copia.
Le copie non vendute giorno per giorno non possono essere rese.
Il numero di copie richieste al giorno non è costante ma è soggetto ad oscillazioni non
prevedibili. Se egli al mattino ritira in agenzia un numero di copie insufficiente, allora ha
un mancato guadagno di € 0,25 per ogni copia richiesta dopo che ha esaurito quelle
ritirate. Per ogni copia ritirata ma non venduta egli registra invece una perdita di € 1,25.
Dopo una esperienza di vendita di 50 giorni, il giornalaio si pone il problema di
determinare il numero di copie da ritirare ogni giorno in agenzia, che gli garantisca il
conseguimento del massimo profitto in un certo periodo di tempo a venire.
Nei 50 giorni le richieste hanno dato i risultati riportati in tabella:
Nr. Copie Rich.
0
1
2
3
4
5
6
7
8
9
10
11 o più
Nr. Giorni
1
1
3
6
10
11
9
3
3
2
1
0
50
In istogramma:
12
10
8
6
4
2
0
0 1 2 3 4 5 6 7 8 9 10 11
Il giornalaio ha ragione di credere che questi
dati siano sufficientemente significativi e che
anche nel futuro immediato l'andamento delle
richieste non se ne scosterà.
Assunta questa tabella come base statistica
per la previsione, nelle considerazioni che
seguono ci serviremo della tabella come di
una legge di probabilità, cioè tratteremo le
frequenze registrate come delle probabilità.
108
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
Ad es.:
1) La probabilità di vedere richieste 3 copie in un giorno varrà: 6/50 = 0,12.
2) Quella di vedere più di 7 copie:
3
2
1
6
+
+
=
= 0,12
50 50 50 50
Indicato con Ri il numero di copie richieste in un dato giorno i e con C il numero di copie
che decide di ritirare ogni giorno, il profitto (o perdita) che egli registra nel giorno i si può
valutare in base alle seguenti considerazioni:
A) Se è Ri > C, a fine giornata si ha un utile pari a a Pi = 0,25 · C;
B) Se è Ri < C allora a fine giornata si ha Pi = 0,25·Ri -1,25 (C-Ri) = 1,50 Ri – 1,25 C
Fatto riferimento ad un periodo futuro di 100 giorni (ad esempio), il problema è quello di
determinare il numero di copie da acquistare giorno per giorno, che consenta di ottenere il
massimo profitto.
La maniera con cui si procede è la seguente:
Prefissato un certo numero C di copie ritirate, si ricostruisce una "possibile" sequenza del
numero di copie richieste nei 100 giorni a venire, quale è possibile desumere assumendo
la distribuzione probabilistica in istogramma, e servendosi di un generatore di numeri
casuali [ad una certa sequenza di numeri casuali corrisponde una sequenza di valori
casuali di richieste, la quale ci consente di "simulare" il loro futuro andamento], di
ricostruirne una storia possibile.
E' da osservare che, in questo caso, la generazione di valori casuali potrebbe essere anche
ottenuta in maniera diretta prendendo 50 palline e scrivendo su una di esse il nr.0 (0 copie
richieste), su una di esse il valore 1, su tre di esse il valore 2 e così via: in tal modo
ciascuna pallina corrisponde ad una possibile giornata di vendita.
Se vogliamo far uso del solito "generatore" (urna con palline numerate da 1 a 1.000)
allora dobbiamo associare a ciascuna classe di numero di copie richieste in un giorno un
certo intervallo di "numeri casuali" che le corrisponde.
Tale intervallo deve essere proporzionale alla frequenza relativa di tale classe rispetto alle
altre.
Così avremo:
Nr. Copie
Freq.
richieste Assolute
0
1
2
3
4
5
6
7
8
9
10
11 o più
1
1
3
6
10
11
9
3
3
2
1
0
Freq.
Relativ.
1/50
1/50
3/50
6/50
10/50
11/50
9/50
3/50
3/50
2/50
1/50
0
1÷1.000 nr.
Casuali
asssociati
1÷20
21÷40
41÷100
101÷220
221÷420
421÷640
641÷820
821÷880
881÷940
941÷980
981÷1.000
1÷50 nr.
Casuali
associati
1
2
3÷5
6÷11
12÷21
22÷32
33÷41
42÷44
45÷47
48÷49
50
109
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
Naturalmente anzicchè disporre di un'urna con 1.000 palline, potremo disporre di un'urna
con sole 50 palline, una per ciascun giorno. Operando come detto, si estraggono 100
numeri casuali che ci consentono di "simulare" le richieste quali "possono" verificarsi nei
100 giorni a venire, in tal modo perveniamo alla determinazione di 100 valori casuali di
Ri. A questo punto possiamo calcolare i profitti Pi nell'ipotesi di C=1, di C=2, C=3, C = 4
e così via. La tabella che ne risulta è del tipo:
Giorno
Num.
simulato Estrattto
Valore
casuale
associato
8
4
6
5
1
6
6
5
5
7
……..
……..
1
891
2
221
3
650
4
631
5
28
6
641
7
815
8
503
9
491
10
838
…
……
100
…….
Totale
Media Giornal. Profitti
Nr. Domande non Soddisf.
% Domande non soddisf.
C = 3 ⇒ Pi = € 48,75
C = 4 ⇒ Pi = € 48,00
Pi nell'ipotesi di
C=2
C=3
+ 0,50
+ 0,50
+ 0,50
+ 0,50
- 1,00
+ 0,50
+ 0,50
+ 0,50
+ 0,50
+ 0,50
…….
…….
+ 45,50
+ 0,455
301
59,1
+ 0,75
+ 0,75
+ 0,75
+ 0,75
- 2,25
+ 0,75
+ 0,75
+ 0,75
+ 0,75
+ 0,75
……..
…….
+ 48,75
+ 0,4875
218
42,8
C=4
+ 1,00
+ 1,00
+ 1,00
+ 1,00
- 3,50
+ 1,00
+ 1,00
+ 1,00
+ 1,00
+ 1,00
………
………
+ 48,00
+0, 480
140
27,5
C=5
+ 1,25
- 0,25
+ 1,25
+ 1,25
- 4,75
+ 1,25
+ 1,25
+ 1,25
+ 1,25
+ 1,25
………
………
+ 18,75
+ 0,1875
78
15,3
ottimo
non si discosta troppo dall'ottimo.
Una domanda che ci si può porre è: fino a che punto sono attendibili i valori ottenuti?
In effetti è solo estendendo il numero di cicli che aumenta la probabilità che le risposte
ottenute siano attendibili (all'aumentare del numero di cicli le medie dovrebbero assumere
valori più stabili e quindi dovrebbe essere possibile trarre conclusioni più fondate).
Nel problema appena analizzato l'unica grandezza aleatoria considerata è stata la richiesta
giornaliera di giornali. E' evidente che la situazione prospettata, è semplificativa rispetto
alla realtà nella quale si possono avere ritardi nelle consegne; in cui il cliente non
soddisfatto due o tre volte può essere perduto per sempre e così via.
Se volessimo tener conto dei vari fattori casuali che possono verificarsi e che possono
incidere sulle vendite, dovremmo allora servirci per ciascuno di essi di uno (o più)
diagrammi di campionamento dai quali estrarre, in corrispondenza di numeri casuali, i
valori casuali delle grandezze aleatorie in gioco. In tal caso le grandezze che andremo a
prendere in considerazione (profitto, numero di richieste inevase ecc.) per decidere circa il
valore di C da assumere si determinano per effetto del concorso di più fattori aleatori,
ciascuno dei quali è indipendente dagli altri; sarà campionato l'uno indipendentemente
dagli altri.
110
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
L’elaborazione effettuata può essere considerata il risultato di un campionamento.
Immaginiamo di ripetere tale elaborazione cambiando i semi delle serie di numeri casuali
per un certo numero di volte e di mediare i risultati ottenuti. In tal modo abbiamo delle
previsioni più verosimili, tenuto conto dell’unico parametro che che si è considerato che
in questo caso è la “richiesta di giornali”.
E' per questo tipo di problemi che può allora parlarsi di "simulazione" basata su metodi di
campionamento Montecarlo relativo alle varie grandezze aleatorie in gioco.
7.2.2. - Il problema delle pratiche
Un ufficio riceve ogni giorno un certo numero n di pratiche da sbrigare nel giorno stesso.
Questo numero è una variabile aleatoria della quale si conosce l’andamento nei due mesi
precedenti (50 giorni lavorativi in totale) che viene riassunto nella tabella che segue:
Figura 4
N. delle pratiche ricevute in
un giorno
N. dei giorni
Frequenza (%)
560
570
580
590
600
610
620
1
7
13
16
9
3
1
0,02
0,14
0,26
0,32
0,18
0,06
0,02
Ed è lecito presumere che in futuro, gli arrivi avverranno ancora con le stesse frequenze.
Altrettanto può dirsi per un’altra variabile aleatoria, che rappresenta il numero delle
pratiche sbrigabili da un singolo individuo durante una giornata lavorativa (8 ore). Detto
numero dipende da un insieme di fattori quali la complessità delle pratiche, le condizioni
psico-fisiche dell’impiegato, ecc.. Si possono ritenere sufficienti le informazioni (pure
relative al passato) riassunte nella seguente tabella:
Figura 5
N. delle pratiche sbrigate in
un giorno da ogni impiegato
N. dei giorni
Frequenza (%)
43
44
45
46
47
48
49
50
51
52
1
3
5
9
12
8
5
4
2
1
0,02
0,06
0,10
0,18
0,24
0,16
0,10
0,08
0,04
0,02
111
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
Il costo orario di ciascun impiegato è di € 7,50 per ore lavorative e di € 12,50 per ore
straordinarie.
Si vuole determinare il numero degli impiegati che realizza il costo minimo giornaliero di
esercizio per l’ufficio.
Allo scopo, eseguiremo una gestione simulata per un certo numero di giorni facendo
coppie di estrazioni da un’urna contenente 50 palline numerate da 00 a 49.
La prima estrazione di ciascuna coppia simulerà il numero di pratiche ricevute in un dato
giorno dall’ufficio secondo la seguente legge in corrispondenza (che tiene conto delle
frequenze riportate nella fig. 4).
Numeri estratti
00
da 01 a07
da 08 a 20
da 21 a 36
da 37 a 45
da 46 a 48
49
N. Pratiche
560
570
580
590
600
610
620
La seconda estrazione riguarderà invece il numero di pratiche sbrigate in quel giorno da
un impiegato secondo la seguente legge associativa.
Numeri estratti
00
da 01 a03
da 04 a 08
da 09 a 17
da 18 a 29
da 30 a 37
da 38 a 42
da 43 a 46
da 47 a 48
49
N. Pratiche
43
44
45
46
47
48
49
50
51
52
Eseguire 50 estrazioni e calcolare i costi pertinenti ad una gestione con 9, 10, 11, 12, 13
individui e determinare il costo giornaliero medio minimo.
112
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
I numero II numero
N.
estratto estratto pratiche
ricevute
N.
pratiche
che un
imp. può
sbrigare
in un
giorno
9 impiegati
costo ore ord.
Giornaliere
€ 540,00
Straordinari
Ore Costi
10 impiegati 11 impiegati 12 impiegati 13 impiegati
costo ore ord. costo ore ord. costo ore ord. costo ore ord.
Giornaliere
Giornaliere
Giornaliere
Giornaliere
€ 600,00
€ 660,00
€ 720,00
€ 780,00
Straordinari
Straordinari
Straordinari
Straordinari
Ore costi Ore costi Ore costi Ore costi
Totale costi ordinari
Totale costi straordinari
Totale costi
COSTO MEDIO
GIORNALIERO
7.3. - Generazione di variabili aleatorie per la simulazione
Abbiamo già visto che generalmente un modello di simulazione è un modello
intrinsecamente stocastico. Infatti, poiché i valori usati per le variabili di ingresso, per le
variabili di stato iniziale e per i parametri sono decisi a partire dal sistema reale attraverso
una serie di misurazioni fisiche, ogni valore appartiene in effetti a una distribuzione di
probabilità. Questo, sia perché la natura del sistema reale è generalmente probabilistica,
sia perché ogni operazione di misura è di per sé affetta da un errore di natura stocastica.
In considerazione dei processi stocastici che involgono sia le variabili casuali discrete che
continue, definiremo una funzione F(x), chiamata funzione di distribuzione
cumulativa di x, che indica la probabilità che una variabile casuale X assuma un valore ≤
x. Se la variabile random è discreta, x assume valori specifici ed F(x) è una funzione a
scalini. Se la random è continua, F(x) è continua nel dominio di x; quindi è possibile
differenziare questa funzione e definire
f(x) =
dF ( x )
dx
[7.1]
La derivata f(x) è chiamata funzione densità di probabilità. Infine, la funzione
cumulativa di distribuzione può essere definita matematicamente come
x
F(x) = P(X≤ x) = ∫−∞ f (t )dt
[7.2]
dove F(x) è definita nell’intervallo 0 ≤ F(x) ≤ 1, ed f(t) rappresenta il valore della funzione
densità di probabilità di una variabile X quando X=t.
Le variabili random uniformemente distribuite giocano un ruolo fondamentale nella
generazione di variabili random ottenute da altre distribuzioni di probabilità. Indicheremo
le variabili uniformi con r, con 0 ≤ r ≤ 1, ed F(r) = r.
113
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
Nel seguito esamineremo una serie di metodi per generare variabili random
uniformemente distribuite nell’intervallo (0,1). Questi numeri sono chiamati numeri
pseudo-casuali perché, sebbene essi siano generati con formule ricorsive completamente
deterministiche con un computer, le loro proprietà statistiche coincidono con le proprietà
dei numeri generati con un meccanismo ideale che sceglie in maniera indipendente i
numeri in un intervallo (0,1), e con tutti i numeri che hanno la stessa probabilità di essere
estratti. Non appena questi numeri pseudo-casuali superano una serie di test, possono
essere utilizzati veramente come numeri casuali, anche se non lo sono.
Se vogliamo generare variabili casuali xi da una particolare popolazione statistica la cui
funzione di distribuzione sia data da f(x), dapprima otteniamo una funzione cumulata di
distribuzione F(x). Poiché F(x) è definita nell’intervallo 0-1 possiamo generare numeri
casuali uniformemente distribuiti e porre F(r) = r. E’ chiaro che x è univocamente
determinato dalla relazione r = F(x). Segue perciò, che per ogni particolare valore di r,
diciamo r0, possiamo generare, se è possibile trovare il valore di x, nel caso di x0,
corrispondente ad r0, mediante la funzione inversa di F, se è nota,
x0 = F-1(r0)
[7.3]
-1
dove F (r) è la trasformazione inversa di r nell’intervallo nel dominio di x.
Possiamo riassumere questo metodo matematicamente dicendo che, se generiamo numeri
uniformemente distribuiti in corrispondenza di un dato F(x),
r = F(x) =
∫
x
−∞
f (t )dt
[7.4]
allora
P(X≤x) = F(x) = P[r≤ F(X)] = P[F-1( r ) ≤ x]
e, di conseguenza, F ( r ) è una variabile che ha f(x) come sua funzione densità di
probabilità. Questa procedura è chiamata metodo della trasformazione inversa.
Forse la più semplice funzione continua densità di probabilità è quella che è costante in
un intervallo (a,b) ed è 0 altrove.
Questa funzione densità di probabilità definisce ciò che è noto come distribuzione
uniforme o rettangolare. Il principale valore della distribuzione uniforme per le tecniche di
simulazione è la sua semplicità ed il fatto che può essere usata per generare variabili
casuali da numerose altre distribuzioni di probabilità.
Ogni modello va pertanto usato introducendovi valori estratti da distribuzioni di
probabilità, e la simulazione avrà luogo attraverso il ricorso a tecniche Monte Carlo per la
generazione degli ingressi e dei parametri del sistema.
-1
7.3.1. Numeri casuali a distribuzione uniforme
Una distribuzione uniforme (o rettangolare) è quella in cui una variabile x può assumere
con eguale probabilità uno qualsiasi dei valori compresi in un intervallo a ≤x ≤ b.
Figura 7.15 Densità uniforme
Figura 7.16 Distribuzione cumulativa uniforme
114
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
La funzione densità f(x) ha la forma di figura 7.15,
con
f(x) = 1/(b - a) per a ≤ x ≤ b
ed
f(x) =0 altrove;
cioè è costante sull'intero intervallo a, b.
Qui X è una variabile casuale definita nell’intervallo (a,b).
La fig. 7.15 riporta il grafico della distribuzione uniforme. La distribuzione cumulata
F(x), per una variabile casuale uniformemente distribuita X è data da
x 1
dt = x − a 1
0 ≤ F(x) ≤ 1
[7.5]
F(x) = ∫a
b−a
b−a
Per simulare una distribuzione uniforme in un dato dominio (a,b) dobbiamo
innanzitutto ottenere la trasformazione inversa per la formula precedente, in accordo
con la relazione x0 = F-1(r0)
X= a+ (b-a) r
0≤r≤1
[7.6]
Una volta generata una serie di numeri pseudocasuali corrispondenti al range delle
probabilità cumulate, cioè variabili casuali uniformi definite nel range 0-1. Ogni
numero casuale r determina univocamente una variabile x uniformemente distribuita.
Una spiegazione grafica servirà forse a spiegare questa affermazione La figura 7.16
illustra il fatto che ogni valore generato di r è associato con uno ed un sol valore di x.
Per esempio, il valore specifico della funzione di distribuzione cumulata in r0 fissa il
valore di x a x0.
Ovviamente questa procedura può essere ripetuta quante volte si vuole, generando ogni
volta un nuovo valore di x.
La funzione di distribuzione cumulativa F(x) ha la seguente espressione:
X
1
x−a
dx =
F(X) = prob [a ≤x ≤ X] = ∫
per a ≤x ≤ b
[7.7]
−∞ b − a
b−a
=0
per x<a
=1
per x>b
come mostrato nella figura 7.16.
Nella discussione che segue considereremo la distribuzione uniforme con a = 0, b=
l e cioè definita da
f(x) =1
0 ≤x ≤ 1
=0
altrove.
La x è una variabile reale che si assume possa prendere uno qualsiasi degli infiniti
valori reali compresi tra a e b. Quando si usa un calcolatore ciò è impossibile perché i
valori che può assumere una variabile sono tutti quelli ammessi dalla lunghezza della
1
x
dx è uguale a
+ C. Per trovare il valore della costante di integrazione C,
b−a
b−a
notiamo che quando x=a, F(x)=0. Sostituendo questi valori nella equazione precedente troviamo
a
−a
x
a
x−a
+ C = 0 e quindi C =
, da cui
F(X) =
=
.
−
b−a b−a b−a
b−a
b−a
115
Politecnico di Bari – Riservato alla circolazione interna
1
X
Si ricordi che ∫a
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
parola che è appunto rappresentata con un numero finito di bit. In pratica quindi
occorrerà subire una certa granularità, che varia col tipo di elaboratore che si adopera.
Esistono molti processi fisici che possono essere considerati come generatori di
numeri a caso uniformemente distribuiti. Giudicare se un processo è o meno un processo
casuale equivale a stabilire se le predizioni sul suo comportamento futuro non possono o
possono essere migliorate dalla conoscenza del comportamento passato.
Esiste una lunga storia di costruzioni di macchine per generare numeri a caso, nate con
la necessità di costruire modelli fisici per la simulazione di sistemi stocastici. Le prime
macchine di un certo rilievo furono costruite per studiare la risposta delle centrali
telefoniche alla variazione fluttuante della domanda.
Successivamente, ne furono costruite altre per lo studio della congestione del traffico.
Le macchine venivano usate per produrre tabelle di numeri a caso che gli analisti
potevano poi usare nello studio dei sistemi.
Le macchine di tipo meccanico furono basate sul principio di un disco diviso in
settori eguali e numerati, che veniva fatto ruotare da un motore e arrestato dopo un
tempo arbitrario, accettando come numero a caso il numero del settore che si arrestava
in corrispondenza di un indice.
Le macchine di tipo elettronico furono basate su un generatore di impulsi pilotato da
una sorgente di rumore (agitazione termoionica, sorgente radioattiva ecc.) in modo da
avere impulsi di periodo casuale. Gli impulsi vengono contati da un contatore decimale
che conta ciclicamente da 0 a 9 e viene letto a intervalli fissi. Viceversa, si può usare un
generatore d'impulsi periodici e un contatore arrestato a intervalli random. Usando n
sorgenti di rumore e altrettanti contatori in parallelo, è possibile ottenere numeri random
di n cifre decimali.
Un metodo più classico è il metodo dell'urna: dischetti numerati sono messi in un'urna
e mescolati prima di ogni estrazione. Ogni dischetto estratto, dopo esser stato letto è
reintrodotto nell’urna. Molti esperimenti hanno mostrato che questo metodo ha discrete
caratteristiche random, come vedremo più avanti richiamando l'esempio che segue. Un
insieme di 1000 dischi numerati da 1 a 10 (100 per tipo) è preparato ed estratto con le
regole dette. I risultati di una prova di 5000 estrazioni sono stati i seguenti:
Numero
N. volte estratto (x)
(x- x )2
1
511
121
2
462
1444
3
382
13924
4
570
4900
5
596
9216
6
500
0
7
576
5776
8
411
7921
9
508
64
10
484
256
5000
43622
Il numero medio di estrazioni attese per ciascun tipo di disco è x =500.
116
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
Si nota invece che i dischetti di tipo 4, 5, 7 sono stati estratti in numero molto
maggiore alla media, e quelli di tipo 3 e 8 in numero molto inferiore. Lo scostamento dalla
media si riflette nella grandezza (x - x )2 che sarà usata in seguito per misurare la bontà del
meccanismo di estrazione.
La Rand Corporation ha pubblicato una tavola di 1 milione di numeri casuali del
valore da 0 a 9 prodotti con un generatore elettronico alla velocità di uno al secondo. La
tavola è divisa per comodità in colonne da 2 cifre o 5 cifre, a seconda dei testi, ma questa
suddivisione ha soltanto lo scopo di facilitare la lettura.
Numeri a caso di più di una cifra si ottengono facendo successive letture. Per un
corretto impiego, l'entrata in una tavola per la lettura di una cifra va fatta in modo
random. Una procedura è la seguente:
chiudere gli occhi, puntare il dito su un punto delle tavole e leggere il numero puntato.
Un altro metodo è quello di usare le prime due cifre lette come coordinate (riga,
colonna) per scegliere una nuova cifra che sarà quella voluta. Dopo aver formato un
numero della lunghezza voluta, ad esempio il numero 3754, esso può essere assunto come
≤ 1 premettendogli una virgola (cioè 0,3754).
E' possibile introdurre la tavola in un elaboratore e leggerla in qualche modo casuale
accettabile per generare sequenze casuali.
Un tale metodo risulterebbe però troppo costoso per lo spazio occupato dalla tavola e
per il tempo richiesto ad accedervi. Per tal motivo si sono sviluppati metodi per la
generazione automatica di sequenze casuali basate nell'uso di una formula aritmetica. In
essi, si comincia con un numero qualsiasi fornito, dall'esterno, dal programmatore, e sulla
sua base si genera un secondo numero. Questo è a sua volta usato come base per la
generazione di un terzo ecc.
Queste sequenze sono dette pseudo-casuali perché si ripetono dopo un periodo che
può essere reso arbitrariamente lungo, ma è tuttavia finito. In esse è inoltre possibile fare
previsioni sul loro comportamento futuro, contravvenendo così alla definizione
precedentemente data di processo perfettamente casuale.
Sussiste, infine, il dubbio filosofico sulla effettiva possibilità di considerare casuale
una sequenza generata a mezzo di una formula deterministica.
In pratica queste difficoltà si aggirano, tuttavia, dicendo che una sequenza è una
sequenza random se soddisfa alcuni prefissati test di casualità. Da questo punto di vista, il
metodo usato per la generazione diventa del tutto irrilevante.
Storicamente, il primo metodo aritmetico per generare numeri pseudo-casuali a mezzo
di un elaboratore è stato quello denominato del "centro del quadrato", in cui ogni
numero della sequenza è ottenuto prendendo la cifra centrale del quadrato del numero
precedente.
117
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
Riportiamo nella tabella 7.1 che segue 30 numeri random di 4 cifre generati utilizzando il
metodo del centro del quadrato cominciando con un numero iniziale pari a 3456. Usando
la terminologia di Metropolis otteniamo la sequenza come segue:
x0=3456
che elevato al quadrato fornisce
2
x 0 =11943936
perciò
x1= 9439
Tab. 7.1
Numeri di quattro cifre ottenuti col metodo dei quadrati centrali2
9439
4501
0756
0947
2590
5715
8968
7081
6612
4250
1405
7185
0625
9740
6242
3906
8676
9625
2568
2729
6406
5946
4474
0368
3549
0166
1354
5954
0275
8333
Un altro metodo usato per la generazione di numeri pseudo casuali è quella dei prodotti
centrali.
Alla stessa maniera che per i quadrati centrali si considerano ora due valori iniziali
x0=3549
x1=1354
Effettuando il prodotto
x1*x0= 3549*1354 =4 8053 46
quindi il valore casuale sarà
x2= 8053
ed alla stessa maniera i successivi
2
Si noti che, non appena il numero di cifre finali dell’operazione di elevazione al quadrato risulta inferiore a
quello necessario per estrarre un “centro” con un numero di cifre prestabiliten, si è fatta l’ipotesi di prendere
come numero risultato comunque il numero rappresentato dal “centro” eliminando le prime cifre da destra,
prelevando il numero di cifre prestabilite ed eliminando quindi le restanti cifre da sinistra. Ad es. .09472 =
.8968.09. Il nuovo numero è quindi 8968.
118
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
3549
1354
8053
4382
8364
6510
4496
2689
0897
4120
6956
6587
8191
9541
1503
3401
1117
7989
9237
7943
3694
3414
6113
8697
6915
0139
6118
3359
2833
8399
Tab. 7.2 - Numeri di quattro cifre ottenuti col metodo dei prodotti centrali
Questi metodi, proposti da Von Neumann e Metropolis nel 1946, furono
successivamente abbandonati a favore del metodo "congruente", perché trovati difficili
da analizzare, relativamente lenti e statisticamente insoddisfacenti. Allo stato attuale,
quasi tutti gli elaboratori adottano qualche variante del metodo congruente che
descriveremo.
I fattori che determinano l'accettabilità di un metodo sono essenzialmente i seguenti:
l) I numeri devono essere uniformemente distribuiti nella sequenza.
2) I numeri devono risultare statisticamente indipendenti nella sequenza.
3) La sequenza deve essere riproducibile.
4) La sequenza deve poter avere un periodo di lunghezza arbitraria.
5) Il metodo deve poter essere espletato dall'elaboratore con rapidità e deve consumare
poco spazio di memoria.
Questi requisiti devono essere interpretati opportunamente. Infatti, come vedremo, il
metodo congruente partendo da un numero no inizialmente fornito all'algoritmo, calcola la
sequenza
no, n1, n2, ..., ni,…
in modo completamente deterministico, ossia per ogni no dà sempre lo stesso ni. Il
requisito 2) dell'indipendenza statistica dei numeri sembra pertanto impossibile a
realizzarsi. Tuttavia, in pratica, si ragiona così: esistono delle tecniche per provare
l'indipendenza statistica di eventi; ebbene, se applicando queste tecniche alla sequenza
generata la prova è superata, allora si potrà giudicarli indipendenti.
In sostanza, come detto all'inizio, si decide di giudicare soltanto le proprietà della
sequenza generata, ignorando il metodo con cui essa fu generata.
119
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
Le altre proprietà elencate si comprendono. Sottolineamo che la proprietà 3) della
riproducibilità è particolarmente importante in simulazione ove talora si vuol ripetere un
esperimento nella sua totalità.
7.3.2. Metodo della congruenza lineare
Prima d'introdurre questo metodo occorre fare dei richiami di teoria elementare dei
numeri. Se x è un qualsiasi numero reale, si scrive:
⎣x ⎦ = il più grande intero ≤ x
(base di x)
Ad esempio: ⎣ 2 ⎦ = 1; ⎣1/2⎦ = 0; ⎣-1/2⎦ = -1.
Se x e y sono numeri reali qualsiasi, si definisce la seguente operazione:
x mod y = x -y ⎣ x/y ⎦
se y ≠ 0
[7.8]
=x
se y=0.
Da questa definizione si deduce che, quando y ≠ 0:
x
x
x mod y
0≤
-⎣ ⎦=
<1
y
y
y
e cioè che:
1) Se y > 0, allora 0 ≤ x mod y <y;
2) Se y <0, allora 0>x mod y >y;
3) La quantità x - (x mod y) = y ⎣x/y⎦ è un multiplo intero di y ed, essendo della
forma
x-r = yq,
ove r = resto
q = quoziente,
si può pensare x mod y come il resto della divisione di x per y, se x>0;
4) Se x e y sono interi anche x mod y è tale. L'espressione x mod 1 dà la parte
frazionaria di x.
Esempi
5
5 mod 3 = 5 - 3 ⎣ ⎦ = 5 - 3 *1 = 2
3
18 mod 3 = 18-3 ⎣ 18 ⎦ = 18-3 * 6 = 0
3
-2 mod 3 = -2 -3 ⎣ - 2 ⎦ = -2 –3 (-1) = + 1
3
5) (x mod y) mod y = x mod y come si ottiene facilmente applicando la [2.5].
Due numeri x e y si dicono congruenti modulo z, e si scrive
x ≡y (mod z)
120
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
se x mod z =y mod z, ossia se
x–z⎣
x
y
⎦ =y–z⎣
⎦ ossia se
z
z
x-y=z(⎣
x
y
⎦-⎣
⎦ ) ossia se x -y è un multiplo intero di z.
z
z
Il metodo della congruenza lineare è dovuto al Rottemberg (1948). A partire da un
valore iniziale X0, esso genera una sequenza di valori random
<Xn>=Xo, X1, X2, .Xi,…
tale che
Xn+1 ≡ aXn+c
(mod m),
n≥0
(7.9)
cioè tale che Xn+1 è congruente modulo m ad aXn + c, ove
X0 è detto valore iniziale o seme,
X0≥ 0
a
è detto moltiplicatore,
a≥0
c
è detto incremento,
c≥0
m è detto modulo,
m > X0, m > a, m > c.
Dato un valore iniziale X0 (seme), la costante a che individua il moltiplicatore ed una
costante c additiva (incremento), l’equazione (7.9) fornisce una relazione di congruenza
(mod m) per ogni valore di i nella sequenza (X1, X2, …, Xi, …). I termini seguenti di Xi
sono determinati con la (7.9) e sono tutti interi, formando una sequenza di residui mod m.
Supponiamo di volere generare numeri random fra 0 e 18 (solo numeri interi). Avremo
bisogno di fissare un numero di partenza che naturalmente potremo scegliere tra 0 e 18.
Supponiamo di scegliere 5.
Tale metodo, abbastanza complicato nella teoria, risulta estremamente semplice nella
pratica.
Un numero casuale compreso fra 0 e 18 e di parametri (4,6,19), con 19 limite superiore,
4 costante moltiplicativa e 6 costante additiva, si calcola semplicemente moltiplicando 5
per 4, sommandoci 6, dividendo il risultato per 19 e tenendo il resto, ottenendo:
(4*5+6) mod 19 = 7
Il secondo numero sarà:
(4*7+6) mod 19 = 15
Il terzo
(4*15+6) mod 19 = 9
e così via
(4*9+6) mod 19 = 4
…………………….
La serie di numeri ottenuta non è ancora accettabile come random. Perché questo avvenga
è necessario che superi una serie di test statistici che verranno riportati nel seguito.
Naturalmente, in questo momento ci troviamo di fronte a parametri che hanno valori
121
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
abbastanza piccoli per generare una serie di numeri random accettabile. Ci sono altre
condizioni che devono essere soddisfatte perché una serie di numeri random sia
soddisfacente, tuttavia l’importante in questo momento è semplicemente sapere che
esistono.
Si può inoltre notare che dividendo i numeri della serie ottenuta per 19 otteniamo una
serie di numeri random compresa fra 0 ed 1.
Il metodo della congruenza lineare fornisce un modo per generare numeri random
uniformemente distribuiti fra 0 ed 1.
Un’altra cosa che possiamo notare è che le variabili random dipendono soltanto dal valore
iniziale, che viene chiamato seme. E’ evidente quindi che diversi semi forniscono serie di
numeri random diverse.
Generando diverse versioni della formula (7.9) sono stati sviluppate tre diversi metodi
congruenziali. L’obiettivo di ciascun metodo è la generazione di sequenze con un periodo
massimo in una minima quantità di tempo. Questi metodi sono il metodo congruenziale
additivo, il metodo congruenziale moltiplicativo ed il metodo congruenziale misto.
Ognuno di questi metodi è attivo su vari computers.
Il metodo congruenziale additivo assume k valori iniziali, dove k è un intero positivo e
calcola una sequenza di numeri per mezzo della relazione di congruenza seguente
[7.11]
Xi+1≡ Xi + Xi-k (mod m)
dove a = 1 e c = Xi-k
Se k=1 la (7.11) genera la ben nota serie di Fibonacci.
Il metodo congruenziale moltiplicativo, dovuto a Lehmer, calcola una serie di interi non
negativi per mezzo della relazione di congruenza seguente
[7.12]
Xi+1≡ aXi (mod m)
Questo metodo rappresenta un caso speciale della relazione di congruenza [7.9], dove
c=0. Il metodo moltiplicativo è stato utilizzato per il suo buon comportamento statistico.
Cioè i test di frequenza e seriali, così come i test di casualità, quando applicati a sequenze
generate con questo metodo che indicano i relativi numeri pseudocasuali essere correlati
ed uniformemente distribuiti. Inoltre è possibile imporre condizioni per entrambi, il
moltiplicatore a ed il seme X0 della serie in maniera da assicurare un periodo massimo per
la sequenza generata con questo metodo. Il metodo moltiplicativo offre ancora dei
vantaggi relativi in termini di velocità di generazione.
I numeri ottenuti per mezzo della relazione di congruenza [7.9] nella forma originaria (con
a e c > di zero) si dicono generati con il metodo congruenziale misto. Il metodo
congruenziale misto è stato usato per offrire alcuni piccoli vantaggi sul metodo
moltiplicativo in termini di aumento della velocità di calcolo e mancanza di periodicità
delle ultime cifre.
La sequenza <Xn > è detta congruente lineare e si ottiene applicando la relazione:
n ≥ 0.
[7.13]
Xn+l = (aXn + c) mod m
Il metodo è detto moltiplicativo se c = 0; misto se c ≠ 0.
122
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
Da quanto detto, se (aXn + c) è intero, e m è intero, Xn+1 sarà anch'esso intero. Inoltre,
se m è positivo sarà 0 ≤ Xn+1 < m. Se pertanto, vogliamo generare una sequenza di numeri
tra 0 e 9 basterà porre m = 10. Ad esempio, per X0 = a = c = 7, m = 10, otteniamo
⎢ 56 ⎥
(7*7+7)mod 10 = 56-10 ⎢ ⎥ =6
⎣ 10 ⎦
⎢ 49 ⎥
(7*6+7)mod 10 = 49-10 ⎢ ⎥ =9
⎣ 10 ⎦
⎢ 70 ⎥
(7*9+7)mod 10 = 70-10 ⎢ ⎥ =0
⎣ 10 ⎦
⎢7⎥
(7*0+7)mod 10 = 7 -10 ⎢ ⎥ =7
⎣10 ⎦
…………………………………
<Xn>=7, 6, 9, 0, 7, 6, 9, 0, ...
Si noterà che, non appena è Xn = X0, si ha Xn+1 = X1 ecc. e la sequenza si ripete. Si
intuisce che per avere un periodo lungo occorrerà scegliere m grande. L'esempio dà, come
si vede, una sequenza con periodo molto breve, di lunghezza 4.
La presenza di un periodo è tipica di tutte le sequenze del tipo Xn+1 =f(Xn). In
generale, data la sequenza:
X0, X1, X2,….. Xh, Xh+1 ….. X2h …..
se Xh = X0 è il valore a partire dal quale la sequenza si ripete, si dice che h è il suo
periodo. Vedremo tra poco come si può influire sul valore di h. Intanto osserviamo che da
una sequenza uniforme di numeri interi generati con modulo m è possibile trarre una
sequenza di numeri razionali nell'intervallo semichiuso [0,1) semplicemente dividendo per
m:
<R >=
X 0 X1 X 2
X
,
,
, …, i , ….
m m
m
m
7.3.2.1 Scelta del modulo
Abbiamo precedentemente visto come i valori generati dalla [7.6] siano sempre di
valore minore del modulo m e come, non appena risulti Xn = Xo, la sequenza si ripeta con
un periodo pari alla distanza nella sequenza tra due valori identici. Poiché è sempre Xi <
m, è chiaro che tra due valori identici non possono capitare più di m valori diversi.
Pertanto la lunghezza del periodo non può mai essere superiore a m. Scegliendo dunque m
soddisfacentemente alto si ottengono sequenze che si ripetono soltanto dopo tempi lunghi.
Notare che quando il periodo ha lunghezza m grande, ogni numero da 0 a m -1 ricorre
soltanto una volta nel periodo; pertanto la scelta di X0 non influenza il periodo. Se invece
m viene scelto piccolo, X0 influenza il periodo. Se, nell'esempio precedente si fa X0 = 3,
invece che X0 = 7, si ha < Xn > = 3, 8, 3, 8, 3, 8,..., cioè periodo 2 anziché 4.
123
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
Un altro fattore che influenza la scelta di m è la velocità di generazione. Si preferisce
cioè un valore che renda più veloce il calcolo di (aXn + c) mod m. Tale calcolo comporta
una moltiplicazione, una somma e una divisione. Quest'ultima è un'operazione
relativamente lenta e può essere evitata se si fa m eguale al massimo valore esprimibile
con una parola di macchina più 1. Se b è la lunghezza della parola (numero di bit, in un
elaboratore binario) si sceglierà cioè m =2b, nel qual caso la riduzione modulo m
dell’operando (aXn + c) si farà con una troncatura che ne faccia conservare soltanto i b bit
meno significativi. Se l'elaboratore è decimale, e una parola contiene d cifre decimali, si
sceglierà m = l0d.
Questo metodo risparmia tempo anche in una successiva divisione che occorre fare per
ridurre il risultato nell'intervallo [0,1). Normalmente occorrerebbe fare la divisione Xn+1
/m. Se si sceglie m =2b (oppure m = 10d) basterà immaginare di spostare la virgola del
risultato al suo estremo sinistro.
Il modulo m stabilisce soltanto il limite superiore della lunghezza del periodo, il quale
è invece influenzato largamente dal valore del moltiplicatore a e dall'incremento c.
Vediamo con quale legge.
7.3.2.2 Scelta del moltiplicatore e dell'incremento
I valori di a e c devono essere scelti in modo che il periodo non si allontani molto dal
limite superiore 2b stabilito con m. Essi devono essere, ovviamente, scelti anche in modo
da avere una sequenza con i requisiti di casualità richiesti. Se ad esempio si pone a=c = 1,
la sequenza è Xn+1 = (Xn + 1) mod m, ha periodo m; tuttavia, come mostra il seguente
esempio, ottenuto per m = 10, X0= 2, la sequenza generata non presenta le caratteristiche
di casualità richieste:
<Xn>=2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2,...
Prescindendo dalle proprietà statistiche, la teoria dei numeri fornisce teoremi che
permettono di determinare i valori delle costanti a, c, m che garantiscono un periodo
massimo. Di questi teoremi diamo qui i soli enunciati, la loro dimostrazione richiedendo il
richiamo di teoremi della teoria dei numeri, alcuni dei quali classici, attribuiti a Euclide, al
cinese Sun-Tse e a Eulero (Ore, 1948), e altri più recenti (Greenberger, 1961; Hull e
Dobell, 1962). Rimandiamo pertanto il lettore interessato alle dimostrazioni, alla
letteratura originale, oppure a Knuth (Knuth, 1972).
Teorema A: Una sequenza congruente lineare ha un periodo di lunghezza m se e solo
se:
1) c e m sono primi tra loro; 3
2) a -1 è un multiplo di p, per ogni numero primo p che divide m (ad esempio, se m = 10,
è p= 2 e p = 5; dunque a - 1 dev'essere multiplo di 2 e 5);
3
Cioè il loro massimo comune divisore è 1.
124
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
3) se m è multiplo di 4, a-1 è multiplo di 4.
Ad esempio, si può scegliere m = 10, a = 21, c = 3, e avremo
Xn+1 = (21 Xn + 3) mod 10.
Per X0 = 3 la sequenza è
<Xn >=3, 6, 9, 2, 5, 8, 1, 4, 7, 0, 3, 6, 9,...
h = 10.
Il principale vantaggio del metodo misto consiste nel periodo pieno. Sebbene il suo
comportamento statistico sia generalmente buono, in alcuni casi è completamente
inaccettabile.
7.3.3. Metodo moltiplicativo
Il teorema A mostra che, se c = 0, la sequenza non può più avere il periodo massimo m.
Ciò è d'altronde anche intuitivo, perché la sequenza soddisfa ora la relazione:
Xn+1 =(a Xn ) mod m
[7.9]
e il valore Xn =0 non dovrebbe mai comparire, perché esso farebbe degenerare la
sequenza. In generale, se d è un qualunque divisore di m ed Xn è multiplo di d cioè se m
ed Xn hanno un divisore comune d, avremo Xn+1 , Xn+2 ,... tutti multipli di d. Ad esempio,
per m = l0, a = 7, X0= 4 (m e X0 hanno divisore comune d = 2) abbiamo:
<Xn > = 4, 8, 6, 2, 4,...
Pertanto, la prima considerazione da fare è che per avere una sequenza che possa
interessare, Xn ed m devono essere primi tra loro per tutti gli n, e ciò limita la
lunghezza del periodo. La lunghezza massima che si può raggiungere è data da:
Teorema B: Il massimo periodo che si può ottenere col metodo moltiplicativo è 2b-2 ,
con b ≥ 4 nel caso binario. Esso è ottenuto se:
1) X0 ed m sono primi tra loro.
2) a è un "elemento primitivo modulo m" (cioè se a e m sono primi tra loro, il più
piccolo intero λ tale che aλ ≡ 1 (mod m) è chiamato l'ordine di a modulo m. Ogni valore
di a che dà il massimo possibile λ è chiamato elemento primitivo modulo m).
7.3.4. Il Metodo Congruenziale additivo
Il semplice processo additivo di generazione di numeri casuali secondo la formula
Xi+1=Xi + Xi-k (mod m)
È stato programmato su diversi computers con varianti discusse e testate da Green4.
4
- Green, B. F. “Digital Computers in Research”. New York: Mc Graw-Hill Book Co.. 1963.
125
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
La formula base usata per la verifica è stata
[7.22]
Xj≡(Xj-1+Xj-k) (mod 2b)
Dove b è il numero di bits supportato da un computer digitale. Con questo generatore
additivo devono essere forniti k numeri memorizzati una volta per tutte in memoria.
7.4. Test Statistici per l’accettazione delle serie generate
I numeri pseudocasuali, benché siano matematicamente determinati dai dati di partenza,
possono essere trattati come numeri realmente a caso, se passano una serie di tests che ne
verificano le proprietà statistiche.
Dalla letteratura tecnica sono stati raccolti i più importanti tests di casualità.
7.4.1 Test di frequenza
Il test di frequenza controlla che ogni numero pseudocasuale compaia
approssimativamente con la stessa frequenza in ogni posizione della sequenza. Il test
consiste nel determinare le frequenze di estrazione dei singoli numeri e confrontarle con
quelle previste, ipotizzando una distribuzione uniforme.
L'aderenza alla distribuzione teorica si misura con un test di χ2 (chi quadro), secondo il
seguente procedimento.
Applichiamo il test alla serie di 30 numeri pseudocasuali di quattro cifre generati con il
metodo dei quadrati centrali.
9439
4501
0756
0947
2590
5715
8968
7081
6612
4250
1405
7185
0625
9740
6242
3906
8676
9625
2568
2729
6406
5946
4474
0368
3549
0166
1354
5954
0275
8333
Tabella 7.3 - Numeri di quattro cifre ottenuti col metodo dei quadrati centrali
Nella tabella ci sono 30 numeri di 4 cifre ciascuno, quindi:
30*4 = 120 cifre complessive.
Ogni cifra dovrebbe apparire quindi un numero di volte pari a
120:10 = 12 .
Possiamo quindi confrontare le frequenze delle cifre presenti nella tabella con le
frequenze teoriche, usando il test del χ2.
Se le frequenze osservate differiscono significativamente dalle frequenze teoriche,
cosicché le cifre non possono essere considerate casuali, il valore del χ2 calcolato sarà
maggiore del χ *2 tabellato fornito dalla tabella del χ2.
Nel caso in esame ci sono 9 gradi di libertà forniti dalla formula
- Green, B. F., Smith, J., and Keen, L. “Empirical tests of an addittive Random Number Generator”,
Journal of the Association for Computer Machinery, VI, No 4 (1959), 527-537.
126
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
g = 10-1 = 9
ed il valore del χ *2 , per un livello di significatività del α=5% è 16,916.
Di conseguenza dato che il χ2 calcolato risulta uguale a 9,664, come si può verificare
dalla tabella che segue, che riporta i conteggi del χ2 calcolato, possiamo concludere che il
test non rivela alcuna non casualità a questo livello di significatività α.
Cifra
0
1
2
3
4
5
6
7
8
9
Frequenza
Frequenza (Oi- Fi) (Oi- Fi)2
Osservata (Oi) Teorica (Fi)
14
8
11
8
15
17
17
10
8
12
12
12
12
12
12
12
12
12
12
12
2
-4
-1
-4
3
5
5
-2
-4
0
4
16
1
16
9
25
25
4
16
0
(O i - Fi ) 2
Fi
0,333
1,333
0,083
1,333
0,750
2,083
2,083
0,333
1,333
0,000
Tabella 7.4 - Calcolo del χ2 per il test di frequenza eseguito sulla tabella
di numeri pseudocasuali ottenuti con il metodo dei quadrati
centrali
(Oi − Fi ) 2
χ =∑
= 9,664
Fi
i =0
9
2
Sono stati suggeriti altri test del χ2. Vediamone un altro.
I 30 numeri vengono ripartiti in M gruppi, ad esempio con M=3, quindi costituiti da 10
gruppi per ciascun gruppo.
Si conta ora il numero delle cifre costituenti i numeri raggruppati in ciascuna classe, ossia
4 * 10 = 40.
La frequenza teorica relativa alla presenza di ciascuna cifra in ciascun gruppo è
40: 10 = 4 volte.
Possiamo quindi confrontare le frequenze delle cifre presenti in ciascun gruppo con le
frequenze teoriche, usando il test del χ2.
Ripetendo il calcolo per gli M=3 gruppi otteniamo i valori
χ 12 , χ 22 , χ 32 in generale χ M2
E’ stato dimostrato che una sequenza di numeri realmente a caso fornisce, per gli M
valori dei χ2, una distribuzione approssimata di tipo χ2 con n - 1 gradi di libertà, con
g = n-1 = 10- 1 = 9.
Il controllo dell'aderenza della distribuzione dei χ 2M calcolati, alla distribuzione ideale di
tipo χ2 , viene effettuato con un nuovo test di χ2, che, con un assegnato livello di
confidenza, garantisce l'attendibilità dell'ipotesi di casualità per la sequenza generata.
127
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
Il test si esegue identicamente applicandolo alla serie di numeri pseudocasuali reali
ottenuti dividendo la serie intera utilizzata fino ad ora per 10.000, ossia spostando la
virgola all’estrema sinistra di ciascun numero. Come nel caso precedente si dividono gli
n numeri ottenuti con questa operazione (in questo caso con n=30) in M gruppi
consecutivi di N numeri (in questo caso con M=3 ed N=10). A questo punto si divide
l’intervallo unitario in x subintervalli uguali. Il numero di numeri pseudocasuali atteso in
N
ciascun subintervallo è
. S indichi ora con fj, con j=1, 2, …, x, l’attuale numero di
x
j
( j − 1)
≤ ri < .
numeri pseudocasuali ri ( con i = 1, 2, …, N) nel subintervallo
x
x
La statistica
N
x x
χ 12 = ( )∑ ( f j − ) 2
x
N j =1
ha approssimativamente una distribuzione del χ 2 con x-1 gradi di libertà per una
sequenza di numeri veramente casuali. Questa statistica è quindi calcolata per tutte le
serie consecutive di N numeri pseudocasuali. Successivamente sia Fj il numero degli M
valori del χ 12 che giacciono fra il (j-1)esimo ed il jesimo quantile della distribuzione con
x-1 gradi di libertà (pe j= 1, 2, …, u).
Calcoliamo la statistica
M
u u
χ F2 = ∑ ( F j − ) 2
u
M j =1
L’ipotesi che i numeri pseudocasualinella sequenza composta da M serie di numeri
pseudorandom sia veramente random è rigettata se χ 2F con u-1 gradi di libertà eccede il
valore critico letto al desiderati livello di significatività. Una serie di valori molto
utilizzata per questo test consiste in : x= u = 10, M = 100 ed N = 1000. I valori delle
N
M
frequenze teoriche attese
ed
dovrebbero essere sempre maggiori di 5.
x
u
7.4.2 Test di uniformità
Questo test è usato per verificare la distribuzione casuale e uniforme dei singoli
numeri che appaiono nella sequenza pseudorandom.
Data una sequenza <Rn> di numeri reali tra 0 e 1, si applica la trasformazione
Zn = ⎣ d Rn ⎦ e si ottiene una sequenza di numeri interi compresi tra 0 e d-1. Un valore
ragionevole di d è d = 100 per elaboratori decimali e d = 64 o 128 per elaboratori binari.
Per ogni categoria 0 ≤ s <d si conta quante volte risulta Zj = s per 0 ≤ j < n e si applica il
test χ2 usando k = d e probabilità ps = 1/d per ciascuna categoria.
7.4.3 Test seriale o di autocorrelazione
I test seriali vengono usati per verificare la casualità fra numeri successivi di una
sequenza. Un test seriale normalmente è applicato a coppie di numeri dove i numeri
pseudocasuali sono presi come coordinate di un punto in un quadrato unitario, diviso in x2
celle. L’idea può essere estesa a triplette di numeri pseudocasuali che rappresentano le
128
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
coordinate di punti casuali all’interno di un cubo di lato unitario. Il test seriale che
descriveremo è basato anche sul test del chi-quadro e consiste nei seguenti passi.
Cominciamo col generare una sequenza di M serie consecutive di numeri pseudocasuali e
calcoliamo il χ 12 per ognuna delle M serie. Quindi per ogni serie di numeri pseudocasuali
indichiamo con fik il numero di numeri pseudocasuali ri (con i=1, 2, …, N-1), che
j
k
( j − 1)
(k − 1)
soddisfa la relazione
e
≤ ri <
≤ ri +1 < , dove j,k=1, 2, …,x. Quindi
x
x
x
x
calcoliamo la statistica
x2 x x
N −1
2
χ2 =
( f jk − 2 ) 2
∑∑
N − 1 j =1 k =1
x
per ognuna delle serie degli N numeri pseudocasuali.
Good ha dimostrato che χ 22 - χ 12 ha approssimativamente una distribuzione del chi-quadro
con x2-x gradi di libertà per una sequenza di numeri veramente casuale.
A questo punto calcoliamo χ 22 - χ 12 per ognuna delle M serie di numeri
pseudocasuali indicando con sj il numero degli M valori risultanti dal calcolo di χ 22 - χ 12
che giacciono fra il (j-1)-esimo ed il j-esimo (con j=1, 2, …,u) quantile di una
distribuzione con x2-x gradi di libertà.
Infine calcoliamo
M
u u
χ s2 = ∑ ( s j − ) 2
u
M j =1
con u-1 gradi di libertà. Il test seriale di casualità di una sequenza di numeri pseudocasuali
è accettabile ad un dato livello di confidenza (o di significatività) se i valori di χ 2F e
χ 2s non sono inconsistenti con l’ipotesi che essi sono estratti a caso da una distribuzione
chi-quadro con appropriati gradi di libertà.
Test simili possono essere usati per triplette.
Consideriamo sempre, per semplicità, la stessa serie di numeri ottenuta col metodo del
“centro del quadrato”.
Abbiamo 30 numeri di 4 cifre ciascuno, ovvero un totale di
30 * 4 = 120 cifre.
Consideriamo ora la coppia di cifre 12 e calcoliamoci la probabilità che le due cifre si
presentino una di seguito all’altra nella sola modalità 12. Questa sarà la frequenza teorica
da utilizzare nel test del χ2.
Andiamo ora a contare quante volte invece le cifre 1 e 2 si presentano nelle 120 cifre
disponibili accoppiate in sequenza con la modalità 12. Questa rappresenterà la frequenza
osservata relativa alla coppia 12 che si presenta con questa modalità.
Ripetiamo il discorso fatto per ogni coppia di cifre possibile costituita con 10 cifre
ottenendo ancora per ogni coppia una frequenza teorica ed una osservata.
Applichiamo a questo punto il test del χ2 con un numero di gradi di libertà uguale a
g = n-2 = 10 – 2 = 8.
Se le frequenze osservate differiscono significativamente dalle frequenze teoriche,
cosicché le coppie di cifre non possono essere considerate casuali, il valore del χ2
calcolato sarà maggiore del valore teorico fornito dalla tabella.
129
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
Se il χ2 calcolato risulta minore di un χ2 tabellato ad un livello di significatività del 5%
diremo che è accettabile l’ipotesi di casualità a quel livello di significatività.
Questo test applicato a coppie di numeri contigui (Zi, Zi+1 ) della sequenza <Zn > ed è
inteso a dimostrare che non esistono coppie più frequenti di altre, cioè che le coppie sono
casuali e uniformemente distribuite. Il test si può estendere a triplette, quadruplette ecc. di
numeri contigui. E' ovvio che se questo test venisse applicato direttamente alla sequenza
<Xn> o alla <Rn >, esso non avrebbe mai successo. Ciò perché in queste sequenze un
dato numero è sempre seguito da uno e un solo altro numero possibile. Grazie, invece,
all'effetto di troncamento operato dalla moltiplicazione ⎣dRn ⎦, si ottiene in <Zn > la
comparsa di uno stesso numero più volte nel periodo.
Si ricordi che il test chi-quadro deve esser applicato a osservazioni mutuamente
indipendenti. Per tal motivo, data la sequenza: Z0, Z1, Z2 …. Z n-1, Zn, sarebbe un errore
applicare il test alle coppie Z0Z1, Z1Z2, Z2Z3, … Zn-1Zn perché in tal caso se una coppia ha
il valore (q, r), la successiva darà il valore (r, p) e quindi. per una delle dimensioni,
dipende dalla precedente. Per tal motivo si osserveranno le coppie Z0Z1, Z2Z3, Z4Z5 ecc.
cioè, in generale, le coppie (Z2j,Z2j+1) per 0≤j<n. Per applicare il test a n oggetti è quindi
necessario l'uso di 2n elementi della sequenza. Esaminando le coppie Z0Z1, Z2Z3.
Z4Z5,.…, si saranno trascurate le Z1Z2, Z3Z4 ecc. Per tal motivo, per esser completi,
occorrerà fare due test e verificare che entrambi siano soddisfatti.
Supponendo di applicare il test alla prima serie di coppie: Z0Z1, Z2Z3, Z4Z5 ecc., si
conta quante volte un certo valore (q, r) ricorre. Poiché ogni Zi può assumere d valori
possibili (da 0 a d -1), abbiamo d2 coppie possibili (q, r) che sono: (0, 0), (0, 1),..., (0, d-1),
…, (d-1,0), (d-1,l),...,(d-1,d-1).
Le d2 coppie saranno assunte come altrettante categorie per il test χ2, cioè k = d2. Si
costruisce allora una matrice di d2 celle, ciascuna relativa a un possibile (q,r), e in
ciascuna si registra il numero di volte che il valore (q,r) si è osservato (fig. 2.24).
A ciascuna delle k = d2 categorie è associata la probabilità 1/d2.
Se quindi la sequenza osservata è lunga 2n avremo osservato n oggetti e quindi, in
ciascuna cella sono attesi, nell'ipotesi dell'uniformità, n/d2 coppie. Si applica quindi il test
χ2 alla maniera convenzionale.
0
1
….
r
….
d-1
0
1
….
….
….
….
……
….
….
….
….
….
….
q
….
….
……
….
….
….
….
….
….
d-1
….
….
Fig. 7.17 Categorie per test seriale
130
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
Notare che, poiché deve essere n > 5k = 5d2, per evitare di dover osservare sequenze
troppo lunghe occorre ridurre il valore di d. Se restasse d = 100, come nel caso
precedente, avremmo n > 50.000.
Se il test è esteso a triplette, allora la tavola precedente diventa un cubo con d3 caselle.
In tal caso il valore di d deve essere ulteriormente ridotto. Questo problema si accentua se
si usano quadruplette ecc. Per tal motivo, in presenza di quadruplette, quintuplette ecc., si
adottano test diversi, come il test del poker, o il test del massimo, che sono
approssimazioni del seriale.
La figura 2.25 mostra i risultati del test seriale a due e tre dimensioni applicato a un
generatore di Lehmer del tipo Xi+1 = (17Xi-1) mod 512: 384 punti nel piano e 256 punti
osservati nel cubo, visualizzati da un terminale video.
Fig.7.18 - Test seriale a 2 e 3 dimensioni per generatore congruente. (Lewis e Payne,
1973; 0 Association for Computing Machinery 1973, per concessione.)
7.4.4 Il test dei “lagged product” o di autocovarianza
Un'altra misura dell'indipendenza dei numeri pseudocasuali è fornita da un
coefficiente ottenuto sommando i prodotti di coppie di numeri intervallati regolarmente
(lagged product).
Se k è la lunghezza dell’intervallo si definisce il coefficiente Ck per la sequenza ri (con
i=1, 2, …, N)
Ck= [1 /(N - k) ]
∑
N −k
i =1
ri . ri+k
con ri = elementi della sequenza (i = 1, 2, .... N) e k = ampiezza dell'intervallo.
E’ possibile dimostrare5 che se non c'è correlazione tra ri e ri+k, i valori di Ck hanno una
distribuzione circa normale con media 0,25 e scarto quadratico:
5
Se N>> k, la normalità segue dal teorema del Limite centrale. La formula per la deviazione standard di Ck
segue dal fatto che la varianza di una somma è uguale alla somma delle varianze più due volte la somma
delle covarianze. Ogni riri+k ha varianza 7/144, e ci sono N-k di tali termini. Le uniche covarianze diverse da
zero sono quelle che hanno la forma cov(ri-kri, riri+k)=3/144, e di queste covarianze ce ne sono N-2k.
131
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
σ=
13 N − 19k /(12 N − k )
per k>0
L'aderenza della curva reale alla distribuzione normale si può misurare con un test del
χ2 .
Applicare questo test alla solita serie di numeri pseudocasuali di quattro cifre ottenuta
con il metodo dei quadrati centrali.
7.4.5 Test del gap
Il test del gap si esegue per verificare la casualità delle cifre in una sequenza di numeri.
Per ogni data cifra d, siamo interessati a verificare il numero delle cifre che si presentano
fino ad incontrare una nuova d.
Un gap di lunghezza k si verifica quando si trovano k cifre diverse da d fra due cifre d.
Due cifre d consecutive producono un gap di lunghezza k=0.
Per una sequenza di cifre veramente casuale la probabilità di ottenere un gap di lunghezza
k è data da
P(k) = (0,9)k (0,1)
Si calcolano quindi le frequenze teoriche che competono a ciascun valore di k.
Si verifica a questo punto quante volte ritroviamo il gap k=0, quante k=1, k=2,…, ecc.
Si applica il test del χ2 per confrontare i numeri di gap previsti con il numero di gap di
lunghezza k osservati.
7.4.6 Il test dei segni o dei runs
- Questo test mette in luce l'eventuale natura oscillatoria di sequenze di numeri
pseudocasuali. Dati N numeri r1, r2, … rn, si definisce una sequenza S binaria di N- 1
bits, in cui l'i-esimo termine è uguale a 0 se ri < ri+1, ed uguale a 1 se ri > ri+1. Una
successione di k zeri forma un run di zeri di lunghezza k e, similmente per le serie di l.
Il test consiste nel suddividere i runs a seconda della loro lunghezza, nel costruire la
distribuzione dei numero dei runs per ogni classe di lunghezza e confrontare la
distribuzione con quella teorica. Per runs di lunghezza k i valori attesi per sequenze
realmente a caso sono:
(2 N − 1)
per il numero totale di runs
3
(5 N + 1)
per runs di lunghezza 1
12
(11N − 14)
per runs di lunghezza 2
60
............................................................................................
2 [(k 2 + 3 k + 1) N - (k 3 + k 2 - k - 4)] / (k + 3)!
Per runs di lunghezza k con k<N-1
2
per runs di lunghezza N-1.
N!
Si esegue quindi un test di χ2 per verificare se un generatore di numeri pseudocasuali è
accettabile, ad un fiddato livello di significatività.
Una caratteristica tipica di sequenze non casuali è un eccesso di runs lunghi.
132
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
7.4.7 Test del poker (o delle partizioni)
Il test del poker è uno speciale test che serve a confrontare la frequenza di combinazioni di
cinque o meno cifre osservate in un numero casuale con le frequenze teoriche previste per
queste combinazioni.
Le combinazioni considerate sono le seguenti:
tutti diversi: abcde;
coppia: aabcd;
doppia coppia: aabbc;
tris: aaabc;
full: aaabb;
poker: aaaab;
colore: aaaaa.
Questo test considera n gruppi di cinque successivi numeri della sequenza Z5j, Z5j+1, …,
Z5j+4), 0≤j<n. Esso opera, dunque, su sequenze lunghe 5n. I gruppi osservati vengono
suddivisi in k = 7 differenti categorie, corrispondenti alle configurazioni presentate in
precedenza.
Il test è inteso a verificare che tutte queste configurazioni siano presenti con la
probabilità prevista quando tutti gli Zi sono egualmente probabili. Se la sequenza <Zn> è
uniforme, le configurazioni osservate si distribuiranno nelle categorie secondo le
probabilità ps di ciascuna configurazione teorica. Nel mazzo del poker, infatti, tutti i
valori, dall'asso al re, sono egualmente probabili.
Allo scopo, si definisce una probabilità per ciascuna configurazione, si calcola il
numero di osservazioni attese in ciascuna e si conta il numero effettivo di osservazioni
cadute in ciascuna. Indi si applica il test chi-quadro alla maniera convenzionale.
I1 calcolo delle ps per le 7 categorie sopra introdotte, dà luogo per alcune a valori
molto piccoli, il che rende il test di difficile applicazione.
Una versione semplificata del test è quella che riduce a k = 5 il numero di categorie. Allo
scopo, detto s il numero di differenti valori all'interno di una configurazione, avremo le
categorie:
s = 1: aaaaa
s = 2: aaabb e aaaab
s=3: aabbc e aaabc
s= 4: aabcd
s=5: abcde
per le quali si può esprimere la probabilità:
d (d − 1)....(d − s + 1) ⎧h ⎫
ps =
[7.12]
⎨ ⎬
dh
⎩s ⎭
ove d è il numero di differenti valori che può assumere ciascun Zi; h = 5 è il numero di
elementi che formano ciascuna configurazione. Il denominatore della [6.12] è il numero di
disposizioni con ripetizione di d elementi su 5 posti: al numeratore, invece, il prodotto
d(d-1) ... (d-s+1) dà il numero di disposizioni senza ripetizione di d elementi su s posti, e
133
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
⎧h ⎫
il fattore ⎨ ⎬ è il numero di Stirling di seconda specie, che fornisce il numero di modi in
⎩s ⎭
cui è possibile ripartire 5 oggetti distinguibili su s classi. E' noto (Knuth, 1972) che:
⎧5⎫
⎧5 ⎫
⎨ ⎬ =1, ⎨ ⎬ =15,
1
⎩ ⎭
⎩2 ⎭
⎧5⎫
⎨ ⎬ =25,
⎩3⎭
⎧5⎫
⎨ ⎬ =10,
⎩4 ⎭
⎧5⎫
⎨ ⎬ =1, mentre
⎩5⎭
d assume valori usuali o vicini a
quelli del poker (ad es. d =8 oppure 10).
7.5 Generazione di distribuzioni qualsiasi
I numeri pseudocasuali con distribuzione uniforme giocano un ruolo fondamentale nella
generazione di numeri con distribuzione qualsiasi, diversa dall'uniforme. Il metodo più
diffuso per la generazione di eventi con legge qualsiasi è il metodo della trasformazione
inversa.
Denotiamo con r una variabile distribuita uniformemente nel campo [0,1], cioè con
densità di probabilità g(r) = 1.
Se vogliamo generare variabili aleatorie x con densità di probabilità f(x) data, occorre
prima ottenere la funzione di distribuzione F(x). Poiché F(x) è tale che 0 ≤ F(x) ≤ 1 si può
generare un numero a caso r distribuito uniformemente tra 0 e 1 e porre F(x) = r; di qui si
può ottenere x. Ossia, per ogni particolare valore r0 generato, è possibile trovare il
corrispondente valore x0 attraverso la funzione inversa di F(x) (fig. 7.19):
[7.13]
x0 = F -1(r0)
E' facile vedere che la legge di probabilità x così ottenuta è la funzione densità f(x),
applicando la [7.4].
Vediamo ora, operativamente, come si applica la trasformazione.
Esempio. Si vogliano generare variabili con legge uniforme comprese tra a e b (fig.
2.15).
Sarà
f ( x) =
1
(b − a )
ponendo pertanto:
r = F(x)
si ha:
x=F–1(r)=r(b-a)+a
ed
F(x) =
x−a
b−a
0≤F(x)≤1
0≤r≤1.
Applicando le regole su esposte esprimeremo,
nei prossimi paragrafi, le funzioni inverse F-1(r)
di distribuzioni di probabilità molto comuni,
come la distribuzione esponenziale, la gamma
ecc. alle quali possono essere approssimate
molte distribuzioni empiriche.
Per molte altre distribuzioni di probabilità è
Figura 7.19 Trasformazione inversa purtroppo impossibile, o estremamente difficile
134
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
esprimere x in funzione di F-1 (r). In questi casi si ricorre a tabulazioni della F(x)
generalmente dedotte da osservazioni empiriche, come mostrato qui di seguito.
7.5.1 Generazione di distribuzioni approssimate continue
Si supponga che la distribuzione F(x) sia approssimata con una serie di segmenti
rettilinei come nella figura 2.14. La funzione è inizialmente definita nei punti xi(i= 0,
l,...,N) nei quali assume i valori Fi tali che F0 = 0 ed FN = 1. Per generare la variabile x nei
punti xi in cui la F è direttamente definita, basterà costruire una tabella che per ogni Fi dà
il corrispondente xi e leggerla estraendo numeri pseudocasuali r=Fi. Per generare variabili
x negli intervalli compresi tra i punti xi occorre fare un'interpolazione lineare e cioè
calcolare la pendenza della curva che unisce il punto (xi, Fi) al punto (xi+1, Fi+1). In
particolare, si calcolerà
ai =
x i +1 − x i
,
Fi +1 − Fi
i=0,1, …, N-1
i
0
1
2
3
4
5
6
7
8
9
10
Tabella 7.5
Fi
xi
ai
0,000
0
400
0,025 10
200
0,075 20
80
0,200 30
100
0,300 40
57
0,47S 50
66
0,625 60
50
0,825 70
100
0,92S 80
130
1,000 90
1,000 100
-
Questi valori, possono essere portati nella stessa tabella, che avrà l'aspetto della tabella
7.5.
Questa può essere usata confrontando una sequenza di numeri random uniformi r
compresi tra 0 e 1 e i valori Fi.
Se r è uguale a uno dei valori Fi tabulati, allora si legge direttamente il corrispondente x.
Se invece è
Fi<r <Fi+1
(i=0, 1,...,N- 1)
allora la variabile generata è
x =xi+ai(r-Fi) Ad esempio, se è r= 0,300 allora x = 40; se invece è r = 0,250 allora è 0,200 <r < 0,300 e
quindi sarà x = 30 + 100 (0,250 - 0,200) = 35.
135
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
7.5.2 Generazione di distribuzioni empiriche discrete
Non sempre è necessario approssimare numericamente una distribuzione, come nel caso
precedente ove era in gioco una variabile aleatoria continua (tempi di attesa), ed era
richiesto il passaggio da un numero discreto di osservazioni a una curva continua.
Se la variabile aleatoria è discreta, la generazione è più diretta. Supponiamo che la
variabile x sia rappresentata dal numero di oggetti che un cliente acquista in un negozio.
Osserviamo ad esempio un campione di n = 250 clienti e supponiamo di avere i risultati
della tabella 2.12: 25 clienti hanno acquistato un solo oggetto, 128 due ecc. La tabella
riporta anche la stima delle probabilità p(x), approssimate dalle percentuali di clienti che
hanno acquistato x oggetti. La figura 2.28 dà una rappresentazione della distribuzione.
L'approssimazione con le percentuali è ammissibile se n è sufficientemente grande. La
scelta di n si può fare fermandosi a quel valore al di sopra del quale p(x) non subisce più
apprezzabili variazioni.
Tabella 7.6
N. oggetti (x) N. Clienti
1
25
2
128
3
47
4
38
5
12
totali
250
p(x)
0,10
0,51
0,19
0,15
0,05
1,00
Fig. 7.20 Distribuzione empirica da generare
Poiché p(x) non è altro che la suddivisione dell'intervallo [0,1) in zone di lunghezza
proporzionale ai valori p(xi), i = 1, 2,..., 5 (fig. 7.21) un metodo per generare x può
essere quello di generare un numero random uniformemente distribuito tra 0 e 1 e porre,
secondo la regola precedente, x = xi se Fi-1 < r ≤ Fi, cioè se
p(x1)+...+p(xi-1)<r≤p(x1)+...+p(xi).
Ad esempio, se si ottiene r = 0,73, r cade nell'intervallo appartenente a p(x3 ) e
quindi x = x3 = 3. Notare che non è necessario che i valori di x appaiano nella tabella in
un particolare ordine. L'ordine può soltanto influenzare la velocità di esecuzione del
programma. Supponendo di partire da F1 nell'esame della tabella, il numero medio di
confronti è minimizzato se i valori x sono messi in ordine di probabilità decrescenti.
136
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
E' facile convincersi che il metodo qui delineato equivale a una trasformazione inversa
operata su una curva di distribuzione cumulativa discreta.
I programmi di ricerca richiedono in genere discrete quantità di tempo.
Figura 7.21 – Generazione di distribuzione discreta
Accettando di spendere di più in memoria, si può adottare il metodo seguente (Marsaglia,
1963). Si usano 1000 celle di memoria indirizzabili per nome (memoria associativa, o
indirizzamento indiretto) con i nomi da 000 e 999. Vi si immagazzinano 100 numeri del
valore x1, 510 del valore x2, 190 del valore x3, 150 del valore x4, 50 del valore x5. Si
estrae poi un numero a caso e se esso è, ad esempio, r = 0, d1d2d3d4 il numero xi presente
nella locazione d1d2d3 è assunto come valore di x.
7.5.3 Metodo di reiezione
Per generare variabili aleatorie x di legge arbitraria è possibile usare un altro metodo,
detto di accettazione e reiezione. Sia x una variabile che assume valori in un intervallo
finito u ≤ x ≤ v e sia f(x) la sua funzione densità. Il metodo consiste sostanzialmente nel
considerare f(x) racchiusa in un rettangolo di base u, v e generare, con un generatore
uniforme, una coppia (x,y) di coordinate di un punto nell'area del rettangolo. Se il punto
cade sotto la curva f(x), si accetta l'ascissa x come numero generato, diversamente si
rigetta la coppia e se ne genera un'altra. Formalmente ciò si schematizza nei seguenti
passi:
1) Standardizzare f(x) usando un fattore di scala d tale che d*f(x) ≤1 per u≤x≤v.
2) Scegliere a caso x in maniera uniforme con la formula x = r(v-u)+u, ove r è un
numero random uniforme in [0,1)
3) Generare coppie (r1, r2): ogni coppia che soddisfa la relazione r2 ≤d*f [r1(v- u) + u]
è accettata e si usa x = r1 (v - u) + u come valore casuale generato.
E' facile convincersi che se x è scelto a caso secondo la regola x = r1(v-u) + u ed è
rigettato se r2 > d*f(x), allora la densità degli x accettati è esattamente f(x). E' possibile
dimostrare (Tocher, 1963) che il numero medio di coppie da generare prima di una
accettabile è 1/d. Questo metodo può quindi risultare particolarmente inefficiente per certe
funzioni di probabilità.
Bibliografia
[1] Gentle, J. E. 1998. Random Number generation and Monte Carlo Methods. New
York: Springer.
[2] Law, A. M. and W. D. Kelton. 2000. Simulation Modeling and Analysis. Third ed.
New York: McGraw-Hill.
[3] Marsaglia G. 1985. A current view of random number generetors. In Computer science
and Statistics, Sixteenth Symposium on the Interface, 3{10, North-Holland, Amsterdam.
Elsevier Science Publishers.
137
Politecnico di Bari – Riservato alla circolazione interna
Prof. Ing. Michele Marra –Corso di Laurea Specialistica in Ingegneria Gestionale –
Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione
[4] L'Ecuyer, P. 1994. Uniform random number generation. Annals of Operations
Research, 53, 77{120.
[5] Bratley, P., B. L. Fox, and L. E. Schrage. 1987. A Guide to Simulation. Second ed.
New York: Springer-Verlag..8.
[6] Tezuka, S. 1995. Uniform Random Numbers: Theory and Practice. Norwell, Mass.:
Kluwer Academic Publishers.
CAPITOLO VII
7.0 Simulazione
7.1 Cenni storici
7.2 - Problemi di altra natura
7.2.1. - Problema del giornalaio (o della determinazione del lotto economico di
magazzino).
7.2.2. - Il problema delle pratiche
7.3. - Generazione di variabili aleatorie per la simulazione
7.3.1. Numeri casuali a distribuzione uniforme
7.3.2. Metodo della congruenza lineare
7.3.2.1 Scelta del modulo
7.3.3.2 Scelta del moltiplicatore e dell'incremento
7.3.3.4 Metodo Congruenziale Misto
7.3.3.4.1. Computers binari
7.3.3.4.2. Computers decimali
7.3.3.5 Metodo moltiplicativo
7.3.3.5. Relazione tra generatori moltiplicativi e misti
7.3.3.5 Il Metodo Congruenziale additivo
7.3.3.6 Il Metodo Congruenziale additivo
7.4
Test Statistici per l’accettazione delle serie generate
7.4.3 Test di frequenza
7.4.4 Test di uniformità
7.4.5 Test del gap
7.4.4 Test seriale o di autocorrelazione
7.4.4 Il test dei “lagged product” o di autocovarianza
7.4.5 Test del gap
7.4.6 Il test dei segni o dei runs
7.4.8 Test del poker (o delle partizioni)
7.5 Generazione di distribuzioni qualsiasi
7.5.1 Generazione di distribuzioni approssimate continue
7.5.2 Generazione di distribuzioni empiriche discrete
7.5.3 Metodo di reiezione
138
Politecnico di Bari – Riservato alla circolazione interna
Scarica