Puoi usare Pi come un generatore di numeri casuali grezzo?


30

Di recente ho visto questa domanda su math.SE. Mi ha fatto pensare. Pi potrebbe essere usato come un generatore di numeri casuali grezzo? Voglio dire, i risultati sono ben noti (da quanto tempo è stato calcolato pi?), Ma Pi sembra essere abbastanza casuale se preso 1 cifra alla volta.

Tutto questo ha un senso?


Dove verranno usati questi numeri casuali?
NullUserException,

2
Teoricamente potrebbe essere, ma sarebbe probabilmente meno ottimale rispetto ai metodi attuali. Ne ho solo un istinto, ma sembra che il pool casuale sia più grande in questo modo con meno spese generali.
Rig

@NullUserException Non sono sicuro ... Mi stavo solo chiedendo se potevano essere usati TUTTI. Presumo che questo non sarebbe sicuramente per la crittografia però '
Earlz,

3
@FrustratedWithFormsDesigner - fa parte del pacchetto ent. Usa i numeri casuali per calcolare l'area di un cerchio inscritto in un quadrato e da quello si può calcolare pi. Usando i bit di pi come numeri casuali, c'è una certa eleganza nell'usare quei dati per calcolare pi.

1
@FrustratedWithFormsDesigner ent è una suite di codice per analizzare la pseudo casualità di un mucchio di byte. Un test al suo interno è un Monte Carlo per il calcolo di pi e il confronto del calcolo casuale con il valore reale per vedere quanto è casuale.

Risposte:


50

Scavando da http://www.befria.nu/elias/pi/binpi.html per ottenere il valore binario di pi (in modo che fosse più facile convertire in byte piuttosto che provare a usare cifre decimali) e quindi eseguirlo attraverso ent Ottengo quanto segue per un'analisi della distribuzione casuale dei byte:

Entropia = 7.954093 bit per byte.

La compressione ottimale ridurrebbe le dimensioni di questo file di 4096 byte dello 0 percento.

La distribuzione del chi quadrato per 4096 campioni è 253,00 e casualmente supererebbe questo valore il 52,36 percento delle volte.

Il valore aritmetico medio dei byte di dati è 126,6736 (127,5 = casuale).

Il valore Monte Carlo per Pi è 3,120234604 (errore 0,68 percento).

Il coefficiente di correlazione seriale è 0,028195 (totalmente non correlato = 0,0).

Quindi sì, l'uso di pi per dati casuali ti darebbe dati abbastanza casuali ... rendendoti conto che sono dati casuali ben noti.


Da un commento sopra ...

A seconda di cosa stai facendo, ma penso che puoi usare i decimali della radice quadrata di qualsiasi numero primo come generatore di numeri casuali. Questi dovrebbero almeno avere cifre distribuite uniformemente. - Paxinum

Quindi, ho calcolato la radice quadrata di 2 in binario per annullare lo stesso insieme di problemi. Usando Wolteram's Iteration ho scritto un semplice script perl

#!/usr/bin/perl
use strict;
use Math::BigInt;

my $u = Math::BigInt->new("2");
my $v = Math::BigInt->new("0");
my $i = 0;

while(1) {
    my $unew;
    my $vnew;

    if($u->bcmp($v) != 1) { # $u <= $v
        $unew = $u->bmul(4);
        $vnew = $v->bmul(2);
    } else {
        $unew = ($u->bsub($v)->bsub(1))->bmul(4);
        $vnew = ($v->badd(2))->bmul(2);
    }   

    $v = $vnew;
    $u = $unew;

    #print $i,"  ",$v,"\n";
    if($i++ > 10000) { last; }
}

open (BITS,"> bits.txt");
print BITS $v->as_bin();
close(BITS);

In esecuzione questo per i primi 10 abbinati A095804, quindi ero sicuro di avere la sequenza. Il valore v n come quando è scritto in binario con il punto binario posizionato dopo la prima cifra fornisce un'approssimazione della radice quadrata di 2.

L'uso di ent contro questi dati binari produce:

Entropy = 7.840501 bits per byte.

Optimum compression would reduce the size
of this 1251 byte file by 1 percent.

Chi square distribution for 1251 samples is 277.84, and randomly
would exceed this value 15.58 percent of the times.

Arithmetic mean value of data bytes is 130.0616 (127.5 = random).
Monte Carlo value for Pi is 3.153846154 (error 0.39 percent).
Serial correlation coefficient is -0.045767 (totally uncorrelated = 0.0).

Esattamente il tipo di risposta che stavo cercando. Non ho idea di come calcolare tutto questo tipo di cose
Earlz,

Anche se la distribuzione numerica è abbastanza casuale, non devi trovare un modo per selezionarne una parte in modo casuale ?
Blumer,

1
@Blumer no. La casualità è misurata su una sequenza di numeri. Si dice che la sequenza delle cifre pi sia casuale. Vedi en.wikipedia.org/wiki/Statistical_randomness
Simon Bergot

11
Assolutamente giusto. E poiché si tratta di dati casuali ben noti, non osare mai usarli per scopi crittografici.
Falcon,

3
+1 per "dati casuali ben noti". Se hai bisogno di dati casuali che qualcuno non può indovinare, pi non fa per te, se hai solo bisogno di un sacco di numeri casuali per qualche motivo, funziona bene.
jmoreno,

5

Bene, tra le altre proprietà di un generatore di numeri casuali, probabilmente vuoi che sia un numero normale . E diverse risposte alla domanda math.SE che hanno ispirato la tua domanda sottolineano che al momento si ritiene che pi sia normale, ma non è stato provato.


2

Tale generatore sarebbe un pseudo generatore di numeri, cioè dato lo stesso seme, il risultato sarebbe sempre lo stesso. Detto questo, nella maggior parte dei framework, quando si utilizza il generatore di numeri casuali standard, c'è lo stesso problema di essere pseudo-casuali.

La distribuzione delle cifre sembra essere abbastanza simile ai generatori di numeri casuali standard¹, quindi le cifre di π possono essere utilizzate per scenari ordinari di generazione di numeri casuali.

Il problema è che l'algoritmo sarà probabilmente molto lento, rispetto ai normali generatori di numeri casuali, quindi non è molto utile nella pratica.


¹ Credo sia vero, ma non ho alcuna prova. Sarebbe interessante (e non complicare) fare un confronto basato su una grande quantità di numeri.


5
@NullUserException: No, alcuni generatori di numeri casuali usano una fonte di entropia. Questo può essere fatto tramite hardware specializzato (l'approccio adottato da random.org ) o utilizzando fonti di entropia esistenti (fluttuazioni misurabili all'interno di sensori hardware esistenti, determinati tipi di interazioni dell'utente, micro-variazioni in alcuni tipi di test delle prestazioni, ecc. ).
Brian,

1
@NullUserException: esistono PRNG crittograficamente sicuri, che sono ancora pseudo-casuali. Poi ci sono RNG reali basati sull'input dal mondo reale: decadimento radioattivo, rumore, ecc.
Arseni Mourzenko,

2
@MainMa Ma anche in questo caso, la casualità del decadimento radioattivo, del rumore atmosferico, derivato dall'input dell'utente, ecc. È discutibile. Solo perché non riconosciamo un modello non significa che uno non esiste.
NullUserException,

1
@NullUserException: L'anno scorso Colbeck / Renner ha pubblicato un documento che pretende di dimostrare: "Nessuna estensione della teoria dei quanti può avere migliorato il potere predittivo". Supponendo che ciò regge, potrebbe esserci una fonte di entropia che è veramente imprevedibile, piuttosto che semplicemente impossibile da prevedere.
Brian,

1
@MainMa - eseguiresti comunque test matematici per casualità. Anche se la fisica di base è casuale (per quanto ne sappiamo) non significa che la misurazione lo sia. I rilevatori di tutti i tipi hanno un comportamento "interessante" nel mondo reale
Martin Beckett,

2

La casualità delle cifre di pi (o del resto qualsiasi altra sequenza) può essere probabilmente testata dai cosiddetti "test della batteria". Un popolare test della batteria è il Diehard Battery Test di George Marsaglia . Esiste anche la pubblicazione speciale NIST 800-22 che descrive una serie di tali test e i risultati dell'applicazione di questi test a un numero di costanti fisiche, tra cui - lo ed ecco - pi per oltre un milione di bit. Il risultato di pi è riportato nell'Appendice B del rapporto e si presenta così:

Statistical Test                            P-value
Frequency                                   0.578211
Block Frequency (m = 128)                   0.380615
Cusum-Forward                               0.628308
Cusum-Reverse                               0.663369
Runs                                        0.419268
Long Runs of Ones                           0.024390
Rank                                        0.083553
Spectral DFT                                0.010186
Non-overlapping Templates (m = 9, B = 000000001)          0.165757
Overlapping Templates (m = 9)               0.296897
Universal                                   0.669012
Approximate Entropy (m = 10)                0.361595
Random Excursions (x = +1)                  0.844143
Random Excursions Variant (x = -1)          0.760966
Linear Complexity (M = 500)                 0.255475
Serial (m = 16, 2m∇Ψ )                      0.143005

Pi è un buon generatore di sequenze casuali? Guarda i risultati sopra (o cerca i significati della variabile della colonna di sinistra, se non hai idea di cosa significhino), e controlla se soddisfa le tue esigenze.


1
Leggimi per Diehard dice che necessita di circa 10-12 megabyte di dati binari (il migliore che ho trovato è di 32 kilobyte). Se lo avessi eseguito contro i dati ASCII, il test sarebbe abbastanza lontano da ciò che l'applicazione si aspetta.

La mia risposta era per la domanda OP e la domanda originale su Math.SE - nessuna delle quali menzionava nulla sugli ASCII rispetto ai dati binari o sulla lunghezza del campione. Senza un set di campioni abbastanza grande, come si può determinare la casualità statistica di qualsiasi sequenza?
sm535
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.