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