Generazione di numeri casuali

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