2010-04-14 27 views
13

Tôi đã viết một chương trình trong java để cuộn chết và ghi lại tổng số lần mỗi giá trị 1-6 được cuộn. Tôi đã cán 6 triệu lần. Dưới đây là phân phối:Làm cách nào để biết liệu điều này có đủ ngẫu nhiên không?

#of 0's: 0 
#of 1's: 1000068 
#of 2's: 999375 
#of 3's: 999525 
#of 4's: 1001486 
#of 5's: 1000059 
#of 6's: 999487 

(. 0 không phải là một lựa chọn)

là nhất quán phân phối này với con xúc xắc ngẫu nhiên cuộn? Kiểm tra thống kê khách quan nào có thể xác nhận rằng các cuộn xúc xắc thực sự là ngẫu nhiên đủ?

EDIT: câu hỏi đã được nêu lên trên ứng dụng: một trò chơi mà tôi muốn công bằng như có thể đạt được một cách hợp lý.

+2

Ứng dụng nào bạn đang sử dụng để xác định xem thuật toán có "đủ ngẫu nhiên" hay không. Ngoài ra, trật tự có thể quan trọng trong đơn của bạn; một chuỗi nếu 1 có thể là "xấu" cho tình huống của bạn. – strager

+1

phân phối đủ nhất quán. Bạn đã từng dành thời gian trên random.org chưa? Có thể là một nơi tốt để bạn bắt đầu. – jcolebrand

+3

Tôi nghĩ rằng đây là những gì bạn cần phải kiểm tra: lặp đi lặp lại nhiều hơn bạn đi qua, kết quả sẽ nhận được gần hơn đến 1/6 phân phối cho mỗi con xúc xắc-chữ số. –

Trả lời

5

Để kiểm tra xem phân phối cụ thể này có phù hợp với phân phối dự kiến ​​của các con số được cuộn với lặn "công bằng" không, bạn cần thực hiện Pearson's Chi-square test.

Lưu ý rằng điều này vẫn sẽ không chứng minh rằng thuật toán của bạn là "công bằng", chỉ những kết quả cụ thể này trông "công bằng".

Để kiểm tra xem thuật toán của bạn có "công bằng" nói chung hay không, hãy sử dụng Diehard tests, như những người khác đã đề cập.

+0

Làm thế nào để các thử nghiệm chết tiệt ngẫu nhiên garuntee? – David

+2

Các thử nghiệm của Diehard không đảm bảo tính ngẫu nhiên. Không có gì có thể đảm bảo sự ngẫu nhiên. :-) Các bài kiểm tra Diehard được thiết lập các bài kiểm tra tự động dự định chạy chống lại việc thực thi ngẫu nhiên cụ thể tìm kiếm bằng chứng thống kê rằng việc triển khai cụ thể này là _không thực hiện "công bằng". Nếu máy phát của bạn vượt qua các bài kiểm tra của Diehard, điều đó không có nghĩa là nó "công bằng" và tính ngẫu nhiên được đảm bảo; nó chỉ có nghĩa là có một cơ hội cao nó có thể là "công bằng" –

4

Nếu trình tạo số ngẫu nhiên của bạn vượt qua các bài kiểm tra của Diehard, đó là điều tốt nhất bạn có thể làm.

Thậm chí một vật lý chết sẽ không hoàn hảo với 1/6 mỗi khuôn mặt.

Tăng thử nghiệm theo thứ tự độ lớn, sau đó thực hiện lại. Nếu bạn nhận được 1/6 cho mỗi thử nghiệm bạn sẽ ổn.

+1

_if bạn nhận được khoảng 1/6 cho mỗi face_ ~ thống kê bạn sẽ không bao giờ nhận được chính xác 1/6 cho mỗi khuôn mặt, đó không phải là ngẫu nhiên. – jcolebrand

+3

Chính xác 1/6 cho mỗi khuôn mặt cũng giống như bất kỳ kết quả nào khác có thể. Tôi chắc chắn sẽ không nói ai đó nên "không bao giờ" có được nó như là một kết quả. – jemfinch

+0

Tôi đã chạy 6 triệu bản dùng thử. Không phải là tăng đủ? còn thử nghiệm Diehard là gì? – David

1

Chỉ riêng thử nghiệm này không đủ để xác định ngẫu nhiên. Không phải là nó hoàn toàn vô ích, nhưng một con lăn xúc xắc "ngẫu nhiên" xuất ra 1,2,3,4,5,6 và lặp lại sẽ là ngẫu nhiên hoàn toàn theo thử nghiệm này.

Một thử nghiệm được đề xuất khác: chọn một số, x và mỗi lần được cuộn, ghi lại số liệu thống kê về số tiếp theo; bạn sẽ thấy một phân phối thậm chí một lần nữa. Lặp lại cho tất cả sáu giá trị của x. Nếu nó vượt qua thử nghiệm này, nó có thể là ngẫu nhiên, đủ để được sử dụng như một con lăn xúc xắc.

0

Xác suất là 6'000'000 cuộn xúc xắc sẽ kết thúc với kết quả chính xác 1'000'000 của mỗi kết quả gần bằng 0. Miễn là tổng nếu kết quả là chính xác và phương sai (lỗi) của sự khác biệt từ kết quả mong đợi đi về phía 0 (tương đối) khi số lượng thử nghiệm tăng lên, thì hàm ngẫu nhiên của bạn không sai.

Bạn có thể chứng minh nó bằng toán học hoặc bằng cách kiểm tra hàm ngẫu nhiên với các chuỗi thử nghiệm lớn hơn và lớn hơn để thấy rằng nó hội tụ.

Đối với một số lần kiểm tra lặp lại, tổng của mỗi kết quả sẽ xấp xỉ phân phối Gaussian. Ví dụ. mỗi kết quả 1-6 nên nằm trong phân phối bình thường tập trung vào khoảng 1'000'000 với phương sai tỷ lệ nghịch với số lượng cuộn xúc xắc. Các thử nghiệm khác, Diehard kiểm tra, kiểm tra trình tự thực tế của cuộn xúc xắc là ngẫu nhiên trong chính nó và không phải là kết quả của 6'000'000 cuộn ví dụ là 100'000 liên tiếp 1, sau đó 100'000 2 của và như vậy và cuối cùng là một số chuỗi ngẫu nhiên.

+0

bạn có thể đi vào chi tiết hơn về phương sai, ý nghĩa của nó và cách tính toán của nó? – David

+0

Phương sai là một thước đo cho biến "ngẫu nhiên" như thế nào. Nếu bạn kiểm tra ngẫu nhiên xúc xắc của bạn bằng cách sử dụng 6 vòng bạn sẽ nhận được một phương sai lớn trên mỗi kết quả [1-6] nhưng nếu bạn thử nghiệm nó 6'000'000 lần phương sai sẽ thấp hơn nhiều. Hãy suy nghĩ về phương sai như lan rộng. Aynyway, các bài kiểm tra của Diehard có liên quan hơn để kiểm tra tính ngẫu nhiên. – Ernelli

Các vấn đề liên quan