Generazione di numeri casuali Daniela Picin Testi di consultazione • Gentle I.E. – Random Number Generation and Monte Carlo Methods, 2nd ed. – Springer Verlag, 2005 • Raj Jain - The Art of Computer Systems Performance Analysis: Techniques for Experimental Design, Measurement, Simulation, and Modeling – John Wiley & Sons, 1993 2 Generazione Generazione di di numeri numeri casuali casuali Un generatore di numeri pseudocasuali è un programma la cui sequenza di uscita è la s i m u l a z i o n e di una sequenza di variabili casuali indipendenti. Alcune applicazioni: – – – – – – Esperimenti statistici Simulazione di sistemi stocastici Metodi Monte-Carlo Algoritmi probabilistici Computer games Crittografia 3 Generazione Generazione di di numeri numeri casuali casuali Generatore pseudocasuale Si definisce generatore una struttura G = (S, μ, f, U, g) che opera nel seguente modo: • seleziona lo stato iniziale s0 ∈ S tramite μ, pone u0 = g (s0 ); • per i > 0 i cambiamenti di stato sono determinati dalla ricorrenza si = f (si-1) ed ui = g (si); La sequenza di osservazioni (u0, u1, u2,...) è l'uscita del generatore. 4 Generazione Generazione di di numeri numeri casuali casuali Caratteristiche di qualità • • • • • • • Uniformità Indipendenza statistica Riproducibilità Periodicità Efficienza Portabilità Jumping-ahead 5 Generazione Generazione di di numeri numeri casuali casuali Metodi di generazione • Congruenza lineare – – – – – – – Generatore lineare congruente (GLC) Generatore Ricorsivo Multiplo e gen. Fibonacci Sequenze di Tausworthe Linear Feedback Shift Register , GFSR Generatore add with carry Generatore substract with borrow Generatore multiply with carry 6 Generazione Generazione di di numeri numeri casuali casuali Metodi Congruenziali Una classe di generatori di numeri casuali a distribuzione uniforme è basata sui cosiddetti Metodi Congruenziali. Questo significa semplicemente che sono basati sulla operazione (di congruenza): y = x mod m, che nel concreto consiste in • calcolare q = x/m • calcolare p = m * ⎢⎣ q ⎥⎦ • porre y = x-p Esempio: 74 mod 7 = 4; 74/7 = 10.571; 7*10 = 70; 74-70=4 (Slide (Slide su su internet: internet: F. F. Mazzia Mazzia)) 7 Generazione Generazione di di numeri numeri casuali casuali Metodi di generazione • Congruenza non lineare – Congruenza quadratica – Congruenza inversa • Combinazione di generatori • Tabelle di numeri random • Middle Square (Centro del quadrato) 8 Generazione Generazione di di numeri numeri casuali casuali Middle Square • a valore compreso tra 0 ed 1 con un numero pari di n cifre decimali; • a 2 (doppia precisione); • a 2 * 10 (n/2); • b = prime n cifre decimali (secondo elemento della sequenza) Esempio: a = 0.5772156649 (n =10) a 2 = 0.33317792380594919201 a 2 * 10 5 = 33317.792380594919201 b = 0.7923805949 (Slide (Slide su su internet: internet: Manuela Manuela Aprile, Aprile, Maria Maria Chiara Chiara Fumi Fumi)) 9 Generazione Generazione di di numeri numeri casuali casuali Generatore lineare congruente xi +1 = ( axi + c ) mod m i = 0,1,... dove x0, m, a, c ∈ Z+ sono chiamati rispettivamente seme, modulo, moltiplicatore ed incremento xn ∈ Zm ={0,...,m-1} è lo stato al passo n il periodo è il più piccolo intero λ t.c. xλ = x0 se λ =m abbiamo il periodo massimo se c = 0 abbiamo il GLC Moltiplicativo 10 Generazione Generazione di di numeri numeri casuali casuali Generatore lineare congruente Esempio: Parametri iniziali: X0 = 3, m = 9, c =2, a = 7 X1 = (7*3+2) mod 9 = 5 X2 = (7*5+2) mod 9 = 1 X3 = (7*1+2) mod 9 = 0 X4 = (7*0+2) mod 9 = 2 X5 = (7*2+2) mod 9 = 7 X6 = (7*7+2) mod 9 = 6 X7 = (7*6+2) mod 9 = 8 (Slide (Slide su su internet: internet: Manuela Manuela Aprile, Aprile, Maria Maria Chiara Chiara Fumi Fumi)) 11 Generazione Generazione di di numeri numeri casuali casuali GLCM con periodo massimo 1° caso • m = primo, c = 0, x0 ≠ 0 • a = elemento primitivo modulo m ( Ù a n mod m ≠ 1 per n = 1,2,…,m-2) • λ = m-1; 2° caso • m = 2b, c = 0, x0 numero dispari • a = 5 mod 8 • λ = m/4 = 2b-2 12 Generazione Generazione di di numeri numeri casuali casuali Generatore Lineare Congruente Moltiplicativo La ricorrenza del GLCM per gli interi è equivalente, nell’intervallo (0,1), alla ricorrenza ui +1 = a ui mod1 con 0 < ui < 1 13 Generazione Generazione di di numeri numeri casuali casuali Restrizione dei valori in uscita all’intervallo (0,1) • Analisi teorica xi ui = m ⇒ ui ∈ [ 0,1) • Scelte alternative xi ui = ( m − 1) ui = ( xi + 1 2 ) m ⇒ ui ∈ [ 0,1] xi 1 = + H dove H = m 2m (ACM (ACM Transactions Transactions on on Modeling Modeling Computer Computer Simulation Simulation Vol. Vol. 13, 13, n. n. 4, 4, 2003) 2003) ⇒ ui ∈ ( 0,1) 14 Generazione Generazione di di numeri numeri casuali casuali Implementazione al computer Nell’implementazione il prodotto a xn-1 può causare overflow. Come evitarlo: • se a è relativamente grande – a = cd + e – • a = ±2r ± 2w se a < m altra procedura di calcolo (GRM) (ACM (ACM Transactions Transactions on on Modeling Modeling Computer Computer Simulation Simulation Vol. Vol. 13, 13, n. n. 4, 4, 2003) 2003) 15 Generazione Generazione di di numeri numeri casuali casuali GLCM con buone figure di merito • m è un numero primo; • λ = m-1; • a e a* sono elementi primitivi modulo m • a* è l’elemento moltiplicativo inverso di a modulo m (Mathematics (Mathematics of of Computation Computation Vol. Vol. 68, 68, n. n. 225, 225, 1999) 1999) 16 Generazione Generazione di di numeri numeri casuali casuali Generatore Ricorsivo Multiplo Consideriamo i generatori del tipo xn = (a1 xn−1 + ... + ak xn−k ) mod m con k > 1 a k ≠ 0 Il periodo è il più piccolo intero positivo λ per cui ( x0 ,..., xk −1 ) = ( xλ ,..., xλ +k −1 ) Ci sono mk k-uple possibili di cui uno è il vettore nullo, il periodo massimo è λ = mk –1 Per k > 1 il periodo risulta più grande di quello del GLC. 17 Generazione Generazione di di numeri numeri casuali casuali GRM e generatore di Fibonacci Per k=2 ed a1= a2=1 abbiamo il generatore di Fibonacci: xn = ( xn−1 + xn−2 ) mod m Svantaggi: •alta correlazione seriale: Es: m =1000 x0=1 e x1=1 La sequenza sarà 2,3,5,8,13,21,34,55,89,144,233,377,610,987,597,… •Non uniformità k-dimensionale 18 Generazione Generazione di di numeri numeri casuali casuali Esempio di struttura reticolare per un generatore di Fibonaci x = (x +x ) mod 125 con x = 0 e x = 1 n n −1 n − 2 0 1 Struttura reticolare per le seguenti coppie: a) [xn, xn+1], b) [x5n, x5n+1], c) [x5n+1, x5n+2], d) [x5n+2, x5n+3], e) [x5n+3, x5n+4], f) [x5n+4, x5n+5], 19 Generazione Generazione di di numeri numeri casuali casuali Generatore ricorsivo multiplo (G R M ) di ordine k xn = (a1xn−1 + ... + ak xn−k )mod m con k > 1 ak ≠ 0 un = xn m Se il modulo m è primo può raggiungere il periodo massimo λ=mk –1 Si ha λ=mk –1 se il polinomio caratteristico ( k f ( x) = xI − A mod m = x − ∑ ai x k i =1 k −i ) mod m è un polinomio primitivo modulo m con m numero primo 20 Generazione Generazione di di numeri numeri casuali casuali Implementazione GRM In termini di implementazione un caso interessante è f ( x) = x − a j x k k− j − ak con 1 ≤ j ≤ k La ricorsione diventa xn = (a j xn− j + ak xn−k ) mod m 21 Generazione Generazione di di numeri numeri casuali casuali Esempi per l’implementazione di un GRM ¾ Estensione del gen. di Fibonacci xn = ( xn− j + xn−k ) mod m Se il modulo è una potenza di 2, es. 2p, il periodo massimo possibile è (2k -1) 2p-1 ¾ Deng e Lin [2000] propongono un generatore in cui a1 = 1 e gli altri aj = 0 eccetto per ak xn =( Bxn − k + xn −1 ) mod m con a1 =1, ak = B , n≥ k 22 Generazione Generazione di di numeri numeri casuali casuali Esempi per l’implementazione di un GRM ¾Nel 2003 Deng e Xu propongono dei GRM di ordine k, chiamati DX-K generators, dove gli aj ≠ 0 della ricorrenza sono tutti uguali. Nel caso di un GRM DX-k-2 avremo: xn = B ( xn−k + xn−1 ) mod m con a1 = ak = B , n ≥ k Es. per k=1511 e m =231 – 55719 hanno trovato un DX-1511 con un periodo λ ≅ 1014100.5 ACM ACM Transactions Transactions on on Modeling Modeling Computer Computer Simulation Simulation Vol. Vol. 13, 13, n. n. 4, 4, 2003) 2003) 23 Generazione Generazione di di numeri numeri casuali casuali Generatore ricorsivo multiplo (G R M ) di ordine k La difficoltà è nella ricerca del periodo massimo. CNES perché il polinomio caratteristico f(x) sia un polinomio primitivo modulo m : (a) (b) (c) (( -1) k +1 ak ) ( m−1) s mod m ≠ 1 ∀ fattore primo s di m - 1 ( ( x mod f ( x ) ) mod m ) = ( ( −1) ( ( x mod f ( x ) ) mod m ) ha grado r r k +1 ) ak mod m dove r = ( m k − 1) ( m − 1) > 0 ∀ fattore primo s di r , 1 < s < r 24 Generazione Generazione di di numeri numeri casuali casuali Generatore ricorsivo multiplo (G R M ) di ordine k la ricerca e la generazione di polinomi primitivi modulo m non è banale poiché occorre la fattorizzazione di r = ( m k − 1) ( m − 1) in generale si cercano dei valori di m e k tali che r è primo 25 Generazione Generazione di di numeri numeri casuali casuali Generatore ricorsivo multiplo (G R M ) di ordine k Tabella Alcuni valori di m e k tali che m, (m-1)/2 e r siano primi (L ’Ecuyer, Operation (L’Ecuyer, Operation Research Research Vol. Vol. 47, 47, n. n. 1, 1, 1999) 1999) 26 Generazione Generazione di di numeri numeri casuali casuali Esempio implementato di un GRM xn = ( a j xn− j + ak xn−k ) mod m Consideriamo un generatore del 5° ordine (k=5) con m=231-1 a1=107374182 a5=104480 a2= a3= a4=0. Il prodotto modulo m è calcolato usando la tecnica descritta da l’Ecuyer [1990]: • i coefficienti ai soddisfano la seguente condizione: (1) ai ( m mod ai ) < m dove m = ai q + r con r < ai ∀i •la condizione (1) è verificata Ù ai < m o ai = ⎢⎣ m j ⎥⎦ per j 2 < m 27 Generazione Generazione di di numeri numeri casuali casuali Esempio implementato di un GRM ⇒ z = ( ai x mod m ) ∈ ( − m, m ) con ai , x, m ∈ Z codice C: h=x/q; x=ai∗(x-h∗q)-h∗r; if (x<0) x=x+m; Nell’esempio m =20∗a1+7=20.554∗a5+1727 28 Generazione Generazione di di numeri numeri casuali casuali 29 Generazione Generazione di di numeri numeri casuali casuali Combinazione di generatori ricorsivi multipli (CGRM) x1,n = ( a1,1 x1,n−1 + ......a1,k x1,n−k ) mod m1 x2,n = ( a2,1 x2,n−1 + ......a2,k x2,n−k ) mod m2 un = ( x1,n m1 − x2,n m2 ) Se consideriamo j GRM il CGRM risultante può raggiungere il periodo massimo: λ = m.c.m. ( m1k − 1) ........ ( m kj − 1) P. P. L'Ecuyer, L'Ecuyer, Operations Operations Research, Research, 47, 47, 11 (1999), (1999), 30 Generazione Generazione di di numeri numeri casuali casuali Esempi di CGRM con buone proprietà strutturali: rj è primo (m λ= k 1 − 1) ... ( m kj − 1) 2 j −1 31 Generazione Generazione di di numeri numeri casuali casuali Esempio implementato con k=3: MRG32k3a m1 = 232 − 209, m2 = 232 − 22853, ( a11, a12 , a13 ) = (0,1403580,-810728) ( a21 , a22 , a23 ) = (527612,0,-1370589) La lunghezza del periodo è: λ = ( m −1)( m −1) 2 ≈ 2 ∼ 3.1*10 3 1 3 2 191 57 è soddisfatta la condizione: a j,i ( m j − 1) ≤ 2 53 in questo modo il prodotto aj,i xj,i è sempre ben rappresentato in floating point su un computer a 32 bit, con almeno 53 bits di precisione per la mantissa. 32 Generazione Generazione di di numeri numeri casuali casuali 33 Generazione Generazione di di numeri numeri casuali casuali Riepilogo per una esatta implementazione di un GRM Vincoli diversi ai coefficienti: • alcuni aj = 0 • il prodotto a j,i ( m j − 1) ≤ 2 53 • gli aj,i soddisfano la condizione: a j ,i ( m j mod a j ,i ) < m j 34 Generazione Generazione di di numeri numeri casuali casuali Tipi diversi di applicazioni richiedono differenti vincoli sui moduli e sui moltiplicatori • Una impl. in virgola mobile con 53 bit di precisione permette di avere moduli con più di 31 bit ⇒ periodi più lunghi. • Per computer a 64 bit, vengono richiesti gen. impl. con interi a 64 bit ⇒ occorrono tabelle di buoni parametri per tali gen. • I generatori di numeri casuali sono un po’ come le automobili. 35 Generazione Generazione di di numeri numeri casuali casuali Congruenza Quadratica X n = ( aX n2−1 + bX n−1 + c ) mod m Esempio: Parametri iniziali: X0 = 2, a=2, b=3,c=1, m=4 X1 = (2*4+3*2+1) mod 4 = 3 X2 = (2*9+3*3+1) mod 4 = 0 X3 = (2*16+3*4+1)mod 4 = 1 X4 = (2*1+3*1+1) mod 4 = 2 X5 = (2*4+3*2+1) mod 4 = 3 (Slide (Slide su su internet: internet: Manuela Manuela Aprile, Aprile, Maria Maria Chiara Chiara Fumi Fumi)) 36 Generazione Generazione di di numeri numeri casuali casuali xi +1 Congruenza inversa = ( ax + c ) mod m con 0 ≤ x < m − i i dove x– è l’elemento moltiplicativo inverso di x modulo m, se esiste, altrimenti x– = 0. L’elemento moltiplicativo inverso x – di x modulo m è definito per tutti i valori x ≠ 0 e relativamente primi rispetto ad m tali che: − 1 ≡ x x mod m Buone proprietà di uniformità con particolare riferimento alla struttura reticolare e alla correlazione. 37 Generazione Generazione di di numeri numeri casuali casuali Sequenza di Tausworthe bi = ( a1bi −1 + a2bi−2 + ... + aq bi −q ) ( mod 2 ) dove le variabili bi sono dei bit e anche le costanti a1,a2,…..,aq assumuno valore 0 e 1. Poiché il modulo è un numero primo la sequenza può raggiungere il periodo massimo λ = 2q –1 se il polinomio caratteristico associato: f ( z ) = z − ( a1 z q q −1 + ... + aq−1 z + aq ) è un polinomio primitivo su un campo di Galois (2) definito sugli interi 0, 1 38 Generazione Generazione di di numeri numeri casuali casuali Sequenza di Tausworthe Consideriamo il caso bi = ( bi−r + bi−q ) ( mod 2 ) con 0 < r < q Operazione mod 2 è equivalente all’operatore or-esclusivo (⊕) bi = bi−r ⊕ bi−q ⎧bi = 0 se bi −r = bi −q ⎨ ⎩bi = 1 se bi −r ≠ bi −q 39 Generazione Generazione di di numeri numeri casuali casuali Sequenza di Tausworthe Esempio: Sia r = 3, q = 5 e b1 = b2 = ... = b5 = 1 Per i ≥ 6 bi = bi−3 ⊕ bi −5 I primi 42 bi sono 111110001101110101000010010110011111000110 + S S bii-5 -5 bii-4 -4 bii-3 -3 Il periodo dei bit è 31= 2q – 1 bii-2 -2 bii-1 -1 40 Generazione Generazione di di numeri numeri casuali casuali Sequenza di Tausworthe Si pone ora il problema di estrarre dei numeri casuali interi dalla sequenza binaria: • Si usa la ricorrenza per un numero sufficiente di volte, diciamo L con L ≤ q, le L-uple di bi sono interpretate come un numero in base 2. Se L è primo rispetto a λ=2q –1 il periodo delle L-uple sarà ancora λ = 2q –1; • Si legge la sequenza ogni L + (d scalature) con L ≤ q, si dimostra che se d è primo rispetto a λ = 2q –1 il periodo delle L-uple sarà ancora λ = 2q –1; • (GFSR) si selezionano dalla stringa L ≤ q bit non consecutivi, distanziati g bit l’uno dall’altro. Ogni nuovo numero è ottenuto spostandosi di un bit rispetto ai precedenti. 41 Generazione Generazione di di numeri numeri casuali casuali Linear Feedback Shift Register XOR x p-1 x p-2 xq x1 x0 USCITA s 42 Generazione Generazione di di numeri numeri casuali casuali F.S.R. per la crittografia 43 Generazione Generazione di di numeri numeri casuali casuali Selezione del seme in un generatore di numeri random Le successive condizioni permettono maggiore affidabilità per il generatore: •Non usare lo zero •Evitare i numeri pari: es. GLCM con modulo 2k •Non suddividere una sequenza usando valori adiacenti per simulare più variabili richieste dal modello. Come risultato ho una forte correlazione fra le due variabili. •Non usare semi casuali. 44 Generazione Generazione di di numeri numeri casuali casuali Metodi per ottenere sequenze di numeri casuali distinte utilizzando lo stesso generatore x0 , x1 , x2 ,..........., xn , xn+1 , xn+2 ,... • Utilizzare per ogni sequenza un seme diverso. Svantaggio: si possono avere delle sottosequenze sovrapposte. • Jumping-ahead: utilizzare un seme iniziale e prendere, per ogni variabile da simulare, sottosequenze diverse e non sovrapposte – GLCM xn = a n x0 mod m – GLC xn = a n x0 + c ( a n − 1) a −1 mod m 45 Generazione Generazione di di numeri numeri casuali casuali - GRM Sia λ la lunghezza del periodo sn lo stato del generatore al passo n T la funzione di transizione ⇒ T(sn) = sn+1 , Tλ(s) = s Ad esempio vogliamo due sequenze distinte di lunghezza Z. Primo caso: dato s0 genero Z valori, ottengo lo stato sz e inizio la nuova sottosequenza usando come seme sz+1 . Ho due sott.ze non sovrapposte Ù Z+Z < λ . Se serve un num. grande di sott.ze diverse il calcolo di tutti gli stati iniziali diventa piuttosto oneroso. 46 Generazione Generazione di di numeri numeri casuali casuali Secondo caso: Per ottenere il valore dello stato arbitrario sn+z a partire dallo stato sn si calcola sn+ z = A z sn mod m = ( A z mod m ) sn mod m con ⎛0 ⎜ . ⎜ A=⎜ . ⎜0 ⎜ ⎜a ⎝ k 1 0 ak −1 . . . . . . . . 0⎞ .⎟ ⎟ .⎟ 1 ⎟⎟ a1 ⎟⎠ xn = (a1 xn−1 + ... + ak xn−k ) mod m xn = A X n−1 mod m La matrice (Az mod m) viene calcolata una sola volta e viene utilizzata tutte le volte che occorre una nuova sott.za di dimensione z. P. P. L'Ecuyer, L'Ecuyer, Operations Operations Research, Research, 50, 50, 66 (2002), (2002), 47 Generazione Generazione di di numeri numeri casuali casuali Per grandi valori di z si calcola la matrice (Az mod m) usando l’algoritmo divide et impera: ⎧⎪( A z 2 mod m )( A z 2 mod m ) mod m se z è pari A z mod m = ⎨ z −1 A A mod m ) mod m se z è dispari ( ⎪⎩ il n.ro di moltiplicazioni matriciali sarà O (log2z). Knuth, Knuth, The The art art of of computer computer programming programming (1998) (1998) 48 Generazione Generazione di di numeri numeri casuali casuali Falsi dettagli • Un insieme complesso di operazioni conducono a risultati random che superano test di uniformità ed indipendenza; • Un solo test come ad es. il test chi-quadro è sufficiente a stabilire la “bontà” di un generatore • I numeri random sono non prevedibili • Non è importante una esatta implementazione • I bit delle parole successive generate da un generatore sono ugualmente distribuite. Se un algoritmo crea dei n. random di ampiezza l bit, la casualità è garantita soltanto quando vengono usati tutti gli l bit per formare successivi numeri random 49 Generazione Generazione di di numeri numeri casuali casuali Generatori di numeri casuali I generatori di numeri casuali usano una sorgente non deterministica (un fenomeno fisico). Esempio(2004): la sorgente sono dei fotoni inviati su uno specchio semitrasparente. Viene associato il valore 0 o 1 ai due eventi esclusivi (trasmissione o riflessione) http:// www.idquantique.com/products http://www.idquantique.com/products /quantis.htm /quantis.htm 50 Generazione Generazione di di numeri numeri casuali casuali