Bạn có thể sử dụng Pi như một trình tạo số ngẫu nhiên thô?


30

Gần đây tôi đã thấy câu hỏi này tại math.SE. Nó làm tôi suy nghĩ. Pi có thể được sử dụng như một trình tạo số ngẫu nhiên thô? Ý tôi là các kết quả đã được biết đến (pi đã được tính từ bao lâu rồi?), Nhưng Pi dường như khá ngẫu nhiên khi lấy 1 chữ số một lần.

Điều này có ý nghĩa gì không?


Những số ngẫu nhiên này sẽ được sử dụng ở đâu?
NullUserException

2
Về mặt lý thuyết nó có thể nhưng nó có thể sẽ ít tối ưu hơn các phương pháp hiện tại. Chỉ cần bản năng về điều đó nhưng có vẻ như nhóm ngẫu nhiên lớn hơn theo cách này với ít chi phí hơn.
Giàn khoan

@NullUserException Không chắc chắn ... Tôi chỉ tự hỏi liệu chúng có thể được sử dụng TẠI TẤT CẢ. Tôi cho rằng điều này chắc chắn sẽ không dành cho mật mã mặc dù '
Earlz

3
@FrustratedWithFormsDesigner - một phần của gói ent. Nó sử dụng các số ngẫu nhiên để tính diện tích hình tròn được ghi trong một hình vuông và từ đó, người ta có thể tính pi. Sử dụng các bit của pi làm số ngẫu nhiên, có một sự tao nhã nhất định để sử dụng dữ liệu đó để tính pi.

1
@FrustratedWithFormsDesigner ent là một bộ mã để phân tích tính ngẫu nhiên giả của bó byte. Một thử nghiệm bên trong nó là một Monte Carlo để tính pi và so sánh phép tính ngẫu nhiên với giá trị thực tế để xem mức độ ngẫu nhiên của nó.

Câu trả lời:


50

Đào từ http://www.befria.nu/elias/pi/binpi.html để lấy giá trị nhị phân của pi (để dễ dàng chuyển đổi thành byte hơn là cố gắng sử dụng chữ số thập phân) và sau đó chạy nó thông qua ent Tôi nhận được những điều sau đây để phân tích các phân phối ngẫu nhiên của các byte:

Entropy = 7.954093 bit mỗi byte.

Nén tối ưu sẽ giảm kích thước của tệp 4096 byte này xuống 0 phần trăm.

Phân phối vuông góc cho 4096 mẫu là 253,00 và ngẫu nhiên sẽ vượt quá giá trị này 52,36% số lần.

Giá trị trung bình số học của các byte dữ liệu là 126,6736 (127,5 = ngẫu nhiên).

Giá trị Monte Carlo cho Pi là 3.120234604 (lỗi 0,68 phần trăm).

Hệ số tương quan nối tiếp là 0,028195 (hoàn toàn không tương quan = 0,0).

Vì vậy, có, sử dụng pi cho dữ liệu ngẫu nhiên sẽ cung cấp cho bạn dữ liệu khá ngẫu nhiên ... nhận ra rằng đó là dữ liệu ngẫu nhiên nổi tiếng.


Từ một bình luận ở trên ...

Tùy thuộc vào những gì bạn đang làm, nhưng tôi nghĩ bạn có thể sử dụng số thập phân của căn bậc hai của bất kỳ số nguyên tố nào làm công cụ tạo số ngẫu nhiên. Chúng ít nhất phải có các chữ số phân bố đều. - Paxinum

Vì vậy, tôi đã tính căn bậc 2 của nhị phân để không phát hiện ra cùng một bộ vấn đề. Sử dụng Lặp đi lặp lại của Wolfram tôi đã viết một kịch bản perl đơn giản

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

Chạy cái này trong 10 cái đầu tiên phù hợp với A095804 vì vậy tôi tự tin rằng mình có trình tự. Giá trị v n như khi được viết dưới dạng nhị phân với điểm nhị phân được đặt sau chữ số đầu tiên cho gần đúng căn bậc hai của 2.

Sử dụng ent chống lại dữ liệu nhị phân này tạo ra:

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

Chính xác là loại câu trả lời tôi đang tìm kiếm. Tôi không biết làm thế nào để tính toán tất cả các loại công cụ này
Earlz

Ngay cả khi phân phối số khá ngẫu nhiên, bạn không phải tìm cách chọn ngẫu nhiên một phần của nó?
Blumer

1
@ Không có. Tính ngẫu nhiên được đo trên một dãy số. Chuỗi các chữ số pi được cho là ngẫu nhiên. Xem en.wikipedia.org/wiki/Statistic_randomness
Simon Bergot

11
Hoàn toàn đúng. Và bởi vì nó là dữ liệu ngẫu nhiên nổi tiếng, bạn không bao giờ dám sử dụng dữ liệu đó cho mục đích mã hóa.
Falcon

3
+1 cho "dữ liệu ngẫu nhiên nổi tiếng". Nếu bạn cần dữ liệu ngẫu nhiên mà ai đó không thể đoán, pi không dành cho bạn, nếu chỉ cần một loạt các số ngẫu nhiên vì một số lý do, nó hoạt động tốt.
jmoreno

5

Chà, trong số các thuộc tính khác của trình tạo số ngẫu nhiên, có lẽ bạn muốn nó là một số bình thường . Và một số câu trả lời trong math.SE câu hỏi đã truyền cảm hứng cho câu hỏi của bạn chỉ ra rằng hiện tại pi được cho là bình thường, nhưng nó chưa được chứng minh.


2

Trình tạo như vậy sẽ là một trình tạo số giả, tức là được cung cấp cùng một hạt giống, kết quả sẽ luôn giống nhau. Điều này đang được nói, trong hầu hết các khung, khi bạn sử dụng trình tạo số ngẫu nhiên tiêu chuẩn, có cùng một vấn đề là giả ngẫu nhiên.

Sự phân bố các chữ số dường như khá giống với các bộ tạo số ngẫu nhiên tiêu chuẩn¹, do đó các chữ số của π có thể được sử dụng cho các kịch bản tạo số ngẫu nhiên thông thường.

Vấn đề là thuật toán có thể sẽ rất chậm, so với các trình tạo số ngẫu nhiên thông thường, vì vậy nó không hữu ích trong thực tế.


Tôi tin đó là sự thật, nhưng không có bất kỳ bằng chứng nào. Sẽ rất thú vị (và không phức tạp) khi so sánh dựa trên một số lượng lớn số lượng.


5
@NullUserException: Không, một số trình tạo số ngẫu nhiên sử dụng nguồn entropy. Điều này có thể được thực hiện thông qua phần cứng chuyên dụng (cách tiếp cận của Random.org ) hoặc bằng cách sử dụng các nguồn entropy hiện có (biến động có thể đo được trong các cảm biến phần cứng hiện có, một số loại tương tác người dùng, biến thể vi mô trong các loại thử nghiệm hiệu suất nhất định, v.v. ).
Brian

1
@NullUserException: có PRNG bảo mật bằng mật mã, vẫn là giả ngẫu nhiên. Sau đó, có RNG thực sự dựa trên đầu vào từ thế giới thực: phân rã phóng xạ, tiếng ồn, v.v.
Arseni Mourzenko

2
@MainMa Nhưng ngay cả khi đó, tính ngẫu nhiên của phân rã phóng xạ, tiếng ồn trong khí quyển, xuất phát từ đầu vào của người dùng, v.v ... vẫn còn gây tranh cãi. Chỉ vì chúng tôi không nhận ra một mẫu không có nghĩa là một mẫu không tồn tại.
NullUserException

1
@NullUserException: Năm ngoái, Colbeck / Renner đã xuất bản một bài báo nhằm chứng minh: "Không có sự mở rộng của lý thuyết lượng tử có thể cải thiện sức mạnh dự đoán." Giả sử điều này giữ vững, có thể có một nguồn entropy thực sự không thể đoán trước, thay vì chỉ đơn thuần là không thể dự đoán được.
Brian

1
@MainMa - bạn vẫn sẽ thực hiện các bài kiểm tra toán học cho ngẫu nhiên. Mặc dù vật lý cơ bản là ngẫu nhiên (theo hiểu biết tốt nhất của chúng tôi), điều đó không có nghĩa là đo lường. Các máy dò của tất cả các loại có rất nhiều hành vi 'thú vị' trong thế giới thực
Martin Beckett

2

Tính ngẫu nhiên của các chữ số pi (hoặc cho vấn đề đó bất kỳ chuỗi nào khác) có thể được kiểm tra bằng cách gọi là 'kiểm tra pin'. Một bài kiểm tra pin phổ biến là Kiểm tra pin Diehard của George Marsaglia . Ngoài ra còn có ấn phẩm đặc biệt 800-22 của NIST mô tả một số thử nghiệm như vậy và kết quả của việc áp dụng các thử nghiệm này cho một số hằng số vật lý, bao gồm - lo và kìa - pi trong hơn một triệu bitcoin. Kết quả của pi được đưa ra trong Phụ lục B của báo cáo và trông như thế này:

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

Là pi một trình tạo chuỗi ngẫu nhiên tốt? Nhìn vào các kết quả trên (hoặc tìm kiếm ý nghĩa của biến cột bên trái, nếu bạn không biết ý nghĩa của chúng) và kiểm tra xem nó có thỏa mãn nhu cầu của bạn không.


1
Đọc cho Diehard nói rằng nó cần khoảng 10-12 megabyte dữ liệu nhị phân (thứ tốt nhất tôi có thể tìm thấy là 32 kilobyte). Nếu bạn chạy nó với dữ liệu ascii, thử nghiệm sẽ hoàn toàn khác với những gì ứng dụng đang mong đợi.

Câu trả lời của tôi là cho câu hỏi OP và câu hỏi ban đầu trên Math.SE - không ai trong số đó đề cập bất cứ điều gì về ascii so với dữ liệu nhị phân hoặc độ dài của mẫu. Nếu không có một tập hợp mẫu đủ lớn, làm thế nào có thể xác định được tính ngẫu nhiên thống kê của bất kỳ chuỗi nào?
sm535
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.