Bisakah Anda menggunakan Pi sebagai generator nomor acak?

30

Saya baru-baru ini melihat pertanyaan ini di math.SE. Itu membuat saya berpikir. Bisakah Pi digunakan sebagai generator angka acak? Maksud saya hasilnya diketahui (berapa lama pi telah dikomputasi sampai sekarang?) Tetapi, Pi tampaknya cukup acak ketika diambil 1 digit pada suatu waktu.

Apakah ini masuk akal sama sekali?

Earlz
sumber
Di mana angka-angka acak ini akan digunakan?
NullUserException
2
Secara teoritis bisa saja tetapi mungkin akan kurang optimal daripada metode saat ini. Hanya insting pada itu tetapi tampaknya kumpulan acak lebih besar dengan cara ini dengan lebih sedikit overhead.
Rig
@NullUserException Tidak yakin ... Saya hanya ingin tahu apakah mereka bisa digunakan sama sekali. Saya menganggap ini pasti bukan untuk kriptografi '
Earlz
3
@FrustratedWithFormsDesigner - bagian dari paket ent. Ini menggunakan angka acak untuk menghitung luas lingkaran yang tertulis dalam sebuah kotak dan dari situ, seseorang dapat menghitung pi. Menggunakan bit pi sebagai angka acak, ada keanggunan tertentu untuk menggunakan data itu untuk menghitung pi.
1
@FrustratedWithFormsDesigner ent adalah seperangkat kode untuk menganalisis keacakan semu dari sekelompok byte. Salah satu tes di dalamnya adalah Monte Carlo untuk menghitung pi dan membandingkan perhitungan acak terhadap nilai aktual untuk melihat seberapa acaknya.

Jawaban:

50

Menggali dari http://www.befria.nu/elias/pi/binpi.html untuk mendapatkan nilai biner dari pi (sehingga lebih mudah untuk diubah menjadi byte daripada mencoba untuk menggunakan angka desimal) dan kemudian menjalankannya melalui ent Saya mendapatkan yang berikut ini untuk analisis distribusi acak byte:

Entropy = 7,954093 bit per byte.

Kompresi optimal akan mengurangi ukuran file 4096 byte ini sebesar 0 persen.

Distribusi chi square untuk 4.096 sampel adalah 253,00, dan secara acak akan melebihi nilai ini 52,36 persen dari waktu.

Nilai rata-rata aritmatika dari byte data adalah 126,6736 (127,5 = acak).

Nilai Monte Carlo untuk Pi adalah 3.120234604 (kesalahan 0,68 persen).

Koefisien korelasi serial adalah 0,028195 (sama sekali tidak berkorelasi = 0,0).

Jadi ya, menggunakan pi untuk data acak akan memberikan Anda data yang cukup acak ... menyadari bahwa itu adalah data acak yang terkenal.


Dari komentar di atas ...

Tergantung pada apa yang Anda lakukan, tapi saya pikir Anda dapat menggunakan desimal dari akar kuadrat dari bilangan prima apa pun sebagai pembangkit bilangan acak. Ini setidaknya harus memiliki angka yang didistribusikan secara merata. - Paxinum

Jadi, saya menghitung akar kuadrat dari 2 dalam biner untuk mengungkap set masalah yang sama. Dengan menggunakan Iterasi Wolfram, saya menulis skrip perl sederhana

#!/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);

Menjalankan ini untuk 10 pertama yang cocok dengan A095804 jadi saya yakin saya memiliki urutannya. Nilai v n seperti ketika ditulis dalam biner dengan titik biner ditempatkan setelah digit pertama memberikan perkiraan akar kuadrat dari 2.

Menggunakan ent terhadap data biner ini menghasilkan:

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).

sumber
Jenis jawaban yang saya cari. Saya tidak tahu bagaimana menghitung semua jenis barang ini
Earlz
Bahkan jika distribusi angka cukup acak, tidakkah Anda harus menemukan cara untuk memilih secara acak sebagian?
Blumer
1
@ Nomor pelanggan. Keacakan diukur pada urutan angka. Urutan digit pi dikatakan acak. Lihat en.wikipedia.org/wiki/Statistics_randomness
Simon Bergot
11
Benar-benar tepat. Dan karena ini adalah data acak yang terkenal, jangan pernah Anda berani menggunakannya untuk keperluan kriptografi.
Falcon
3
+1 untuk "data acak terkenal". Jika Anda memerlukan data acak yang tidak dapat ditebak seseorang, pi bukan untuk Anda, jika hanya perlu sekelompok angka acak untuk beberapa alasan, itu berfungsi dengan baik.
jmoreno
5

Nah, di antara sifat-sifat lain dari generator angka acak, Anda mungkin ingin itu menjadi angka normal . Dan beberapa jawaban dalam soal matematika. SE yang mengilhami pertanyaan Anda menunjukkan bahwa saat ini pi diyakini normal, tetapi belum terbukti.

psr
sumber
2

Generator seperti itu akan menjadi generator nomor semu, yaitu diberi benih yang sama, hasilnya akan selalu sama. Ini dikatakan, dalam sebagian besar kerangka kerja, ketika Anda menggunakan generator nomor acak standar, ada masalah yang sama menjadi pseudo-acak.

Distribusi digit tampaknya sangat mirip dengan generator nomor acak standar¹, sehingga digit π dapat digunakan untuk skenario generasi nomor acak biasa.

Masalahnya adalah bahwa algoritme mungkin akan sangat lambat, dibandingkan dengan generator bilangan acak biasa, sehingga tidak terlalu berguna dalam praktiknya.


¹ Saya percaya itu benar, tetapi tidak memiliki bukti. Akan menarik (dan tidak menyulitkan) untuk melakukan perbandingan berdasarkan jumlah yang besar.

Arseni Mourzenko
sumber
5
@NullUserException: Tidak, beberapa generator angka acak menggunakan sumber entropi. Ini dapat dilakukan baik melalui perangkat keras khusus (pendekatan yang diambil oleh random.org ) atau dengan menggunakan sumber entropi yang ada (fluktuasi terukur dalam sensor perangkat keras yang ada, jenis interaksi pengguna tertentu, variasi mikro dalam beberapa jenis tes kinerja tertentu, dll. ).
Brian
1
@NullUserException: ada PRNG yang aman secara kriptografis, yang masih pseudo-acak. Lalu ada RNG nyata yang didasarkan pada masukan dari dunia nyata: peluruhan radioaktif, kebisingan, dll.
Arseni Mourzenko
2
@MainMa Tapi meskipun begitu, keacakan dari peluruhan radioaktif, kebisingan atmosfer, yang berasal dari input pengguna, dll. Masih bisa diperdebatkan. Hanya karena kita tidak mengenali suatu pola, bukan berarti tidak ada.
NullUserException
1
@NullUserException: Tahun lalu Colbeck / Renner menerbitkan sebuah makalah yang dimaksudkan untuk membuktikan: "Tidak ada perluasan teori kuantum yang dapat meningkatkan daya prediksi." Dengan asumsi ini berlaku, mungkin ada sumber entropi yang benar-benar tidak dapat diprediksi, daripada sekadar tidak layak untuk diprediksi.
Brian
1
@ MainMa - Anda masih akan melakukan tes matematika untuk keacakan. Meskipun fisika yang mendasarinya acak (sepengetahuan kami), itu tidak berarti bahwa pengukuran itu. Detektor dari semua jenis memiliki banyak perilaku 'menarik' di dunia nyata
Martin Beckett
2

Keacakan digit pi (atau dalam hal ini urutan lain) dapat dibilang diuji oleh apa yang disebut 'tes baterai'. Salah satu tes baterai yang populer adalah Diehard Battery Test milik George Marsaglia . Ada juga publikasi Khusus NIST 800-22 yang menjelaskan sejumlah tes semacam itu dan hasil penerapan tes-tes ini ke sejumlah konstanta fisik, termasuk - lihat dan lihat - pi selama lebih dari satu juta bit. Hasil pi diberikan dalam Lampiran B dari laporan dan terlihat seperti ini:

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

Apakah pi generator urutan acak yang baik? Lihatlah hasil di atas (atau cari arti dari variabel kolom kiri, jika Anda tidak tahu apa artinya), dan periksa apakah itu memenuhi kebutuhan Anda.

sm535
sumber
1
Baca saya untuk Diehard mengatakan bahwa itu membutuhkan sekitar 10-12 megabyte data biner (yang terbaik yang bisa saya temukan adalah 32 kilobyte). Jika Anda menjalankannya terhadap data ascii, tes akan jauh dari apa yang diharapkan aplikasi.
Jawaban saya adalah untuk pertanyaan OP dan pertanyaan asli tentang Math.SE - tidak ada yang menyebutkan apa pun tentang ascii dibandingkan data biner atau panjang sampel. Tanpa set sampel yang cukup besar, bagaimana keacakan statistik urutan apa pun dapat ditentukan?
sm535