Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ed uso
di numeri
pseudocasuali
La simulazione di sistemi probabilistici può fornire risultati tanto più affidabili quanto
maggiore è il numero di eventi con i quali si sollecita il sistema, è quindi evidente che simili
problemi dovranno essere affrontati con l’aiuto di elaboratori elettronici i quali, per
definizione, sono degli automi deterministici a stati finiti e quindi non idonei alla generazione
di eventi casuali.
Solo attraverso lo sviluppo di opportuni algoritmi è possibile generare numeri casuali che
però non potranno mai essere effettivamente casuali e pertanto vengono detti pseudocasuali.
Affinché questi algoritmi possano essere ritenuti validi dovranno soddisfare alcune specifiche
caratteristiche:
In questa sede, saranno volutamente trascurati i metodi di generazione analogica i quali, pur
risultando effettivamente casuali, richiedono dell’hardware aggiuntivo e presentano alcuni tipi
di inconvenienti come la non riproducibilità delle sequenze, instabilità e criticità del controllo.
questo metodo presenta l’inconveniente che i numeri generati non hanno una uniforme
distribuzione statistica e che il periodo risulta molto breve.
Un metodo alternativo, derivato da quello di Von Neuman, è detto Metodo dei Prodotti
Centrati. Questo metodo parte con il prodotto di due numeri di n cifre e la successiva
estrazione delle n cifre centrali. Questo metodo è affetto dagli stessi problemi del precedente
ma presenta una ciclicità più lunga.
Operando con numeri a quattro cifre, la ciclicità non supera alcune migliaia ed è molto
frequente la tendenza a convergere verso lo zero.
I metodi più utilizzati per la generazione di numeri pseudocasuali sono quelli congruenziali i
quali utilizzano l’aritmetica modulare.
A mod B = A – (INT(A/B))*B se B ≠ 0
A mod B = A se B = 0
I metodi congruenziali più noti sono quelli di Lehmer (detto moltiplicativo) e di Rotemberg
(detto misto). Esiste anche il metodo di Fibbonacci (detto additivo) che però utilizza una
relazione di congruenza leggermente diversa da quella prima introdotta. Ci sono infine i
metodi di MacLaren e Marsaglia che sfruttano un metodo composito dei primi due.
Questo metodo prevede per la costante C il valore nullo per cui la relazione di congruenza
diventa:
X i +1 = ( A ⋅ X i ) mod M
É possibile dimostrare che nessuna classe finita di prove può garantire la pseudocasualità di
una sequenza finita di numeri, si può infatti verificare che una sequenza di numeri, pur avendo
superato un certo numero di test, non sia idonea per una specifica applicazione.
Si può asserire quindi che: il fatto che una o più sequenze di numeri generati per
mezzo di un algoritmo iterativo che soddisfi un certo insieme di test statistici è
una condizione necessaria ma non sufficiente a garantire la pseudocasualità sella
sequenza stessa.
Esistono in bibliografia molti tipi di test, i più noti sono: il test di frequenza, il test di
autocorrelazione, il test di autocovarianza, il test del chi-quadro oltre a quelli più elementari
come i test della media, della varianza e del valor quadratico medio.
Questo metodo è detto misto in quanto utilizza la relazione di congruenza nella sua forma più
completa:
X i +1 = ( A ⋅ X i + C ) mod M
Di solito si sceglie per M il valore 2n con n grado di parallelismo del computer usato.
Per la costante A, la maggior parte degli autori suggerisce un valore fornito dalla relazione
A = (2s + 1) con s ≥ 2
Questa scelta è molto conveniente se il software è scritto in assembly in quanto il tempo di
esecuzione può essere ridotto realizzando il prodotto A∗Xi tramite uno schift a sinistra di s
posizioni del registro contenente Xi e poi sommando 1.
Per il valore della costante C l’importante è che sia prima rispetto ad M e dispari.
Questo metodo è un caso particolare dei metodi additivi utilizzati per cercare di rendere ancor
più lunghe le sequenze generabili.
L’idea di base consiste nel far dipendere il valore Xn+1 da entrambi i valori Xn ed Xn-1 invece
che solo da Xn. In queste condizioni il periodo della sequenza può arrivare fin a M2.
X i +1 = ( X i + X i −1 ) mod M
X i +1 = ( X i + X i − k ) mod M
con M pari e Xo, X1, ....X54 interi arbitrari non tutti pari.
Le costanti 24 e 55 non sono scelte a caso ma sono valori che consentono un periodo teorico
della sequenza pari a 255 – 1 (in realtà è inferiore).
I valori 24 e 55 sono detti lags e la sequenza è nota come lagged Fibonacci (LFG)
Una evoluzione di questo metodo è poi quello dei generatori LFG paralleli.
Per quel che riguarda i metodi congruenziali, autorevoli riferimenti bibliografici consigliano:
M A C
Knuth 231 8
Int(π*10 )=314159265 453806254
Goodman Miller 231 - 1 75 0
Gordon 231 513 0
Leormont Lewis 231 216 + 3 = 65539 0
GENERATORI DISCRETI
L’esempio classico è quello della simulazione del lancio di un solo dado che rappresenta il
tipico esempio di generatore discreto equiprobabile (dado non truccato!).
NDADO = INTERO(Ncasuale * 6) + 1
Infatti:
moltiplicando per 6 il numero Ncasuale , il suo valore sarà compreso tra 0 e 5.999999
estraendone l’intero, il suo valore potrà essere 0, 1, 2, 3, 4, 5
sommando infine 1, il suo valore potrà essere 1, 2, 3, 4, 5, 6 cioè come un dado.
Essendo questo generatore equiprobabile, ci si aspetta di ottenere una sequenza che contenga
la stessa quantità di 1, 2, 3, 4, 5, e 6.
Questa verifica può essere effettuata per mezzo dell’esame dell’istogramma di frequenza.
Nella figura seguente si può osservare l’istogramma di frequenza della simulazione di 600
lanci di un dado. Il risultato non sembra molto soddisfacente in quanto solo il 4 si è verificato
un numero di volte pari a quella atteso (100) mentre il 3 ed il 5 sono molto lontani.
Un indice della qualità di questa sequenza può essere ottenuto calcolando il ripple del grafico:
Come si vede il risultato è alquanto scadente poiché il campione usato è molto piccolo e di
conseguenza la simulazione che si effettuerà non sarà attendibile.
Queste informazioni sono di estrema importanza per valutare l'attendibilità di una simulazione
operata con questi tipi di sequenze numeriche.
Simili considerazioni risultano valide per la simulazione del lancio di due dadi (provare).
Si consideri come esempio un generatore discreto di numeri interi compresi tre 1 e 9 avente la
seguente distribuzione di probabilità:
come si può notare la somma delle probabilità dei nove eventi è pari ad 1.
per es. se il numero generato è pari a 0.245456, appartenendo all’intervallo 0.2÷0.35, il valore
generato in uscita sarà il 2; se il numero generato è pari a 0.632908, appartenendo
all’intervallo 0.55÷0.65, il valore generato in uscita sarà il 7.
Si consideri una variabile casuale continua x avente funzione di densità di probabilità f(x).
Di questa funzione si determina la corrispondente funzione di ripartizione F(x)
x
r = F ( x) = ∫ f ( x) ⋅ dx
0
(si rammenta che la funzione di ripartizione F(x) di una variabile aleatoria indica la probabilità
che la variabile assuma un valore minore o uguale ad x)
Si determina poi l’espressione analitica (se esiste) della funzione inversa cioè x = F-1(r).
f(x)
2 P
B-A
A x B x
1 2
S = 1 = h ⋅ ( B − A) ⋅ ⇒ h=
2 B− A
y − y0 x − x0
L’equazione della retta congiungente i punti A e P = risulta essere:
y1 − y 0 x1 − x 0
2 ⋅ ( x − A)
f ( x) =
( B − A) 2
x x
2 ⋅ ( x − A) x2 2⋅ A⋅ x x ( x − A) 2
F ( x) = ∫ f ( x) ⋅ dx = ∫ ⋅ dx = − = =r
A ( B − A) ( B − A) ( B − A) 2 ( B − A) 2
2 2
A A
x = A + ( B − A) ⋅ r
usando per r un valore compreso nell’intervallo [0÷1] e generato per mezzo di un generatore
standard, si ottiene per x un campione appartenente ad una distribuzione lineare.
2 ⋅ ( B − x)
f ( x) = ⇒ x = B − ( B − A) ⋅ r
( B − A) 2
Nelle figure seguenti sono proposti i grafici delle distribuzioni di frequenza relativi alla
simulazione di un generatore di numeri pseudocasuali con distribuzione lineare tra 10 e 100
rispettivamente per la generazione di 10.000 ed 1.000.000 di campioni.
∞
f ( x) = λ ⋅ e − λ ⋅x ∫λ ⋅e
−λ ⋅ x
con λ > 0 e ⋅ dx = 1
0
f(x)
x
La rappresentazione così proposta garantisce l’unitarietà dell’area sottesa dalla curva.
x x
F ( x) = ∫ f ( x) ⋅ dx = ∫ λ ⋅ e −λ ⋅ x ⋅ dx = 1 − e −λ ⋅ x = r
0 0
1
x=− ⋅ ln(1 − r ) con r compreso nell’intervallo [0÷1[
λ
( x−µ )2
1 −
f ( x) = ⋅e 2⋅σ 2
σ ⋅ 2π
f(x)
µ - 3σ µ µ + 3σ x
In questo caso non esiste, in forma esplicita, la funzione F(x) di ripartizione per cui non è
possibile far uso del metodo della trasformazione inversa.
Una distribuzione gaussiana può essere sufficientemente approssimata dalla somma di un certo
numero di campioni estratti da distribuzioni uniformi 0÷1 (generatori standard), il numero di
questi generatori è compreso tra 10 e 24 ma generalmente si consiglia 12.
σ N N
x=µ+ ⋅ ∑ ri −
N / 12 i =1 2
12
x = µ + σ ⋅ ∑ ri − 6
i =1
Nelle figure seguenti sono proposti i grafici delle distribuzioni di frequenza relativi alla
simulazione di un generatore di numeri pseudocasuali con distribuzione gaussiana con µ = 0 e
σ = 1 rispettivamente per la generazione di 10.000 ed 1.000.000 di campioni.
La generazione di numeri pseudo casuali si ottiene facendo uso di registri a scorrimento (shift
register) retroazionati tali cioè da riportare in ingresso un segnale proveniente dalla
combinazione dei bit di uscita.
Un registro a scorrimento di M bit viene pilotato con un clock a frequenza fo.
L’ingresso del registro a scorrimento viene pilotato dall’uscita di una porta ex-OR i cui ingressi
sono collegati alle uscite del registro a scorrimento (N e M) una delle quali è sempre l’ultimo
bit M.
La lunghezza massima della sequenza di numeri così ottenibile è pari a 2M-1 poiché lo stato
formato da tutti zero bloccherebbe la generazione dei numeri.
Questo valore della lunghezza della sequenza può essere ottenuto solo con una opportuna scelta
dei valori di N ed M.
Una volta generata l’intera sequenza, questa tornerà a ripetersi in modo periodico.
La tabella seguente descrive i valori di M ed N e le relative lunghezze delle sequenze ottenibili.
M N Lunghezza
4 3 15
5 3 31
6 5 63
7 6 127
9 5 511 1 2 3 N M
10 7 1023
11 9 2047
15 14 32767
20 17 1048575
25 22 33554431
31 28 2147483647
35 33 34359738367
39 35 549755813887
M N1 N2 N3 Lunghezza
8 4 5 6 255
16 4 13 15 65535
24 17 22 23 16777215
Nelle figure seguenti sono proposti i circuiti di due generatori di numeri pseudocasuali
rispettivamente ad 8 e 16 bit.
Questo metodo, basato sulla tecnica del campionamento casuale, fu usata dal naturalista
Buffon per la determinazione del valore del π per mezzo della misura della posizione di un
ago ripetutamente lanciato su un foglio quadrettato.
L’esecuzione delle simulazioni dovranno iniziare con un numero limitato di eventi che sarà
poi man mano aumentato in modo da verificare la tendenza dei valori a stabilizzarsi
nell’intorno dei risultati cercati.
N punti cerchio
da cui: π = 4 ⋅
N totale di punti
in quanto il numero di punti interni al quadrato corrisponde al numero totale di punti usati per
la simulazione.
Il conteggio dei punti interni al settore circolare si ottiene valutando, per ogni punto, la
distanza del punto dall’origine e cioè se:
I risultati ottenibili dalle simulazioni presentano degli errori con i seguenti ordini di
grandezza:
f ( x) = 3x 2 + 2 x + 1
B 5
INTEGRALE = ∫ f ( x)dx = ∫ 3 x 2 + 2 x + 1 = 152
A 1
Numero di punti nell' area sottesa dalla curva Area sottesa dalla curva ∫A f ( x)dx
= =
Numero di punti interni al rettangolo Area del rettangolo ( B − A) ⋅ f ( B)
da cui:
B
Numero di punti nell' area sottesa dalla curva
∫ f ( x)dx = ( B − A) ⋅ f ( B) ⋅
A
Numero totale di punti
Il conteggio dei punti appartenenti all’area sottesa dalla curva si ottiene confrontando il valore
della funzione nel punto Xn con il valore di Yn e cioè:
I risultati ottenibili dalle simulazioni presentano degli errori con i seguenti ordini di
grandezza:
In considerazione del fatto che il numero totale di eventi è 36, è possibile calcolare le
probabilità teoriche dei singoli eventi.
I risultati ottenibili dalle simulazioni presentano dei valori della probabilità degli eventi
caratterizzata dai seguenti ordini di grandezza:
Prob. con Prob. con Prob. con Prob. con Prob. con
N=500 N=1500 N=10000 N=50000 N=1000000
2 3.4 2.56 2.86 2.75 2.79
3 5.4 5.92 5.52 5.37 5.58
4 7.6 8.32 8.56 8.44 8.29
5 11.6 8.84 11.28 11.02 11.14
6 14 15.2 13.18 13.91 13.87
7 17.4 16.32 17.71 16.67 16.60
8 13.4 13.68 14.06 13.97 13.89
9 11.2 10.32 10.99 11.15 11.16
10 6.8 9.24 8.3 8.34 8.30
11 5.2 6.36 5.65 5.59 5.54
12 4.0 3.24 2.89 2.76 2.78
Come si può notare, all’aumentare del numero di eventi il valore della probabilità si avvicina
sempre di più a quella teorica e con una ripetibilità dei risultati sempre maggiore.