Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione CAPITOLO VI 6. - 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. 72 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 6.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. 73 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 ciclo 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 a ⋅ F ⋅ (b − a ) 0 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. 74 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 6.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. 6.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 dl € 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: 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 12 10 8 6 4 2 0 0 1 2 3 4 5 6 7 8 9 10 11 75 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione una legge di probabilità, cioè tratteremo le frequenze registrate come delle probabilità. 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 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 76 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. Pi nell'ipotesi di C=2 + 0,50 + 0,50 + 0,50 + 0,50 - 1,00 + 0,50 + 0,50 + 0,50 + 0,50 + 0,50 C=3 C=4 C=5 + 0,75 + 0,75 + 0,75 + 0,75 - 2,25 + 0,75 + 0,75 + 0,75 + 0,75 + 0,75 + 1,00 + 1,00 + 1,00 + 1,00 - 3,50 + 1,00 + 1,00 + 1,00 + 1,00 + 1,00 + 1,25 - 0,25 + 1,25 + 1,25 - 4,75 + 1,25 + 1,25 + 1,25 + 1,25 + 1,25 + 45,50 + 48,75 + 4,55 + 4,875 301 218 59,1 42,8 + 48,00 + 4,80 140 27,5 + 18,75 + 1,875 78 15,3 C = 3 ⇒ Pi = € 48,75 ottimo C = 4 ⇒ Pi = € 48,00 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. 77 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 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. 6.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 sufficiente 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 1 0,02 44 3 0,06 45 5 0,10 46 9 0,18 47 12 0,24 48 8 0,16 49 5 0,10 50 4 0,08 51 2 0,04 52 1 0,02 Il costo orario di ciascun impiegato è di € 2,50 per ore lavorative e di € 3,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. 78 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 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 N. Pratiche 00 560 da 01 a07 570 da 08 a 20 580 da 21 a 36 590 da 37 a 45 600 da 46 a 48 610 49 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. 9 impiegati 10 impiegati 11 impiegati 12 impiegati 13 impiegati costo ore ord. costo ore ord. costo ore ord. costo ore ord. costo ore ord. Giornaliere Giornaliere Giornaliere Giornaliere Giornaliere € 180,00 € 200,00 € 220,00 € 240,00 € 260,00 I numero II numero N. N. Straordinari Straordinari estratto estratto pratiche pratiche Ore Costi Ore costi ricevute che un imp. può sbrigare Straordinari Ore costi Straordinari Ore costi Straordinari Ore costi Totale costi ordinari Totale costi straordinari Totale costi COSTO MEDIO GIORNALIERO 79 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 6.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 F(x) è continua nel dominio di x, è possibile differenziare questa funzione e definire dF ( x ) f(x) = dx [6.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 [6.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. 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 ) [6.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), 80 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione r = F(x) = ∫ x −∞ f ( t ) dt [6.4] allora P(X≤x) = F(x) = P[r≤ F(X)] = P[F-1 ( r ) ≤ x] E, di conseguenza, F-1 ( 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. 6.3.1. Numeri casuali a distribuzione uniforme Una distribuzione uniforme (o rettangolare) è quella in cui una va riabile x può assumere con eguale probabilità uno qualsiasi dei valori compresi in un intervallo a ≤x ≤ b. Figura 6.15 Densità uniforme Figura 6.16 Distribuzione cumulativa uniforme La funzione densità f(x) ha la forma di figura 6.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. 6.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 F(x) = ∫a 0 ≤ F(x) ≤ 1 [6.5] b−a b −a 1 x dx è uguale a + C. Per trovare il valore della costante di integrazione b −a b−a C, notiamo che quando x=a, F(x)=0. Sostituendo questi valori nella equazione precedente troviamo −a x a x −a a + C = 0 e quindi C = , da cui F(X) = − = . b−a b − a b − a b −a b−a 1 Si ricordi che ∫aX 81 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 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 [6.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 6.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 F(X) = prob [a ≤x ≤ X] = ∫ dx = per a ≤x ≤ b [6.7] −∞ b − a b−a =0 =1 per x<a per x>b come mostrato nella figura 6.16. Nella discussione che segue considereremo la distribuzione uniforme con a = 0, b= l e cioè definita da f(x) =1 =0 0 ≤x ≤ 1 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 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. 82 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 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 sono 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. 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 (tab. 6.2). 83 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 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. Riportiamo nella tabella 6.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 84 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione Tab. 6.1 Numeri di quattro cifre ottenuti col 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 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 =475566 quindi il valore casuale sarà x2 = 4755 ed alla stessa maniera i successivi Tab. 6.2 Numeri di quattro cifre ottenuti col metodo dei prodotti centrali 3549 1354 4755 4382 8364 6510 4496 2689 0897 4120 6956 6587 8191 9541 1503 3401 1117 7989 9237 7943 3694 3414 6113 8697 6915 0139 9611 3359 2833 5160 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, 85 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 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. 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à. 6.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 =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; [6.8] 86 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 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) 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 Tale metodo, abbastanza complicato nella teoria, risulta estremamente semplice nella pratica. 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. 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: (5*4+6) mod 19 = 7 Il secondo numero sarà: (7*4+6) mod 19 = 15 Il terzo (15*4+6) mod 19 = 9 e così via 87 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione (9*4+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 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. Il metodo della congruenza lineare è dovuto al Lehmer (Lehmer, 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 (6.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. Espandendo la (6.9) per i=0, 1, 2, … otteniamo X1 ≡ aX0 + c (mod m) X2 ≡ aX1 + c = a2 X0 + (a+1)*c (mod m) c( a 3 − 1) 3 2 3 X3 ≡ a X0 + (a +a+1)c = a X0 + (mod m) (6.10) ( a − 1) …………………………………………………….. c( a i − 1) Xi ≡ aiX0 + (mod m) (a − i) Dato un valore iniziale X0 (seme), la costante a che individua il moltiplicatore ed una costante c additiva (incremento), l’equazione (6.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 (6.9) e sono tutti interi, formando una sequenza di residui mod m. 88 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione Generando diverse versioni della formula (6.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 è in intero positivo e calcola una sequenza di numeri per mezzo della relazione di congruenza seguente Xi+1 ≡ Xi + Xi-k (mod m) [6.11] dove a = 1 e c = Xn-k Se k=1 la (6.11) genera la ben nota serie di Fibonacci. Il metodo congruenziale moltiplicativo calcola una serie di interi non negativi per mezzo della relazione di congruenza seguente Xi+1 ≡ aXi (mod m) [6.12] Questo metodo rappresenta un caso speciale della relazione di congruenza [6.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 indicano i relativi numeri pseudocasuali sono 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 [6.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: Xn+l = (aXn + c) mod m n ≥ 0. [6.13] Il metodo è detto moltiplicativo se c = 0; misto se c ≠ 0. 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 <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. 89 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 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 6.3.2.1 Scelta del modulo Abbiamo precedentemente visto come i va lori generati dalla [6.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 ogni numero da 0 a m -1 ricorre soltanto una volta nel periodo; pertanto la scelta di X0 non influenza il periodo. Diversamente, 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. 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 = l0 d . 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. 90 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 6.3.3.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, la quale ha periodo m; tuttavia, come mostra il seguente esempio, ottenuto per m = 10, X0 = 2, la sequenza <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, 1972b). Teorema A: Una sequenza congruente lineare ha un periodo di lunghezza m se e solo se: 1) c e m sono primi tra loro; 2 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) 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. 6.3.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 2 [6.9] Cioè il loro massimo comune divisore è 1. 91 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 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, e 5 * l0d-2 con d ≥ 5, nel caso decimale. 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). Dalla condizione 1) risulta che, poiché m = 2b (m = 10d = 2d . 5d , nel caso decimale) X0 può essere un qualunque numero dispari positivo (e un qualunque dispari positivo non divisibile per 5, nel caso decimale). Dalla condizione 2) risulta anzitutto che, poiché a dev'essere primo con m = 2b (m = 2d . 5d, nel caso decimale), anche esso deve essere un numero positivo dispari (non divisibile per 5 nel caso decimale). E' possibile inoltre dimostrare che, se si sceglie a ≡ 3 oppure 5 (mod 8), cioè a = 8t ± 3 ove t e un qualsiasi intero positivo, allora a è un elemento primitivo modulo m, nel caso binario. Nel caso decimale, una buona scelta è a = 200 t ± z, ove z è uno dei seguenti valori: 3, 11, 13, 19, 21, 27, 29, 37, 53, 59, 61, 67, 69, 77, 83, 91,109,117,123,131,133,139,141,147,163, 171, 173, 179,111, 187, 189, 197. Nel caso binario, un esempio di sequenza che non soddisfa le condizioni del teorema B si ottiene per m = 25 , a = 7, X0 = 3, ed è: < Xn > = 3, 21, 19, 5, 3, …. di periodo h = 4 < 25-2 . Se invece si pone a = 11, si ottiene <Xn> = 3, 1, 11, 25, 19, 17, 27, 9, 3,... di periodo massimo h = 8. Poiché il periodo del moltiplicativo è sempre minore di m, con questo metodo non tutti i numeri compaiono nel periodo. Il metodo, a differenza di quello misto, presenta nell'intervallo [0, m-1] zone vuote, cioè zone in cui non si presentano numeri. La distribuzione e la distanza tra le zone varia col seme e col moltiplicatore. A proposito esistono ris ultati (Jansson, 1966) che raggruppiamo nel seguente corollario: Corollario A 1 ) Se a ≡ 5 (mod 8), le sequenze generate contengono i numeri 8ν+ l se X0 ≡ 1 (mod 4), e i numeri 4ν + 3 se X0 ≡ 3 (mod 4), con ν = 0, 1, 2, 2 b-2 -1; 92 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 2) Se a ≡ 3 (mod 8), le sequenze generare contengono i numeri 8ν+1 e 8v+3 se X0 =1,3,9, oppure 11 (mod 16), e i numeri 8ν+5 e 8v+7 se X0 ≡ 5, 7, 13, 15 (mod 16), ove v=0, 1,..., 2b-3-1. La maggior parte delle versioni dei metodi congruenziali moltiplicativi usano un modulo m=pe, rappresentante la dimensione della parola di un computer, dove p indica il numero di cifre costituenti il sistema di numerazione usato ed e rappresenta il numero di cifre in una parola di un computer. Per i computer binari p=2 ed per i computer decimali p=10. Sulla lunghezza della voce dei computer il valore di e è lasciato alla discrezione dei programmatori, dove la lunghezza fissata della voce e è una costante. Per indicare cifre decimali o binarie saranno usate al posto di e i simboli d e b. Ci sono due ragioni per scegliere m=pe. la prima e che la riduzione mod m è accompagnata dal troncamento e trattenuta delle e cifre di più basso ordine; secondo, la conversione all’intervallo unitario (per ottenere variabili uniformemente distribuite) involve lo spostamento del punto binario o decimale alla sinistra del numero. Con una opportuna scelta di m queste divisioni possono essere raggiunte con un artificio. Poiché la maggior parte dei computer utilizzano o il sistema binario o il sistema decimale, considereremo il metodo moltiplicativo per ciascuno dei due sistemi di numerazione. In entrambi i casi avremo a che fare con sequenze di numeri numeri non negativi (minori di pe) per mezzo di una relazione congruenziale del tipo ni+1 ≡ ani (mod pe) [6.14] che è la formula per generare i residui delle potenze. Discuteremo in entrambi i casi le condizioni che potranno essere imposte al moltiplicatore a ed al valore iniziale X0 per assicurare il massimo periodo per le sequenze generate con questo metodo. 6.3.3.3.1 Computers binari Per un computer binario scegliamo m=2b, dove con b indichiamo il numero di cifre binarie in una voce. In accordo con il teorema B per b>2, il massimo periodo ottenibile è h=2 b-2 . Il problema successivo è quello di trovare un valore per la costante moltiplicativa che ha ordine h=2b-2 . Dal teorema B segue che a deve essere relativamente primo con m. Inoltre se a è relativamente primo con m=2b, deve essere un numero dispari. Si può mostrare che i valori di a che soddisfano a queste richieste risiedono in una classe residua rappresentata dalla relazione di congruenza a≡ ± 3 (mod 8) [6.15] Questa relazione può essere espressa anche come a=8t ± 3 [6.16] Dove t è un qualunque intero positivo. In accordo con la formula di Greenberger, i valo ri di a che sono prossimi a 2b/2 minimizzano la serie delle correlazioni del primo ordine fra i numeri pseudocasuali. Poiché sono altamente desiderabili piccole correlazioni fra le caratteristiche dei generatori di numeri pseudocasuali, questa regola sarà applicata per determinare la migliore costante moltiplicativa per entrambi i casi, sia binario che decimale. Avendo scelto una costante moltiplicativa, dobbiamo ora applicare un metodo per scegliere un valore iniziale. In accordo con il teorema B, X0 deve essere relativamente primo con 2b. Questa richiesta può essere soddisfatta scegliendo un qualunque numero dispari positivo. 93 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione La procedura moltiplicativa per generare numeri casuali può essere riassunta come segue: 1. – Scegliamo un numero intero dispari qualsiasi come seme della serie da generare. 2. – Scegliamo un valore intero a = 8t ± 3 Dove t è un qualunque positivo intero per la costante moltiplicatica. Un valore di a prossimo a 2b/2 soddisferà la condizione di Coveyou-Greenberger (se b=35, a=217 +3 è una buona scelta). 3. – Calcoliamo il prodotto aX0 usando l’aritmetica fixed point intera. Questo prodotto consisterà di 2b bits, per cui scarteremo i b bits di ordine maggiore e tratterremo i b bir di ordine inferiore che rappresenterà X1 . (La istruzione di moltiplicazione intera del FORTRAN scarta automaticamente i b bit do ordine superiore). 4. – Calcoliamo r1 = X1 /2b per ottenere una distribuzione uniformemente distribuita definita nell’intervallo unitario. 5. – Ogni successivo numero casuale Xn+1 è ottenuto con i b bit di ordine inferiore del prodotto aXi. Consideriamo l’esempio seguente che illustra il caso in cui b è assunto uguale a 4. La procedura moltiplicativa produrrà 4 numeri casuali (h=24-2 =4) così come ricordato in precedenza. 1. – Scegliamo X0 =7. Questo in forma binaria equivale a X0 =0111. 2. – Scegliamo un valore di a prossimo a 2b/2 =4. Per t=1, dall’equazione a= 8t ± 3 , a è uguale ad 11 o a 5. Scegliamo quindi a=5 ossia a=0101 in forma binaria. 3. – aX0 =(0101)(0111) = 00100011. Perciò X1 =0011 ed r1 =3/16=0,1875. 4. – aX1 = (0101)(0011) = 00001111. Perciò X2 = 1111 ed r2 = 15/16 =0,9375. 5. – aX2 = (0101) (1111) =01001011. Perciò X3 = 1011 ed r3 =11/16 = 0,6875. 6. – aX3 = (0101) (1011) = 00110111. Perciò X4 = 0111 = X0 ed r4 =7/16 = 0.4375 6.3.3.3.2. Computers decimali Per un computer decimale scegliamo m=10 d=2d*5d, dove d è il numero di cifre decimali in una parola. In accordo con il corollario a, a deve essere relativamente primo con 10, e poiché 10 è un numero composto, l’ordine h di a (mod 10d ) è al massimo H= m.c.m.[2d-2 , 4*5d-1 ] = 5*10d-2 [6.17] Per d>3. I numeri con questo periodo massimo devono essere della forma a≡±3 (mod 8) in maniera da assicurare il massimo ordine mod 2 d e contemporaneamente devono avere ordine 5d-1 o 2*5d-1 o 4*5d-1 (mod 5d). La costante moltiplicativa con periodo 5*10 d-2 residua in 32 classi differenti residue mod 200, indicate con a≡±(3, 11, 13, 19, 21, 27, 29, 37, 53, 59, 61, 67, 69, 77, 83, 91) (mod 200) [6.18] Di conseguenza a può essere anche espressa come 94 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione a= 200t ±p dove t è un qualunque intero positivo e p è uno dei 32 numeri dell’equazione [6.18]. In accordo con il teorema B, X0 deve essere relativamente primo con 10d, che implica che qualsiasi numero dispari non divisibile per 5 può essere scelto come valore iniziale. La procedura moltiplicativa per generare numeri casuali su un calcolatore decimale è riassunta nel seguito: 1. - Scegliamo un qualunque numero intero dispari non divisibile per 5 come seme della nostra sequenza. 2. – Scegliamo un intero a=200t±p per la costante moltiplicativa a, dove t è un qualunque intero e p è uno dei valori 3, 11, 13, 19, 21, 27, 29, 37, 53, 59, 61, 67, 69, 77, 83, 91. Un valore di a prossimo a 10d-2 soddisfa la condizione di CoveyouGreenberger (se d=10, a=100000±3 è una buona scelta). 3. – Calcoliamo il prodotto aX0 usando l’aritmetica intera fixed point. Questo prodotto consisterà di 2d digits, per cui scarteremo i d digits di ordine superiore e tratterremo i d digits di ordine inferiore. 4. – Il punto decimale deve essere spostato di d digits a sinistra per convertire il numero casuale intero in un numero uniformemente distribuito nell’intervallo unitario x (r1 = 1 ). 10 5. – Ogni numero casuale successivo Xi+1 sarà ottenuto dalle d cifre di ordine inferiore del prodotto aXi. Consideriamo il seguente esempio in cui d è assunto =4. La procedura moltiplicativa produrrà 500 numeri casuali (h=5*104-2 =500) prima di ripetersi. 1. – Scegliamo X0 =5379. 2. – Scegliamo un valore di a prossimo a 10d/2 = 100. O a=(200)(0) + 91 = 91 o a=(200)(1) – 91 = 109 sono entrambe buone scelte per il valore di a. Per questo esempio sceglieremo 91. 3. – aX0 =(91)(5379)=00489489. Perciò X1 =9489 ed r1 =0.9489. 4. – aX1 =(91)(9489)=00863499. Perciò X2 =3499 ed r2 =0.3499. 5. – aX2 =(91)(3489)=00318409. Perciò X3 =8409 ed r3 =0.8409. 6. – aX3 =(91)(8409)=00765219. Perciò X4 =5219 ed r4 = 0.5219. L’esempio mostra che la legge regola le cifre lontano dalla casualità. Con i generatori moltiplicativi solo le posizioni delle cifre di ordine superiore hanno periodo pieno, mentre il periodo diminuisce per le cifre di ordine inferiore. Perciò se è richiesto un numero casuale più piccolo di quello contenibile in una parola, saranno usate le cifre di ordine superiore. Anche se il metodo congruenziale moltiplicativo è il più facile da programmare ed è molto veloce sulla maggior parte dei computers, si possono verificare situazioni di cattivo funzionamento specialmente dovute alle correlazioni che rivela nella serie che possono portare a delle aberrazioni. 95 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 6.3.3.4 Metodo Congruenziale Misto Offre alcuni vantaggi rispetto al metodo moltiplicativo ma introduce problemi di accettabilità statistica. Il metodo è basato sulla formula ricorsiva presentata da Xn+1 =aXn +c (mod m) E con valori appropriate scelti per il moltiplicatorea e per la costante addittiva c?0, il periodo copre l’intera serie di m differenti numeri, se m è il modulo. Le condizioni imposte su a e c per raggiungere un periodo pieno possono essere riassunte come segue: c ed m sono primi fra loro; a≡1 (mod p) è un fattore primo di m; a≡1 (mod 4) se 4 è un fattore di m. Il modulo m è espresso come m=2b per computers binari ed m=10 d su computers decimali. Segue l’interpretazione pratica di queste regole. 6.3.3.4.1. Computers binari Con computers binari m=2b, dobe b è il numero di cifre binarie in una parola. Dal teorema A sappiamo che una sequenza di numeri pseudo-casuali può avere un periodo pieno con lunghezza uguale a 2 b. Le regole per raggiungere questo risultato richiedono che nella equazione Xn+1 =aXn +c (mod m) Il parametro c sia un numero dispari e che a≡1 (mod 4) che può essere raggiunto ponendo a=2s+1 per s=2. Per X0 può essere scelto un qualunque numero positivo. Tuttavia le condizioni scritte non sono sufficienti per assumere che la sequenza generata con il metodo congruenziale misto possa essere statisticamente soddisfacente. Per esempio, la scelta di una costante moltiplicatica che soddisfi la condizione di Coveyou-Greenberger a=2b/2 +1 non è una condizione sufficiente per minimizzare le correlazioni del primo ordine che si generano nella serie dei numeri generati con questo metodo. Solo con verifiche empiriche possiamo raggiungere una certa confidenza con i metodi congruenziali misti. Test sistematici sui generatori misti su computers binari sono stati descritti da vari autori3 ed indicano risultati validi solo per m=235 . Questi test rivelano che X0 gioca un ruolo minore nel determinare le proprietà statistiche delle sequenze generate con il metodo congruenziale misto, sebbene alcuni valori di c tendono ad aumentare le proprietà statistiche delle sequenze. Una buona scelta per un moltiplicatore è a 27 +1 quando c=1. 3 - Chernoft, Herman. “Sequential design of experiments”, Annuals of Mathematical Statistics, XXX (September 1959), 755-770. - Churchman, C. West. “An analysis of the concept of Simulation”, Symposium on Simulation Models. Edited by Austin C. Hoggatt and Frederick E. Balderstone- Cincinnati: South-WesternPublishing Co., 1963. 96 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 6.3.3.4.2. Computers decimali Con computers decimali m=10d, dove d è il numero di cifre decimali in una parola. Per poter generare una sequenza di numeri pseudocasuali con periodo pieno, la costante c deve essere un numero dispari positivo non divisibile per 5, ed il moltiplicatore a deve soddisfare la condizione a≡1 (mod 20) [6.19] o in alternativa a=10s+1 [6.20] per s>1. Queste regole possono essere supportate con la condizione di CoveyouGreenberger che a=10d/2 +1 [6.21] Di nuovo queste condizioni non sono sufficienti a garantire l’accettabilità statistica delle proprietà per sequenze di numeri pseudo casuali generate col metodo congruenziale misto. Una esperienza limitata con i test statistici ha suggerito alcuni criteriper scegliere valori di a e c su basi empiriche. Come visto in precedenza, certi numeri per c conducono a migliori risultati statistici di altri, ed X0 ha un effetto trascurabile o addirittura nessun effetto sulle proprietà statistiche delle sequenze. Risultati soddisfacenti sono stati ottenuti4 usando a=101, c=1 e d=8. Ogni cifra nel numero casuale generato con questo metodo (includendo l’ultima cifra in una parola) ha un periodo pieno. Questa proprietà fornisce piccole dimensioni della parola e velocità possibili maggiori quando la lunghezza del periodo non è una richiesta significativa. 6.3.3.5. Relazione tra generatori moltiplicativi e misti Il generatore moltiplicativo è tradizionalmente considerato migliore del misto, per la maggiore casualità con cui si manifestano i numeri. Confronti effettuati hanno infatti portato ad affermare che il comportamento statistico del metodo misto non è così soddisfacente come quello del moltiplicativo (Hull, 1964; Mac Laren, 1965). Queste affermazioni sono state recentemente ridimensionate fino ad affermare che l'una forma di generatore non è migliore dell'altra (Marsaglia, 1972; Overstreet, 1976). Viste da vicino, tuttavia, le due affermazioni non si contraddicono. Mentre, infatti, la prima tende ad affermare che i generatori moltiplicativi di periodo massimo sono più spesso buoni, dal punto di vista statistico, dei generatori misti di periodo massimo, la seconda sostiene che per ogni sequenza reale <Rn > nell'intervallo [0.1), prodotta da un generatore moltiplicativo di periodo massimo modulo 2 b, esiste una corrispondente sequenza reale <Rn > prodotta da un generatore misto, tale che la differenza Ri-Ri 'i <3/2b . Cioè, per ogni applicazione pratica, il misto produce la stessa sequenza di reali. Infatti, usando la parte 1 del corollario A è possibile dimostrare (Overstreet, 1976) che, dato un generatore moltiplicativo Xn+1 = a Xn mod 2b [6.7’] con a≡ 5 (mod 8) e X0 = 1 (mod 4), esiste un generatore misto 4 Bailey, N. T. J. “The elements of Stochastic Processes”. New York: John Wiley and Sons, 1964. 97 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione X’n +1 = (a X’n + c) mod 2 b-2 con c= a/4 che dà X’i = Xi/4. Pertanto, per tutti i corrispondenti valori Xi e X’i, ove il generatore moltiplicativo produce il valore reale Xi/2b, il generatore misto produce il valore X`i /(2b-2) = (Xi /2b)-(1/2 b). Se invece è X0 ≡ 3 (mod 4) e c=3a/4, allora il generatore misto produce in corrispondenza il valore X’i/(2 b-2 )= (Xi/2 b)-(3/2b ) Usando invece la parte 2 del corollario A, è possibile dimostrare che, dato un generatore [6.7'] con a ≡ 3 (mod 8) e X0 ≡ 1 (mod 2), esiste un generatore misto X’n+1 = (a X’n +c) mod 2 b-1 con c=a/2 che dà X’i = Xi/2 . Esso pertanto, ove il generatore moltiplicativo produce il valore reale Xi /2b, produce il valore X’i/(2b-1 ) = (Xi /2b)- (1 /2 b). Si ottiene così un generatore misto che offre praticamente le stesse qualità statistiche di uno moltiplicativo, conservando i vantaggi di un maggior periodo. In particolare, nel primo caso tutte le condizioni del teorema A sono soddisfatte e quindi il periodo del generatore misto è quello massimo; nel secondo la 3) non è soddisfatta e il periodo è metà del massimo. Tuttavia, poiché il generatore moltiplicativo corrispondente produce un periodo che è solo un quarto del modulo, questo metodo fornisce un generatore misto che ha un periodo da due a quattro volte maggiore di uno moltiplicativo con identiche proprietà statistiche. Un risultato che si può rivelare interessante per simulazione con piccoli elaboratori. Recentemente sono apparsi in letteratura segnali di insoddisfazione per le proprietà statistiche dei numeri generati con metodi congruenziali 6.3.3.6. 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 Green5 . La formula base usata per la verifica è stata Xj≡(Xj-1 +Xj-k ) (mod 2b) [6.22] 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. I numeri pseudocasuali generati in questo modo hanno un periodo uguale a pk *2b-1 , dove pk è una costante che dipende da k e da b. Per b=35 sono stati gabellati diversi valori di pk , dei quali vengono riportati soltanto p6 =63 e p16 =255. 5 - Green, B. F. “Digital Computers in Research”. New York: Mc Graw-Hill Book Co.. 1963. - 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. 98 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione Test statistici indicano che k=16 è il più piccolo valore per numeri pseudocasuali accettabili. Questa scelta fornisce un periodo pari a 255*234 . Scartando ogni secondo numero dalla sequenza si producono numeri casuali accettabili con k=6 e con un periodo di 63*234 . Test comparativi sui vantaggi del metodo additivo sul metodo moltiplicativo non sono riportati in letteratura. Le caratteristiche di velocità dei generatori addittivi dipende dal linguaggio usato e dai computers usati e le proprietà statistiche dei numeri casuali richiedono test empirici come con qualunque altro metodo. 6.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à. 6.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. Numeri di quattro cifre ottenuti col 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 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 . 99 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 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 g = 10-1 = 9 ed il valore del χ *2 , per un livello di confidenza 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 confidenza. Calcolo del χ 2 per il test di frequenza eseguito sulla tabella di numeri pseudocasuali ottenuti con il metodo dei quadrati centrali Cifra Frequenza Frequenza (Oi - Fi ) (Oi - Fi )2 (O - F ) 2 i i Osservata (Oi ) Teorica (Fi ) Fi 0 1 2 3 4 5 6 7 8 9 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 0,333 1,333 0,083 1,333 0,750 2,083 2,083 0,333 1,333 0,000 (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 100 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione g = n-1 = 10- 1 = 9. Il controllo dell'aderenza della distribuzione dei χ 2M calcolati, alla distrib uzione 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. 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 N in ciascun subintervallo è . S indichi ora con f j, con j=1, 2, …, x, l’attuale numero di x ( j − 1) j numeri pseudocasuali ri ( con i = 1, 2, …, N) nel subintervallo ≤ ri < . x x La statistica x x N χ12 = ( ) ∑ ( f j − ) 2 N j=1 x 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 u u M χ F2 = ∑ ( F j − ) 2 M j=1 u 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 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 N in ciascun subintervallo è . S indichi ora con f j, con j=1, 2, …, x, l’attua le numero di x ( j − 1) j numeri pseudocasuali ri ( con i = 1, 2, …, N) nel subintervallo ≤ ri < . x x La statistica 101 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione χ12 = ( x x N )∑ ( f j − ) 2 N j=1 x 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 u u M χ F2 = ∑ ( F j − ) 2 M j=1 u 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 6.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. 6.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 coordinate di punti casuali all’interno di un cubo di lato unitario. Il test seriale che descriveremo è basato anche sul test del chi-quadro 3 consiste nei seguenti passi. Cominciamo col generare una sequenza di M serie consecutive di numeri 2 pseudocasuali e calcoliamo il χ1 per ognuna delle M serie. Quindi per ogni serie di numeri pseudocasuali indichiamo con f ik il numero di numeri pseudocasuali ri (con i=1, ( j − 1) j (k − 1) k 2, …, N-1), che soddisfa la relazione ≤ ri < e ≤ ri+1 < , dove j,k=1, 2, x x x x …,x. Quindi calcoliamo la statistica x2 x x N −1 χ 22 = ( f jk − 2 ) 2 ∑∑ N − 1 j=1 k =1 x per ognuna delle serie degli N numeri pseudocasuali. 102 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione Good ha dimostrato che χ 22 - χ 12 ha approssimativamente una distribuzione del chiquadro 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 u u M χ s2 = ∑ ( s j − ) 2 M j=1 u 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. Verificare l’aggancio del precedente con ciò che segue 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. Se il χ2 calcolato risulta minore di un χ2 tabellato ad un livello di confidenza del 5% diremo che è accettabile l’ipotesi di casualità a quel livello di confidenza. Idem Questo test si applica 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 103 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 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 Z0 Z1 , Z1 Z2 , Z2 Z3 , … Zn-1 Zn 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 Z0 Z1 , Z2 Z3 , Z4 Z5 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 Z0 Z1 , Z2 Z3 . Z4 Z5 ,.…, si saranno trascurate le Z1 Z2 , Z3 Z4 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: Z0 Z1 , Z2 Z3 , Z4 Z5 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. 2.24 Categorie per test seriale 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, 104 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 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.2.25 - Test seriale a 2 e 3 dimensioni per generatore congruente. (Lewis e Payne, 1973; 0 Association for Computing Machinery 1973, per concessione.) 6.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 dimostrare 6 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: σ = 13 N − 19k /(12N − k ) per k>0 L'aderenza della curva reale alla distribuzione normale si può misurare con un test del χ2 . 6.4.5 Test del gap 6 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 ri ri+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-k ri , ri ri+k )=3/144, e di queste covarianze ce ne sono N-2k. 105 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 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 verificano 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. I valori dei χ2 ottenuti da diversi campioni possono essere trattati come visto in precedenza nei casi analoghi. 6.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. 6.4.4. Test del poker (o delle partizioni) Il test del poker è uno speciale test che serve a confrontare la frequenza di combinazioni di cinq ue 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; 106 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 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 = [6.12] dh s ove d è il numero di different i 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 h su s posti, e il fattore è il numero di Stirling di seconda specie, che fornisce il s numero di modi in cui è possibile ripartire 5 oggetti distinguibili su s classi. E' noto (Knuth, 1972) che: 5 5 5 =1, =15, =25, 1 2 3 5 5 =10, =1, 4 5 mentre d assume valori usuali o vicini a quelli del poker (ad es. d =8 oppure 10). 107 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 6.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. 2.27): x0 = F -1 (r0 ) [2.13] E' facile vedere che la legge di probabilità x così ottenuta è la funzione densità f(x), applicando la [2.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) ed F(x) = x − a ponendo pertanto: r = F(x) si ha: x=F–1 (r)=r(b-a)+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à è purtroppo impossibile, o estremamente Figura 2.27 Trasforma zione inversa difficile 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. 6.5.1 Generazione di distribuzioni approssimate continue 108 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 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 Tabella 2.1 1 i Fi xi 0 0,000 0 1 0,025 10 2 0,075 20 3 0,200 30 4 0,300 40 5 0,47S 50 6 0,625 60 7 0,825 70 8 0,92S 80 9 1,000 90 10 1,000 100 ai 400 200 80 100 57 66 50 100 130 - Questi valori, possono essere portati nella stessa tabella, che avrà l'aspetto della tabella 2.11. 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. 6.5.2. Generazione di distribuzioni empiriche discrete 109 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione 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 2.12 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. 2.28 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. 2.29) 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. E' facile convincersi che il metodo qui delineato equivale a una trasformazione inversa operata su una curva di distribuzione cumulativa discreta. 110 Prof. Ing. Michele Marra – Corso di Laurea Specialistica in Ingegneria Gestionale – Appunti delle Lezioni di Calcolo delle Probabilità e Statistica - Simulazione I programmi di ricerca richiedono in genere discrete quantità di tempo. Figura 2.29 – 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, d1 d2 d3 d4 il numero xi presente nella locazione d1 d2 d3 è assunto come valore di x. 6.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à. 111