Come generare numeri casuali
Abbiamo visto nel post precedente come non solo noi esseri umani non siamo bravi a generare numeri casuali, ma la definizione stessa di “numero casuale” non è così semplice; il caso delle cifre di π mostra come un processo assolutamente deterministico può dare un risultato apparentemente casuale, se il processo ci è ignoto. La prima domanda che potremmo farci è se abbiamo davvero bisogno di numeri casuali: la risposta purtroppo è positiva. Già nel 1890 lo statistico sir Francis Galton ne era convinto e scrisse in Nature che il metodo migliore che aveva trovato per generarli era lanciare dei dadi: “Quando vengono scossi e lanciati in un bussolotto, sbattono in modo così variabile tra di loro e contro le pareti del bussolotto che rimbalzano in modo folle, e le loro posizioni iniziali non danno alcun indizio percettibile su come si troveranno anche dopo una singola bella mescolata e lancio”. In fin dei conti, i primi dadi noti sono stati trovati in scavi archeologi mediorentali datati al 24. secolo a.C.: abbiamo insomma una certa qual esperienza di casualità pratica.
Il problema però resta: come possiamo generare una successione uniforme di numeri casuali senza lanciare i dadi fisicamente? (Una nota a latere: quando si parla di “uniforme” c’è un significato molto specifico, che è la formalizzazione della definizione di casualità che abbiamo visto l’altra volta). I primi tentativi sono più o meno coevi ai primi computer elettronici, il che ha senso per l’ottima ragione che in quel periodo gente come Enrico Fermi, John von Neumann e Stanislaw Ulam si sono inventati i metodi Montecarlo per risolvere numericamente problemi non attaccabili analiticamente. Il nome deriva proprio dal casinò: si fanno tante prove con numeri casuali per vedere quale risultato si ottiene. I computer sono bravi a fare i conti, ma bisogna appunto dare loro i numeri casuali di partenza, e non si possono sempre lanciare dadi, oppure copiare i risultati delle roulette di tutto il mondo.
Il primo tentativo in tal senso fu effettuato dalla RAND Corporation, che alla fine degli anni ’40 costruì una macchina che al suo interno aveva un generatore casuale di impulsi per generare numeri casuali. La fecero girare per un po’ di tempo, raccolsero i risultati e stamparono un libro: A Million Random Digits with 100,000 Normal Deviates (Un milione di cifre casuali, più 100.000 numeri normalmente distribuiti). Per la prima volta si aveva a disposizione una sorgente di cifre casuali a disposizione di tutti. Tra l’altro, il libro è stato ripubblicato nel 2001 e può essere acquistato su Amazon: è divertente leggere le recensioni. Se siete curiosi, comunque, potete scaricarvi gratuitamente il testo. La stessa cosa fu fatta dagli inglesi, per la precisione dal gruppo di Bletchley Park – ricordate Enigma e la decodifica dei codici segreti tedeschi? Il sistema fu battezzato ERNIE e venne usato tra l’altro per generare i numeri estratti nella principale lotteria britannica. Il Post Office, che gestiva la lotteria, filmò persino un documentario, “The Importance of Being E.R.N.I.E.”.
Finalmente nel 1951 nacque il primo computer con un generatore di numeri casuali (TRNG, True Random Number Generator): il Ferranti Mark 1, che aveva un’istruzione che forniva 20 bit casuali sfruttando il rumore elettrico. In questo computer cera lo zampino di Alan Turing, per la cronaca. Tutto bellissimo, vero? Non troppo. L’istruzione macchina progettata da Turing aveva un problema: non potevi testare i tuoi programmi in nessun modo, perché i dati di partenza erano sempre diversi. Quello che serviva era insomma un ossimoro: un generatore deterministico di numeri casuali. Ha senso qualcosa del genere? Non so, però è quello che è stato fatto in pratica con i PRNG (pseudorandom number generators, generatori di numeri pseudocasuali). Ma di questo parlerò la prossima volta.
Leave a comment