Concetti Chiave
- I computer sono deterministici e non possono generare vera casualità, quindi si utilizzano numeri pseudocasuali per simulare la casualità.
- I numeri pseudocasuali possono essere generati utilizzando funzioni come "rand ()" e "srand ()", ma richiedono un seme per variare i risultati.
- Per garantire l'efficacia di un algoritmo di generazione dei numeri pseudocasuali, è fondamentale che sia riproducibile, portabile e veloce.
- Il Linear Congruential Generator (LCG) è uno degli algoritmi più noti per generare numeri pseudocasuali, con una formula specifica che coinvolge costanti relazionate.
- La scelta dei valori di a, c e m nel LCG può influenzare notevolmente l'efficacia dell'algoritmo, con la terna di Goodman e Miller spesso utilizzata come standard.
Che cos'è il determinismo e la pseudocasualità nei computer?
Il computer funziona in modo deterministico, perciò in esso non esiste davvero la casualità. Per risolvere alcuni problemi, però, è necessario generare numeri casuali, paragonabili al lanciare una monetina o un dado o all’estrarre un numero della tombola. L’unica soluzione è quindi quella di utilizzare i numeri pseudocasuali. Essi possono essere ottenuti in vari modi. Usando la funzione “rand ()” è possibile generarli a partire da un seme, inserito mediante la funzione “srand ()”; in questo modo però se si usa lo stesso seme iniziale i numeri generati saranno sempre i medesimi. Per ottenerne sempre di diversi si può partire con un seme casuale, che viene generato dall’orologio di sistema mediante la funzione “time ()” con argomento “NULL”, per la quale è necessario però includere la libreria “time.h”. A volte però è necessario restringere il range, per questo è necessario usare l’operatore modulo (%) seguito dalla quantità di numeri nell’intervallo; è inoltre possibile impostare un offset sommando il numero dal quale si vuole partire al numero pseudocasuale generato.
Algoritmi per numeri pseudocasuali
Per generare le sequenze sono stati ideati molti algoritmi, ma solo alcuni sono davvero efficaci ed efficienti. Per verificare il buon funzionamento di un algoritmo è necessario che sia riproducibile, portabile, abbia un lungo periodo e sia computazionalmente veloce; inoltre i numeri generati devono essere uniformemente distribuiti e non correlati tra loro. Il criterio di Turing e quello di von Neumann consentono di valutare l’efficacia o meno di un algoritmo. Uno degli algoritmi più noti fu proposto da Lemer è detto LCG (Linear Congruential Generator) ed ha come formula xn = ( axn-1 + c ) % m , con a, c ed m costanti e in relazione tra loro ed xn e xn-1 che indicano l’n-esimo numero ed il seme di partenza. Alcuni studiosi hanno individuato dei valori di a,c ed m che rendono l’LCG molto efficace; in particolare la terna migliore e più usata è quella di Goodman e Miller ( m = 231 – 1; a = 75; c = 0 ).
Domande da interrogazione
- Perché i computer non possono generare numeri veramente casuali?
- Quali sono le caratteristiche che deve avere un buon algoritmo per la generazione di numeri pseudocasuali?
- Qual è uno degli algoritmi più noti per la generazione di numeri pseudocasuali e quali sono i suoi parametri?
I computer funzionano in modo deterministico, quindi non esiste vera casualità al loro interno. Per generare numeri casuali, si utilizzano numeri pseudocasuali, che possono essere ottenuti tramite funzioni come "rand()" e "srand()" (testo).
Un buon algoritmo deve essere riproducibile, portabile, avere un lungo periodo, essere computazionalmente veloce e generare numeri uniformemente distribuiti e non correlati tra loro (testo).
L'algoritmo noto è il LCG (Linear Congruential Generator), descritto dalla formula xn = ( axn-1 + c ) % m, dove a, c e m sono costanti in relazione tra loro (testo).