Di cosa ha bisogno un generatore di numeri casuali? Generatore di numeri casuali. Il concetto di generatore di numeri

Hai mai verificato l'affermazione secondo cui su 10 giri della roulette esce un numero pari 5 volte? O forse hai partecipato più volte alle lotterie e sei persino riuscito a vincere? Se accettiamo che tutti i risultati siano veramente casuali, allora possiamo parlare della probabilità che si verifichi un particolare evento.

Per parafrasare l'ultima affermazione, ripetiamo le parole di persone che hanno partecipato ad eventi con risultato casuale: l'onnipotente lavoro casuale.

Allora come puoi verificare se il principio di distribuzione è casuale? Un generatore di numeri casuali gestirà questa attività. Il suo vantaggio principale è che funziona online, il che significa che è molto veloce e non dipende dalla presenza di una connessione Internet dopo il download.

Come funziona un generatore di numeri casuali?

Per descrivere l'opera non servono tante lettere, tutto è molto semplice: bisogna selezionare i numeri minimo e massimo possibili, inserire il numero di valori generati, se necessario spuntare la casella “Escludi ripetizioni”, che impedisce la comparsa di numeri già esistenti e fare clic sul pulsante Genera. Successivamente, ogni successivo clic sul pulsante produrrà nuove opzioni di distribuzione.

Perché potrebbe essere necessario? Ad esempio, per ottenere numeri fortunati alla lotteria o alla roulette. Inoltre, il generatore numeri pseudocasuali in grado di emulare i barili del lotto o il lancio di una moneta per una competizione: testa e croce sono rappresentate da zero o uno. Ma la cosa principale è che dopo aver caricato la pagina non è necessaria una connessione Internet: il codice è scritto in JavaScript ed eseguito dall'utente, nel suo browser.

Testare il funzionamento di questo generatore in linea a volte dava abbastanza risultati interessanti: utilizzando i numeri 0 e 1, con 10 opzioni, non così raramente si ottiene una distribuzione nel rapporto di 7 a 3, o anche 6 numeri identici contrarre.

Per cos'altro, oltre al lotto e agli esempi sopra, la casualità può essere utile per distribuire i numeri? Almeno per il gioco delle ipotesi. Probabilmente hai giocato a questo gioco da bambino: l'ospite indovina un numero da 1 a 100 e gli altri provano a indovinarlo. In relazione a questo generatore, tu sei il leader e il computer cerca di indovinare cosa è nascosto.

Puoi anche giocare Battaglia navale, ricevendo immediatamente un gruppo di numeri compreso tra 0 e 99. In questo caso, la cifra più significativa del numero viene utilizzata come lettere (che sono indicate orizzontalmente) - 0 ... 9 è un ... e, il le cifre basse in questo caso sostituiscono l'intervallo 1 ... 10, quindi ne viene aggiunta solo una. Forse ora questo approccio non sembra molto chiaro, ma è una questione di abitudine.

Un altro modo interessante per usarlo è mettere alla prova la tua intuizione. Provi a prevedere quali numeri (uno per uno o in gruppo) produrrà il generatore, premi un pulsante e controlla quanto eri vicino al risultato corretto. Chissà, forse dopo diversi tentativi riuscirai a prevedere con precisione il risultato?

Ma va tenuto presente che il generatore di numeri casuali si chiama così per un motivo. I metodi esistenti oggi non sono in grado di fornire un valore veramente casuale: dipende da molti fattori, che possono includere il numero precedente, l'ora corrente, il contenuto di una particolare cella di memoria e altri dati. Ma per le esigenze domestiche, la loro funzionalità è solitamente sufficiente al 100%.

Bene, spero che troverai un uso più ampio del generatore rispetto alle opzioni qui descritte. E forse puoi anche suggerirlo buona idea per espandere le funzionalità esistenti. Alla fine, sono stati i pensieri più incredibili che alla fine si sono trasformati da un'idea vaga in una vera incarnazione.


Si noti che idealmente la curva di densità di distribuzione dei numeri casuali apparirebbe come mostrata in Fig. 22.3. Cioè, nel caso ideale, ogni intervallo include stesso numero punti: N io = N/K , Dove N numero totale di punti, K numero di intervalli, io= 1, , K .

Riso. 22.3. Diagramma di frequenza di numeri casuali,
generato teoricamente da un generatore ideale

Va ricordato che la generazione di un numero casuale arbitrario consiste in due fasi:

  • generare un numero casuale normalizzato (cioè distribuito uniformemente da 0 a 1);
  • conversione di numeri casuali normalizzati R io a numeri casuali X io, che vengono distribuiti secondo la legge di distribuzione (arbitraria) richiesta dall'utente o nell'intervallo richiesto.

I generatori di numeri casuali secondo il metodo per ottenere i numeri sono suddivisi in:

  • fisico;
  • tabellare;
  • algoritmico.

RNG fisico

Un esempio di RNG fisico può essere: una moneta (“testa” 1, “croce” 0); dado; un tamburo con una freccia divisa in settori con numeri; generatore di rumore hardware (HS), che utilizza un dispositivo termico rumoroso, ad esempio un transistor (Fig. 22.422.5).

Riso. 22.4. Schema di un metodo hardware per la generazione di numeri casuali
Riso. 22.5. Schema per ottenere numeri casuali utilizzando il metodo hardware
Compito “Generazione di numeri casuali utilizzando una moneta”

Genera un numero casuale di tre cifre, distribuito uniformemente nell'intervallo da 0 a 1, utilizzando una moneta. Precisione tre cifre decimali.

Il primo modo per risolvere il problema
Lancia una moneta 9 volte e, se esce testa, scrivi "0"; se esce testa, scrivi "1". Quindi, diciamo che come risultato dell'esperimento abbiamo ricevuto la sequenza casuale 100110100.

Disegna un intervallo da 0 a 1. Leggendo i numeri in sequenza da sinistra a destra, dividi l'intervallo a metà e scegli ogni volta una delle parti dell'intervallo successivo (se ottieni uno 0, allora quella di sinistra, se ottieni un 1, poi quello giusto). Pertanto, puoi arrivare a qualsiasi punto dell'intervallo, con la precisione che desideri.

COSÌ, 1 : l'intervallo viene diviso a metà e , viene selezionata la metà destra, l'intervallo viene ridotto: . Numero successivo 0 : l'intervallo viene diviso a metà e , viene selezionata la metà sinistra, l'intervallo viene ridotto: . Numero successivo 0 : l'intervallo viene diviso a metà e , viene selezionata la metà sinistra, l'intervallo viene ridotto: . Numero successivo 1 : l'intervallo viene diviso a metà e , viene selezionata la metà destra, l'intervallo viene ridotto: .

In base alla condizione di accuratezza del problema, è stata trovata una soluzione: è un numero qualsiasi dell'intervallo, ad esempio 0,625.

In linea di principio, se adottiamo un approccio rigoroso, la divisione degli intervalli deve essere continuata fino a quando i limiti sinistro e destro dell'intervallo trovato COINCIDONO con una precisione della terza cifra decimale. Cioè, dal punto di vista della precisione, il numero generato non sarà più distinguibile da qualsiasi numero dell'intervallo in cui si trova.

Il secondo modo per risolvere il problema
Dividiamo la sequenza binaria risultante 100110100 in triadi: 100, 110, 100. Dopo averli tradotti numeri binari in decimale otteniamo: 4, 6, 4. Sostituendo “0.” davanti, otteniamo: 0,464. Questo metodo può produrre solo numeri da 0,000 a 0,777 (poiché il massimo che può essere “spremuto” da tre cifre binarie è 111 2 = 7 8), cioè, in effetti, questi numeri sono rappresentati nel sistema numerico ottale. Per tradurre ottale numeri dentro decimale eseguiamo la rappresentazione:
0,464 8 = 4 8 1 + 6 8 2 + 4 8 3 = 0,6015625 10 = 0,602 10.
Quindi, il numero richiesto è: 0,602.

RNG tabellare

Gli RNG tabulari utilizzano tabelle appositamente compilate contenenti numeri verificati non correlati, cioè non dipendenti l'uno dall'altro, come fonte di numeri casuali. Nella tabella La Figura 22.1 mostra un piccolo frammento di tale tabella. Percorrendo la tabella da sinistra a destra, dall'alto al basso, si ottengono numeri casuali distribuiti uniformemente da 0 a 1 con il numero di cifre decimali richiesto (nel nostro esempio utilizziamo tre cifre decimali per ogni numero). Poiché i numeri nella tabella non dipendono l'uno dall'altro, la tabella può essere attraversata diversi modi, ad esempio, dall'alto verso il basso o da destra a sinistra oppure, ad esempio, puoi selezionare i numeri che si trovano in posizioni pari.

Tabella 22.1.
Numeri casuali. In modo uniforme
numeri casuali distribuiti da 0 a 1
Numeri casuali Distribuito uniformemente
Da 0 a 1 numeri casuali
9 2 9 2 0 4 2 6 0.929
9 5 7 3 4 9 0 3 0.204
5 9 1 6 6 5 7 6 0.269
… …

Dignità questo metodoè che produce numeri veramente casuali poiché la tabella contiene numeri non correlati verificati. Svantaggi del metodo: per l'archiviazione grande quantità i numeri richiedono molta memoria; Ci sono grandi difficoltà nel generare e controllare questo tipo di tabelle; le ripetizioni nell'utilizzo di una tabella non garantiscono più la casualità della sequenza numerica, e quindi l'attendibilità del risultato.

C'è una tabella contenente 500 numeri verificati assolutamente casuali (tratti dal libro di I. G. Venetsky, V. I. Venetskaya “Concetti e formule matematici e statistici di base nell'analisi economica”).

RNG algoritmico

I numeri generati da questi RNG sono sempre pseudo-casuali (o quasi-casuali), cioè ogni numero successivo generato dipende da quello precedente:

R io + 1 = F(R io) .

Le sequenze composte da tali numeri formano dei loop, cioè esiste necessariamente un ciclo che si ripete numero infinito una volta. I cicli ripetuti sono chiamati periodi.

Il vantaggio di questi RNG è la loro velocità; i generatori non richiedono praticamente risorse di memoria e sono compatti. Svantaggi: i numeri non possono essere definiti completamente casuali, poiché esiste una dipendenza tra loro, così come la presenza di periodi nella sequenza di numeri quasi casuali.

Consideriamo diversi metodi algoritmici per ottenere RNG:

  • metodo dei quadrati mediani;
  • metodo dei prodotti medi;
  • metodo di agitazione;
  • lineare metodo congruente.

Metodo del quadrato medio

C'è un numero di quattro cifre R 0 . Questo numero viene quadrato e inserito R 1 . Avanti da R 1 prende il nuovo numero casuale centrale (quattro cifre centrali) e lo scrive R 0 . Quindi la procedura viene ripetuta (vedere Fig. 22.6). Tieni presente che in effetti non devi prendere un numero casuale ghij, UN 0.ghij con uno zero e un punto decimale aggiunti a sinistra. Questo fatto si riflette come in Fig. 22.6, e nelle successive figure simili.

Riso. 22.6. Schema del metodo dei quadrati medi

Svantaggi del metodo: 1) se ad alcune iterazioni il numero R 0 diventa uguale a zero, quindi il generatore degenera, quindi è importante la scelta corretta del valore iniziale R 0; 2) il generatore ripeterà la sequenza M N passi (dentro scenario migliore), Dove N cifra del numero R 0 , M base del sistema numerico.

Ad esempio nella Fig. 22.6: se il numero R 0 verrà rappresentato nel sistema di numerazione binario, quindi la sequenza di numeri pseudo-casuali verrà ripetuta in 2 4 = 16 passi. Si noti che la ripetizione della sequenza può avvenire prima se il numero iniziale viene scelto male.

Il metodo sopra descritto è stato proposto da John von Neumann e risale al 1946. Poiché questo metodo si è rivelato inaffidabile, è stato rapidamente abbandonato.

Metodo del prodotto medio

Numero R 0 moltiplicato per R 1, dal risultato ottenuto R 2 viene estratta la parte centrale R 2 * (questo è un altro numero casuale) e moltiplicato per R 1 . Tutti i numeri casuali successivi vengono calcolati utilizzando questo schema (vedi Fig. 22.7).

Riso. 22.7. Schema del metodo dei prodotti mediani

Metodo di agitazione

Il metodo shuffle utilizza le operazioni per spostare ciclicamente il contenuto di una cella a sinistra e a destra. L'idea del metodo è la seguente. Lascia che la cella memorizzi il numero iniziale R 0 . Spostando ciclicamente il contenuto della cella verso sinistra di 1/4 della lunghezza della cella, otteniamo un nuovo numero R 0*. Allo stesso modo, ciclando il contenuto della cella R 0 a destra di 1/4 della lunghezza della cella, otteniamo il secondo numero R 0**. Somma di numeri R 0* e R 0** fornisce un nuovo numero casuale R 1 . Ulteriore R 1 è inserito R 0, e l'intera sequenza di operazioni viene ripetuta (vedi Fig. 22.8).


Riso. 22.8. Diagramma del metodo di miscelazione

Si prega di notare che il numero risultante dalla somma R 0* e R 0 ** , potrebbe non rientrare completamente nella cella R 1 . In questo caso, le cifre extra devono essere scartate dal numero risultante. Spieghiamo questo in Fig. 22.8, dove tutte le celle sono rappresentate da otto cifre binarie. Permettere R 0 * = 10010001 2 = 145 10 , R 0 ** = 10100001 2 = 161 10 , Poi R 0 * + R 0 ** = 100110010 2 = 306 10 . Come puoi vedere, il numero 306 occupa 9 cifre (nel sistema numerico binario) e la cella R 1 (uguale a R 0) può contenere un massimo di 8 bit. Pertanto, prima di inserire il valore in R 1, è necessario rimuovere un bit “extra”, più a sinistra, dal numero 306, ottenendo come risultato R 1 non andrà più a 306, ma a 00110010 2 = 50 10 . Si noti inoltre che in linguaggi come Pascal, il "ritaglio" di bit extra quando una cella trabocca viene eseguito automaticamente in base al tipo specificato di variabile.

Metodo della congruenza lineare

Il metodo della congruenza lineare è una delle procedure più semplici e comunemente utilizzate attualmente per simulare numeri casuali. Questo metodo utilizza il mod( X, ) , che restituisce il resto quando il primo argomento viene diviso per il secondo. Ogni numero casuale successivo viene calcolato in base al numero casuale precedente utilizzando la seguente formula:

R io+ 1 = mod( K · R io + B, M) .

Viene chiamata la sequenza di numeri casuali ottenuta utilizzando questa formula sequenza lineare congruente. Molti autori chiamano una successione lineare congruente quando B = 0 metodo moltiplicativo congruente, e quando B ≠ 0 — metodo misto congruente.

Per un generatore di alta qualità, è necessario selezionare coefficienti adeguati. È necessario che il numero M era piuttosto grande, poiché il periodo non può averne di più M elementi. D’altra parte, la divisione utilizzata in questo metodo è un’operazione piuttosto lenta, quindi per un computer binario la scelta logica sarebbe M = 2 N, poiché in questo caso la ricerca del resto della divisione si riduce all'interno del computer all'operazione logica binaria “AND”. È comune anche la scelta del numero primo più grande M, meno di 2 N: nella letteratura specializzata è dimostrato che in questo caso le cifre di ordine basso del numero casuale risultante R io+1 si comportano in modo altrettanto casuale come quelli più vecchi, il che ha un effetto positivo sull'intera sequenza di numeri casuali nel suo insieme. Ad esempio, uno dei Numeri di Mersenne, pari a 2 31 1, e quindi, M= 2 31 1 .

Uno dei requisiti per le sequenze lineari congruenti è che la lunghezza del periodo sia la più lunga possibile. La durata del periodo dipende dai valori M , K E B. Il teorema che presentiamo di seguito ci permette di determinare se è possibile raggiungere il periodo lunghezza massima per valori specifici M , K E B .

Teorema. Sequenza lineare congruente definita da numeri M , K , B E R 0, ha un periodo di lunghezza M se e solo se:

  • numeri B E M relativamente semplice;
  • K 1 volta P per ogni numero primo P, che è un divisore M ;
  • K 1 è un multiplo di 4, se M multiplo di 4.

Infine, concludiamo con un paio di esempi di utilizzo del metodo della congruenza lineare per generare numeri casuali.

È stato stabilito che una serie di numeri pseudo-casuali generati sulla base dei dati dell'esempio 1 verrebbe ripetuta ogni M/4 numeri. Numero Qè impostato arbitrariamente prima dell'inizio dei calcoli, tuttavia, va tenuto presente che la serie dà l'impressione di essere in generale casuale K(e quindi Q). Il risultato può essere leggermente migliorato se B strano e K= 1 + 4 · Q in questo caso la riga verrà ripetuta ogni M numeri. Dopo una lunga ricerca K i ricercatori si sono stabiliti sui valori di 69069 e 71365.

Un generatore di numeri casuali che utilizza i dati dell'esempio 2 produrrà numeri casuali non ripetitivi con un periodo di 7 milioni.

Il metodo moltiplicativo per generare numeri pseudocasuali fu proposto da D. H. Lehmer nel 1949.

Controllo della qualità del generatore

La qualità dell'intero sistema e l'accuratezza dei risultati dipendono dalla qualità dell'RNG. Pertanto, la sequenza casuale generata dal RNG deve soddisfare una serie di criteri.

I controlli effettuati sono di due tipi:

  • controlli sull'uniformità della distribuzione;
  • test di indipendenza statistica.

Controlla l'uniformità della distribuzione

1) L'RNG dovrebbe produrre valori prossimi ai seguenti parametri statistici caratteristici di una legge casuale uniforme:

2) Prova di frequenza

Un test di frequenza ti consente di scoprire quanti numeri rientrano in un intervallo (M R – σ R ; M R + σ R) , cioè (0,5 0,2887; 0,5 + 0,2887) o, in definitiva, (0,2113; 0,7887). Poiché 0,7887 0,2113 = 0,5774, concludiamo che in un buon RNG, circa il 57,7% di tutti i numeri casuali estratti dovrebbe rientrare in questo intervallo (vedere Figura 22.9).

Riso. 22.9. Diagramma di frequenza di un RNG ideale
in caso di controllo per il test di frequenza

È inoltre necessario tenere conto del fatto che il numero di numeri che rientrano nell'intervallo (0; 0,5) dovrebbe essere approssimativamente uguale al numero di numeri che rientrano nell'intervallo (0,5; 1).

3) Test del chi quadrato

Il test del chi quadrato (test del χ2) è uno dei test statistici più conosciuti; è il metodo principale utilizzato in combinazione con altri criteri. Il test del chi quadrato fu proposto nel 1900 da Karl Pearson. Il suo notevole lavoro è considerato il fondamento della moderna statistica matematica.

Nel nostro caso, il test utilizzando il criterio del chi quadrato ci consentirà di scoprire quanto il vero L'RNG è vicino al benchmark RNG, vale a dire se soddisfa o meno il requisito di distribuzione uniforme.

Diagramma di frequenza riferimento L'RNG è mostrato in Fig. 22.10. Poiché la legge di distribuzione del RNG di riferimento è uniforme, allora la probabilità (teorica). P io inserire i numeri io th intervallo (tutti questi intervalli K) è uguale a P io = 1/K . E così, in ciascuno di K gli intervalli colpiranno liscio Di P io · N numeri ( N numero totale di numeri generati).

Riso. 22.10. Diagramma di frequenza dell'RNG di riferimento

Un vero RNG produrrà numeri distribuiti (e non necessariamente in modo uniforme!) K intervalli e ogni intervallo conterrà N io numeri (in totale N 1 + N 2 + + N K = N ). Come possiamo determinare quanto è buono l'RNG testato e quanto è vicino a quello di riferimento? È abbastanza logico considerare le differenze al quadrato tra il numero di numeri risultante N io e "riferimento" P io · N . Sommiamoli e il risultato è:

χ2 esp. = ( N 1 P 1 · N) 2 + (N 2 P 2 · N) 2 + + ( N K – P K · N) 2 .

Da questa formula ne consegue che minore è la differenza in ciascuno dei termini (e quindi il meno valoreχ2 esp. ), quanto più forte è la legge di distribuzione dei numeri casuali generati da un RNG reale, tende ad essere uniforme.

Nell'espressione precedente a ciascuno dei termini viene assegnato lo stesso peso (pari a 1), il che di fatto potrebbe non essere vero; pertanto, per le statistiche chi-quadrato, è necessario normalizzarli ciascuno io termine, dividendolo per P io · N :

Infine, scriviamo l’espressione risultante in modo più compatto e semplifichiamola:

Abbiamo ottenuto il valore del test chi quadrato per sperimentale dati.

Nella tabella 22.2 sono dati teorico valori del chi-quadrato (χ 2 teorico), dove ν = N 1 è il numero di gradi di libertà, P questo è un livello di confidenza specificato dall'utente che indica in che misura l'RNG dovrebbe soddisfare i requisiti di una distribuzione uniforme, oppure P — è la probabilità che il valore sperimentale di χ 2 exp. sarà inferiore al χ 2 teorico tabulato (teorico). o uguale ad esso.

Tabella 22.2.
Alcuni punti percentuali della distribuzione χ 2
p = 1% p = 5% p = 25% p = 50% p = 75% p = 95% p = 99%
ν = 1 0.00016 0.00393 0.1015 0.4549 1.323 3.841 6.635
ν = 2 0.02010 0.1026 0.5754 1.386 2.773 5.991 9.210
ν = 3 0.1148 0.3518 1.213 2.366 4.108 7.815 11.34
ν = 4 0.2971 0.7107 1.923 3.357 5.385 9.488 13.28
ν = 5 0.5543 1.1455 2.675 4.351 6.626 11.07 15.09
ν = 6 0.8721 1.635 3.455 5.348 7.841 12.59 16.81
ν = 7 1.239 2.167 4.255 6.346 9.037 14.07 18.48
ν = 8 1.646 2.733 5.071 7.344 10.22 15.51 20.09
ν = 9 2.088 3.325 5.899 8.343 11.39 16.92 21.67
ν = 10 2.558 3.940 6.737 9.342 12.55 18.31 23.21
ν = 11 3.053 4.575 7.584 10.34 13.70 19.68 24.72
ν = 12 3.571 5.226 8.438 11.34 14.85 21.03 26.22
ν = 15 5.229 7.261 11.04 14.34 18.25 25.00 30.58
ν = 20 8.260 10.85 15.45 19.34 23.83 31.41 37.57
ν = 30 14.95 18.49 24.48 29.34 34.80 43.77 50.89
ν = 50 29.71 34.76 42.94 49.33 56.33 67.50 76.15
ν > 30 ν +qrt(2 ν ) · X P+ 2/3 · X 2 P 2/3+ O(1/quadrato( ν ))
X P = 2.33 1.64 0,674 0.00 0.674 1.64 2.33

Considerato accettabile P dal 10% al 90%.

Se χ 2 esp. molto più della teoria del χ2. (questo è Pè grande), quindi il generatore non soddisfa il requisito della distribuzione uniforme, a partire dai valori osservati N io andare troppo lontano dal teorico P io · N e non può essere considerato casuale. In altre parole, è installato così grande intervallo di confidenza, che le restrizioni sui numeri diventano molto allentate, i requisiti sui numeri diventano deboli. In questo caso, si osserverà un errore assoluto molto grande.

Anche D. Knuth nel suo libro “The Art of Programming” ha notato che avendo χ 2 exp. per i piccoli, in generale, non va bene nemmeno, anche se questo sembra, a prima vista, meraviglioso dal punto di vista dell'uniformità. Infatti, prendiamo una serie di numeri 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, sono ideali dal punto di vista dell'uniformità, e χ 2 esp. saranno praticamente zero, ma difficilmente li riconoscerete come casuali.

Se χ 2 esp. molto meno della teoria del χ2. (questo è P piccolo), quindi il generatore non soddisfa il requisito di una distribuzione casuale uniforme, a partire dai valori osservati N io troppo vicino al teorico P io · N e non può essere considerato casuale.

Ma se χ 2 esp. si trova in un certo intervallo tra due valori di χ 2 o. , che corrispondono, ad esempio, P= 25% e P= 50%, allora possiamo supporre che i valori dei numeri casuali generati dal sensore siano completamente casuali.

Inoltre, va tenuto presente che tutti i valori P io · N deve essere abbastanza grande, ad esempio più di 5 (trovato empiricamente). Solo allora (con un campione statistico sufficientemente ampio) le condizioni sperimentali potranno essere considerate soddisfacenti.

Pertanto, la procedura di verifica è la seguente.

Test di indipendenza statistica

1) Controllo della frequenza di occorrenza dei numeri nella sequenza

Diamo un'occhiata a un esempio. Il numero casuale 0.2463389991 è composto dalle cifre 2463389991, mentre il numero 0.5467766618 è composto dalle cifre 5467766618. Collegando le sequenze di cifre, abbiamo: 24633899915467766618.

È chiaro che la probabilità teorica P io perdita io L'esima cifra (da 0 a 9) è pari a 0,1.

2) Controllare l'aspetto di serie di numeri identici

Indichiamo con N l numero di serie di cifre identiche in una riga di lunghezza l. Tutto deve essere controllato l da 1 a M, Dove M questo è un numero specificato dall'utente: il numero massimo di cifre identiche presenti in una serie.

Nell’esempio “24633899915467766618” sono state trovate 2 serie di lunghezza 2 (33 e 77), ovvero N 2 = 2 e 2 serie di lunghezza 3 (999 e 666), cioè N 3 = 2 .

La probabilità che si verifichi una serie di lunghezza lè uguale a: P l= 9 10 l (teorico). Cioè, la probabilità che si verifichi una serie lunga un carattere è uguale a: P 1 = 0,9 (teorico). La probabilità che appaia una serie di due caratteri è: P 2 = 0,09 (teorico). La probabilità che appaia una serie di tre caratteri è: P 3 = 0,009 (teorico).

Ad esempio, la probabilità che si verifichi una serie lunga un carattere è P l= 0,9, poiché può esserci un solo simbolo su 10 e ci sono 9 simboli in totale (lo zero non conta). E la probabilità che due simboli identici “XX” appaiano in fila è 0,1 · 0,1 · 9, cioè la probabilità di 0,1 che il simbolo “X” appaia in prima posizione è moltiplicata per la probabilità di 0,1 che il simbolo “X” appaia in prima posizione lo stesso simbolo apparirà nella seconda posizione “X” e moltiplicato per il numero di tali combinazioni 9.

La frequenza di occorrenza delle serie viene calcolata utilizzando la formula del chi quadrato di cui abbiamo discusso in precedenza utilizzando i valori P l .

Nota: il generatore può essere testato più volte, ma i test non sono completi e non garantiscono che il generatore produca numeri casuali. Ad esempio, un generatore che produce la sequenza 12345678912345 sarà considerato ideale durante i test, il che ovviamente non è del tutto vero.

In conclusione, notiamo che il terzo capitolo del libro di Donald E. Knuth The Art of Programming (Volume 2) è interamente dedicato allo studio dei numeri casuali. Studia vari metodi generazione di numeri casuali, test statistici di casualità e conversione di numeri casuali distribuiti uniformemente in altri tipi variabili casuali. Più di duecento pagine sono dedicate alla presentazione di questo materiale.

Molti partecipanti alla lotteria non vogliono perdere tempo a selezionare una combinazione vincente e compilare un biglietto della lotteria.

Per aiutarli, la maggior parte dei siti di lotterie specializzati offre una funzione molto comoda di “composizione automatica”. Oggi vi spieghiamo cos'è e come funziona.

"Composizione automatica"

Questa funzione è un classico generatore di numeri casuali, inventato fin dalla fondazione dei primi siti di lotterie e casinò virtuali. Oltre il 70% degli acquirenti di biglietti virtuali lotterie straniere scegli questa opzione completamente gratuita.

Inoltre, puoi selezionarne automaticamente più di uno combinazione vincente, ma diversi (fino a 50). Questo è molto conveniente per i giocatori che acquistano un gran numero di biglietti della lotteria con tariffe diverse.

Statistiche vincenti

Se sei ancora in dubbio se utilizzare la funzione “Selezione automatica” o preoccuparti di compilare tu stesso i ticket, continua a leggere. Le recensioni della lotteria Euromillions da parte dei suoi vincitori affermano chiaramente che la differenza nei metodi di compilazione del biglietto non influisce in alcun modo sulle possibilità del partecipante. Le statistiche della lotteria ce lo dicono, secondo cui, da numero totale I giocatori che utilizzano questa opzione sui siti Internet ricevono una vincita di circa il 70%. Per non essere infondati, forniremo esempi di fortunati vincitori nel 2012 che hanno scommesso utilizzando un computer.

Nel marzo 2012, una coppia statunitense vinse l’enorme jackpot di 218 milioni di dollari alla lotteria di New York. Non si sono sviluppati strategia della lotteria(leggi la sezione Strategie di gioco), ma utilizzava semplicemente la funzione “Selezione automatica”.

Vincitori sorteggio record cittadino americano Lotterie PowerBall, che hanno diviso equamente 586 milioni di dollari, hanno compilato i loro biglietti utilizzando un generatore di numeri casuali.

Una signora anziana, che non voleva pensare alla combinazione vincente, ha affidato la selezione dei numeri ad un computer e ha vinto 336 milioni di dollari.

Pro di un generatore di numeri casuali

Il primo vantaggio indiscutibile dell'utilizzo di questa funzione è il notevole risparmio di tempo. Con un clic puoi piazzare più scommesse contemporaneamente per un'estrazione di qualsiasi lotteria straniera.

Il secondo vantaggio è che facilita gli sforzi mentali del giocatore per creare una combinazione vincente. Se non sei un fanatico della numerologia e non credi nella magia dei numeri, credimi, meglio di un computer Non puoi trovare una combinazione di numeri.

Il terzo punto a favore del "quadrante automatico" sono le possibilità assolutamente uguali di vincere il jackpot e altri grandi premi con biglietti della lotteria compilato di tua mano.

Ogni giorno, tutto più persone interessato ai casinò online. Per alcuni questi giochi sono semplicemente intrattenimento, mentre altri li considerano un mezzo per guadagnare denaro. Probabilmente ciascuno dei giocatori sarà interessato a come funziona il generatore di numeri casuali, che produce combinazioni fortunate.

Dispositivo per slot machine

Moderno macchinette da gioco http://igrat-avtomati-wulcan.com hanno un algoritmo piuttosto complesso che produce combinazioni vincenti. Può essere diviso in parti: sensori sotto forma di generatori, un contatore che accetta il pagamento e distribuisce le vincite, un sistema di stoccaggio per grandi premi sotto forma di jackpot, un algoritmo sotto forma di kernel per l'emissione dei fondi vincenti. Questi algoritmi sono formati in una struttura meccanica sotto forma di slot o roulette.

Sensore di combinazioni e numeri casuali. (RNG)

Ora possiamo descrivere il funzionamento del RNG stesso. Tali sensori sono stati sviluppati con l'intento di rendere il gioco quanto più imprevedibile possibile. Questo schema funziona grazie a un fattore altrettanto probabile, ad esempio ferma la pallina in diversi fori sulla ruota della roulette. Con le slot il sistema funziona esattamente allo stesso modo, solo che ferma i simboli.

In una slot di gioco moderna, lo sviluppatore può installare più di un RNG. Se prendiamo come esempio il gioco dei tre sette, potrebbero esserci diversi sensori anche per le singole combinazioni specie separate sensore per fermare i numeri di una ruota o di un tamburo digitale.

In giochi come Polka Miracles, vengono installati sensori per fermare i numeri nel gioco, nonché sensori che calcolano l'intervallo di tempo di ogni gioco e registrano il passaggio agli altri campi da gioco. L'uso di più di un sensore ha lo scopo di ridurre il numero di vincite casuali. Inoltre, per i grandi premi sotto forma di jackpot, vengono solitamente installati sensori separati, che producono casualmente una combinazione vincente, che non può essere calcolata.

Se consideriamo un generatore di numeri casuali da un punto di vista matematico, è impossibile calcolarne il funzionamento utilizzando varie formule. Tuttavia, se prendi in considerazione una situazione già vincente ed esegui i calcoli dall'inizio alla fine di una partita, puoi comunque scrivere la formula. È triste che dopo l'emissione del jackpot i numeri continuino a essere generati. nuova formula, che sarà conosciuto solo dall'esito della partita.

C'è anche un'opinione secondo cui il proprietario della macchina può configurare le impostazioni del sensore in modo tale che ogni slot vincente appaia, condizionatamente, ogni 300 o 500 giochi, tuttavia, il proprietario stesso non può sapere esattamente quanti algoritmi derivati ​​risulteranno una vittoria esatta. Ma il fatto che i sensori siano regolabili è un dato di fatto. Per evitare conflitti di interessi, non installano un sensore, ma diversi, altrimenti il ​​proprietario della casa da gioco rimarrebbe sempre in attivo, e altrimenti il ​​sensore potrebbe essere individuato da qualsiasi persona esperta e svuotare la cassa del casinò. in modo quasi legale.

Il principio di funzionamento del generatore di numeri casuali è noto per la sua imprevedibilità, tuttavia è almeno in qualche modo suscettibile di analisi, ma combinato con un paio di sensori in più, tutto diventa molto più confuso, il che rende il casinò un successo nel gioco d'azzardo, il che è perché è estremamente popolare in tutto il mondo.

  • Traduzione

Immagina che sia il 1995 e che stai per effettuare il tuo primo acquisto online. Apri il tuo browser Netscape e sorseggia il tuo caffè mentre pagina iniziale Si carica lentamente. Il tuo percorso si trova su Amazon.com, un nuovo negozio online di cui ti ha parlato un amico. Quando arriva il momento di completare l'acquisto e inserire i dati personali, l'indirizzo nel browser cambia da “http” a “https”. Ciò segnala che il computer ha stabilito una connessione crittografata con il server Amazon. Ora puoi inviare i dati al server carta di credito senza paura dei truffatori che vogliono intercettare le informazioni.

Purtroppo il tuo primo acquisto online è stato compromesso fin dall'inizio: scoprirai presto che il protocollo apparentemente sicuro utilizzato dal browser per stabilire la connessione, in realtà non è molto sicuro.

Il problema è che le chiavi segrete utilizzate da Netscape non erano abbastanza casuali. Erano lunghi solo 40 bit, il che significa circa un trilione di combinazioni possibili. Sembra un largo numero, ma gli hacker sono riusciti a decifrare questi codici, anche sui computer degli anni '90, in circa 30 ore. Il numero apparentemente casuale utilizzato da Netscape per generare la chiave segreta era basato su just tre significati: l'ora del giorno, il numero ID del processo e il numero ID del processo madre sono tutti prevedibili. In questo modo l'aggressore è riuscito a ridurre il numero delle opzioni di forza bruta e a trovare la chiave desiderata molto prima di quanto Netscape si aspettasse.

I programmatori di Netscape avrebbero voluto usare numeri completamente casuali per generare la chiave, ma non sapevano come ottenerli. Il motivo è quello computer digitali sono sempre in uno stato ben definito, che cambia solo quando viene ricevuto un determinato comando dal programma. La cosa migliore che puoi fare è emulare la casualità generando i cosiddetti numeri pseudo-casuali utilizzando una speciale funzione matematica. A prima vista un insieme di tali numeri sembra essere completamente casuale, ma qualcun altro che utilizza la stessa procedura potrebbe facilmente generare esattamente gli stessi numeri, quindi di solito non sono adatti alla crittografia.

I ricercatori sono riusciti a inventare generatori di numeri pseudocasuali che si sono rivelati crittograficamente sicuri. Ma devono iniziare con un buon seme casuale, altrimenti genereranno sempre lo stesso insieme di numeri. E per quel valore iniziale, hai bisogno di qualcosa che sia veramente impossibile da indovinare o prevedere.

Fortunatamente non è difficile ottenere valori davvero imprevedibili sfruttando l’universo caotico che circonda da ogni parte il mondo strettamente deterministico dei bit del computer. Ma come farlo esattamente?

Durante anni recenti esiste una fonte di numeri casuali online chiamata Lavarand. È stato creato nel 1996 per generare automaticamente valori casuali elaborando le fotografie di una lampada decorativa: una lampada lava, che cambia aspetto in modi imprevedibili ogni secondo. Da allora, i valori casuali di questa fonte sono stati utilizzati più di un milione di volte.

Esistono anche generatori hardware di numeri casuali più sofisticati che rilevano effetti quantistici, come i fotoni che colpiscono uno specchio. Puoi ottenere numeri casuali su un normale computer registrando eventi imprevedibili come tempo esatto premendo i pulsanti della tastiera. Ma per ottenere un gran numero di valori casuali, devi premere molti pulsanti.

Io e i miei colleghi di Intel abbiamo deciso che dovevamo creare un modo più semplice. Ecco perché molti dei nostri chipset includono da oltre un decennio un generatore di numeri casuali hardware analogico. Il problema è che il suo circuito analogico spreca energia. Inoltre, è difficile mantenere la funzionalità di questo circuito analogico poiché il processo di produzione del chip migliora e diventa miniaturizzato. Pertanto, ora abbiamo sviluppato un sistema nuovo e completamente digitale che consente al microprocessore di generare un ricco flusso di valori casuali senza questi problemi. Questo nuovo generatore di numeri casuali digitali sarà presto disponibile con un nuovo processore.

Il primo tentativo di Intel La realizzazione del miglior generatore di numeri casuali sui normali PC risale al 1999, quando Intel ha introdotto il componente Firmware Hub per i chipset. Il generatore di numeri casuali (PDF) del chip è un oscillatore ad anello analogico che rileva il rumore termico proveniente dai resistori, lo amplifica e utilizza il segnale risultante per variare il periodo di un generatore di clock relativamente lento. Per ogni "tick" imprevedibile di questo generatore lento, il microcircuito impone la frequenza di oscillazione di un secondo generatore veloce, che cambia regolarmente il suo valore tra due stati binari: 0 e 1. Il risultato è una sequenza imprevedibile di zero e uno.

Il problema è che l'oscillatore ad anello, responsabile dell'amplificazione del segnale termico, consuma troppa energia e funziona costantemente, indipendentemente dal fatto che il computer abbia bisogno o meno di numeri casuali. questo momento. Questi componenti analogici sono anche una seccatura ogni volta che un'azienda modifica il processo di produzione dei chip. Ogni pochi anni, l'azienda aggiorna le proprie linee di produzione per produrre chip su scala più piccola. E ogni volta che questo frammento analogico deve essere calibrato e testato in un modo nuovo, questo è complesso e lavoro scrupolosoè diventato un vero grattacapo.

Ecco perché, nel 2008, Intel ha deciso di sviluppare un generatore di numeri casuali che funzioni interamente su base digitale. I ricercatori dell'azienda di Hillsboro (Oregon, USA), insieme agli ingegneri del Design Lab di Bangalore (India), hanno iniziato a studiare un problema chiave: come ottenere un flusso casuale di bit senza utilizzare circuiti analogici.

Ironicamente, la soluzione proposta viola la regola base della progettazione digitale secondo cui un circuito deve essere sempre in una posizione specifica e restituire uno 0 o un 1 logico. Naturalmente, un elemento digitale può trascorrere brevi periodi di tempo in una posizione indeterminata, commutando tra questi due valori. Tuttavia, deve funzionare in modo estremamente preciso e non deve mai oscillare tra di loro, altrimenti causerà ritardi o addirittura guasti al sistema. Nel nostro generatore di bit casuali, le fluttuazioni sono una caratteristica, non un bug.

Il nostro precedente generatore analogico era in grado di produrre solo un paio di centinaia di kilobit di numeri casuali al secondo, mentre quello nuovo li genera a una velocità di circa 3 Gb/s. Si inizia raccogliendo i valori quasi casuali dei due inverter in blocchi da 512 bit. Questi blocchi vengono successivamente divisi in coppie di numeri da 256 bit. Naturalmente, se i 512 bit originali non sono completamente casuali, anche questi numeri a 256 bit non saranno completamente casuali. Ma possono essere combinati matematicamente per produrre un numero a 256 bit vicino all'ideale.


TRE LIVELLI DI NUMERI: il generatore di numeri casuali Intel Bull Mountain impedisce qualsiasi variazione nella prevedibilità attraverso un processo in tre fasi. Innanzitutto, il circuito digitale genera un flusso di bit casuali. Quindi il “normalizzatore” (condizionatore) genera buoni semi casuali basati su questo flusso. Nella terza fase, il generatore di numeri pseudocasuali produce un flusso di cifre da utilizzare nel software.

Tutto ciò è meglio illustrato da una semplice illustrazione. Supponiamo per un secondo che il generatore di bit casuali produca modelli a 8 bit, ovvero numeri nell'intervallo da 0 a 255. Supponiamo inoltre che questi numeri a 8 bit non siano completamente casuali. Ora immagina che, ad esempio, qualche sottile difetto nel circuito sposti i valori di uscita nella parte inferiore dell'intervallo. A prima vista, il flusso di numeri casuali sembra buono, ma se elabori milioni di valori, noterai che i numeri nella parte superiore dell'intervallo sono leggermente meno comuni dei numeri nella parte inferiore.

Una possibile soluzione a questo problema è semplice: prendere sempre una coppia di numeri a 8 bit, moltiplicarli e quindi scartare i primi otto bit del numero a 16 bit risultante. Questa procedura eliminerà quasi completamente la distorsione.

Bull Mountain non funziona con numeri a 8 bit: funziona, come già detto, con numeri a 256 bit. E non li moltiplica, ma esegue operazioni crittografiche più complesse. Ma l’idea di base è la stessa. Puoi considerare questo passaggio come una "normalizzazione" per eliminare eventuali deviazioni dalla distribuzione casuale dei numeri che possono verificarsi in un circuito con due inverter.

Vogliamo davvero dormire bene la notte, quindi abbiamo progettato circuiti aggiuntivi che testano i flussi di numeri a 256 bit che entrano nel "normalizzatore" in modo che non siano troppo distorti in una direzione. Se questo viene trovato, lo contrassegniamo come difettoso e non a norma. Pertanto, le operazioni vengono eseguite solo con coppie di numeri di alta qualità.

La casualità garantita non è sufficiente se i valori casuali non vengono prodotti abbastanza velocemente da soddisfare gli standard. Sebbene il circuito hardware generi lo streaming molto più velocemente rispetto ai suoi predecessori, per alcuni non è ancora sufficiente compiti moderni. In modo che Bull Mountain possa produrre numeri casuali con la stessa rapidità con cui i generatori di numeri pseudo-casuali software producono un flusso, ma allo stesso tempo risparmiano alta qualità numeri casuali, abbiamo aggiunto un ulteriore livello allo schema. Qui, i numeri casuali a 256 bit vengono utilizzati come semi casuali crittograficamente sicuri per generare un gran numero di numeri pseudo-casuali a 128 bit. Poiché i numeri a 256 bit vengono forniti a 3 GHz, è garantito materiale sufficiente per generare rapidamente chiavi crittografiche.

La nuova istruzione, chiamata RdRand, consente a un programma che necessita di numeri casuali di effettuare una richiesta all'hardware che li produce. Progettata per processori Intel a 64 bit, l'istruzione RdRand è la chiave del generatore Bull Mountain. Estrae valori casuali a 16, 32 o 64 bit e li inserisce in un registro accessibile dal programma. L'istruzione RdRand è stata resa disponibile al pubblico circa un anno fa e il primo processore Intel a supportarla sarà Ivy Bridge. Il nuovo chipset è più veloce del 37% rispetto al suo predecessore e la dimensione dei suoi elementi minimi è stata ridotta da 32 a 22 nanometri. L'aumento complessivo delle prestazioni si adatta bene alle esigenze del nostro generatore di numeri casuali.

Sebbene lampade laviche sembra bello, non si adatteranno a tutti gli interni. Pensiamo che il nostro approccio alla generazione di numeri casuali, al contrario, troverà l’applicazione più universale.

Come già accennato, la registrazione del momento esatto della pressione dei tasti è stata utilizzata in passato come una comoda fonte di valori iniziali casuali per i generatori. Per gli stessi scopi abbiamo utilizzato i movimenti del mouse e anche la velocità di ricerca dei settori sul disco rigido. Ma tali eventi non sempre forniscono abbastanza bit casuali e, dopo un certo periodo di misurazione, questi bit diventano prevedibili. Peggio ancora, poiché ora viviamo in un mondo di server con