Generazione di numeri pseudocasuali a partire da una distribuzione Uniforme(0,1)

Sono detti numeri pseudo-casuali, i numeri generati da un algoritmo deterministico che produce una sequenza con, approssimativamente, le stesse proprietà statistiche di una sequenza di numeri generata da un processo casuale. Tale algoritmo è detto generatore di numeri pseudo-casuali.
Le sequenze di numeri pseudo-casuali vengono solitamente generate da un computer e utilizzate per algoritmi basati su processi casuali, come i metodi di tipo Monte Carlo o le applicazioni di crittografia.
Una sequenza di numeri pseudo-casuali deve soddisfare, al minimo, le seguenti proprietà statistiche:
  • distribuzione degli elementi della sequenza secondo una funzione di densità di probabilità predefinita f(x): di solito si richiede una distribuzione uniforme su un intervallo specificato (equidistribuzione), cioè f(x)=1/(xmax-xmin) nell'intervallo [xmin, xmax] e f(x)=0 fuori da tale intervallo.
  • indipendenza tra elementi successivi della sequenza: se la funzione di distribuzione per un singolo elemento è f(x), la funzione di distribuzione per le coppie di elementi successivi deve essere f(x,y)=f(x)f(y).

Esistono diverse classi di generatori di numeri pseudo-casuali, che si differenziano per il tipo di algoritmo usato. Nella quasi totalità essi producono una sequenza di numeri interi uniformemente distribuiti tra 0 e un certo valore massimo.
Spesso è però necessario generare i numeri da altre distribuzioni, partendo dalla uniforme sono quindi necessarie alcune trasformazioni.
Una possibilità è utilizzare il metodo dell'inversione della funzione di ripartizione.
Sia F(x) la funzione di ripartizione di una qualsiasi variabile aleatoria X e sia G(·) la sua funzione inversa, tale cioè che G(F(x)) = x; G(·) esiste sempre per la monotonicità di F(x).
Si può generare U da una uniforme standard e quindi calcolare X= G(U), che sarà un numero casuale da una distribuzione con funzione di ripartizione F(·).
L’applicabilità di questo metodo é universale, può però risultare molto oneroso dal punto di vista computazionale.
Esistono, inoltre, delle trasformazioni ad hoc per generare numeri pseudocasuali da specifiche distribuzioni:
  • Esponenziale. Per generare un numero aleatorio X, occorre generare un numero casuale U da una uniforme standard, e quindi risolvere rispetto ad X l’equazione: U= 1-e^(-λX). Esplicitando la X e considerando che 1-U si distribuisce come U, si ha: X= -(log U)/λ
  • Chi-quadro con 2 gradi di libertà. Se, considerando il caso precedente, si pone λ=1/2, si ottiene una χ2 con 2 gradi di libertà. Pertanto si dovrà applicare X= - 2 log U.
  • Normale (formula di Box-Muller). Questa formula consente di generare coppie di numeri pseudocasuali normali standardizzati indipendenti. Si hanno due numeri X= -2 logU cos(2πV)  e Y= -2 logU sen(2πV), dove U e V sono due numeri casuali indipendenti generati da una uniforme standard.
  • Binomiale. Si considera un indicatore di evento E tale che P(E=1)=p e P(E=0)=1-p. Per simulare l'estrazione di un numero pseudocasuale X da una binomiale di parametri p ed n, si possono generare n indicatori di evento e porre X=∑Ei con i che va da 1 a n. Questo metodo è efficiente, però, solo per n piccolo. 
  • Weibull. Consideriamo una distribuzione di Weibull con densità f(x) =λαx^(α−1)e^(-λx)^α, x≥0 e la cui funzione di ripartizione é data da F(x) = 1-e-λxα,x≥0. Allora X= ((-logU)/λ)^(1/α) è un numero casuale generato da tale distribuzione.
In maniera analoga si possono generare numeri pseudocasuali anche da altre distribuzioni come Cauchy, Gamma, Beta e Poisson.


Commenti