Sự ngẫu nhiên thực sự là gì


23

Tôi là sinh viên Khoa học Máy tính và hiện đang theo học khóa Mô hình & Mô hình Hệ thống. Nó liên quan đến việc xử lý các hệ thống hàng ngày xung quanh chúng ta và mô phỏng chúng trong các tình huống khác nhau bằng cách tạo ra các số ngẫu nhiên theo các đường cong phân phối khác nhau, như IID, Gaussian, v.v. Tôi đã làm việc trong dự án boids và một câu hỏi đặt ra cho tôi rằng chính xác "ngẫu nhiên" thực sự là gì? Ý tôi là, ví dụ, mọi số ngẫu nhiên mà chúng ta tạo ra, ngay cả trong các ngôn ngữ lập trình của chúng ta như thông qua Math.random()phương thức trong Java, về cơ bản được tạo theo một "thuật toán".

Làm thế nào để chúng ta thực sự biết rằng một chuỗi các số mà chúng ta tạo ra trên thực tế là ngẫu nhiên và nó sẽ giúp chúng ta, để mô phỏng một mô hình nào đó chính xác nhất có thể?



Câu trả lời:


18

Câu trả lời ngắn gọn là không ai biết tính ngẫu nhiên thực sự là gì, hoặc nếu một thứ như vậy tồn tại. Nếu bạn muốn định lượng hoặc đo lường tính ngẫu nhiên của một đối tượng rời rạc, bạn thường sẽ chuyển sang độ phức tạp Kolmogorov . Trước sự phức tạp của Kolmogorov, chúng tôi không có cách nào để định lượng tính ngẫu nhiên khi nói một chuỗi các con số mà không xem xét quá trình sinh ra nó.

Đây là một ví dụ trực quan thực sự làm phiền mọi người trong ngày. Hãy xem xét một chuỗi các lần tung đồng xu. Kết quả của một lần ném là đầu ( ) hoặc đuôi ( T ). Giả sử chúng tôi thực hiện hai thí nghiệm, trong đó chúng tôi tung đồng xu 10 lần. Thí nghiệm đầu tiên E 1 cho chúng ta H , H , H , H , H , H , H , H , H , H . Thí nghiệm thứ hai E 2 cho chúng ta T , T , H , T , H ,HTE1H,H,H,H,H,H,H,H,H,HE2 . Sau khi nhìn thấy kết quả, bạn có thể muốn khẳng định rằng có điều gì đó không đúng với đồng xu trong E 1 , hoặc ít nhất là vì một lý do kỳ lạ nào đó mà bạn nhận được không phải là ngẫu nhiên. Nhưng nếu bạn cho rằng cả H T như có thể xảy ra (đồng xu là công bằng), khả năng đạt được hoặc E 1 hoặc E 2 bằng ( 1 / 2 ) 10 . Trong thực tế, có đượcbất kỳtrình tự cụ thể là có thể xảy ra như bất kỳ! Tuy nhiên, E 2 cảm thấyT,T,H,T,H,T,T,H,T,HE1HTE1E2(1/2)10E2 ngẫu nhiên, và thì không.E1

Nói chung, vì độ phức tạp Kolmogorov không thể tính toán được, nên người ta không thể tính được mức độ ngẫu nhiên của một chuỗi số, cho dù quy trình "hoàn toàn ngẫu nhiên" được tuyên bố như thế nào đã sinh ra nó.


Đối với các chuỗi vô hạn, chúng ta có nhiều công cụ hơn để xác định tính ngẫu nhiên, như tính quy tắc.
Denis

1
@dkuper Lưu ý rằng chuỗi vô hạn mà các phân đoạn ban đầu của chúng hoàn toàn ngẫu nhiên theo định nghĩa độ phức tạp Kolmogorov sẽ là bình thường, nhưng bình thường là không đủ để được coi là thực sự ngẫu nhiên. Ví dụ: có những số bình thường, tất cả các phân đoạn ban đầu của chúng có nhiều hơn 1 '.
Quinn Culver

@Quinn Culver Có Tôi đồng ý, tính quy tắc chỉ là một ví dụ về một công cụ bổ sung mà chúng tôi có (trong số những công cụ khác) cho các chuỗi vô hạn. Sự phức tạp Kolmogorov và những người khác vẫn còn hữu ích.
Denis

8

Trong trường hợp Java (hoặc các ngôn ngữ tương tự), chúng tôi biết thuật toán được sử dụng để tạo các số ngẫu nhiên. Nếu nó bắt đầu với một hạt giống duy nhất, con số này không ngẫu nhiên chút nào, tức là nếu chúng ta biết trong một chuỗi một 0 , ... , một n , chúng ta biết một i + 1 , hoặc tuyên bố như khả năng có điều kiện: k , l , i : P ( một i + 1 = k | một i = l ) { 0 ,aia0,,anai+1

k,l,i:P(ai+1=kai=l){0,1}

Tuy nhiên, các chuỗi đó có thể đáp ứng các thuộc tính (xem ví dụ WP: Tự động tương quan ) rằng các số ngẫu nhiên đáp ứng và các thuộc tính này thường đủ để hoàn thành các nhiệm vụ, trong đó chúng tôi muốn sử dụng các số ngẫu nhiên "thực" (ví dụ được tạo bởi một số quy trình vật lý), nhưng có thể ' T nỗ lực họ.


3

Không thể biết chắc chắn một chuỗi đã cho là ngẫu nhiên hay không. Tuy nhiên, bạn có thể xem xét các đặc điểm (hoặc tham số) của chuỗi và tính xác suất của chuỗi đó được phân phối lãi suất.

Nếu bạn có thể tạo một chuỗi dài vô hạn bằng cách sử dụng trình tạo ngẫu nhiên của mình, thì nó sẽ có cùng tham số với phân phối ngẫu nhiên. Ví dụ, nếu bạn đang sử dụng sự phân bố Gaussian tiêu chuẩn , sau đó chuỗi của bạn nên được tiếp cận giá trị trung bình của 0 và độ lệch chuẩn của 1 . Vì vậy, một cách sơ bộ để kiểm tra trình tạo của bạn là tạo một chuỗi thực sự dài và kiểm tra xem nó có xấp xỉ phân phối ngẫu nhiên mong muốn hay không.(μ=0,σ=1)1

Bạn có thể thêm các khoảnh khắc bổ sung của phân phối (chẳng hạn như độ lệch) quan tâm để xác nhận thêm. Đối với các số IID, bạn cũng có thể thử đào tạo một thuật toán học máy để dự đoán các yếu tố sắp tới của chuỗi và sau đó kiểm tra giả thuyết khống rằng lịch sử cải thiện hiệu suất. Tuy nhiên, không có phương pháp nào trong số các phương pháp này có thể chứng minh rằng một chuỗi là thực sự ngẫu nhiên và, tốt nhất, có thể nhận ra khi các chuỗi KHÔNG ngẫu nhiên (ở một mức độ chắc chắn nào đó).


3

Lý thuyết hiện đại về câu trả lời điện toán là "một nguồn ngẫu nhiên là một nguồn trông ngẫu nhiên đối với lớp thuật toán yêu thích của bạn". Đây là một viễn cảnh thực dụng: nếu một nguồn ngẫu nhiên trông giống như ngẫu nhiên thực sự cho tất cả các thuật toán bạn quan tâm, thì không có gì khác quan trọng. Bạn có thể phân tích các thuật toán của mình như thể chúng được đưa ra các lần tung đồng xu thực sự ngẫu nhiên và phân tích của bạn sẽ đưa ra câu trả lời chính xác.

AA

  • tất cả các máy Turing luôn luôn dừng lại
  • tất cả các họ kích thước đa thức
  • tất cả thời gian đa thức máy Turing
  • tất cả các máy Turing logspace

A(Xn)Xn{0,1}nϵAAA

|Pr[A(Xn)=1]Pr[A(Un)=1]|ϵ,
Un{0,1}n

Ý tưởng này là đằng sau bất kỳ khái niệm chính thức hiện đại về giả danh.


2

Đây là hai xu nữa.

Một cách để suy nghĩ về các thuật toán ngẫu nhiên là hình dung một hộp có một số đầu vào, thực hiện những điều bí ẩn cho đầu vào đó và tạo ra một số đầu ra ("không thể đoán trước").

Nhưng thay vào đó, có thể hữu ích khi nghĩ về chúng như các thuật toán xác định có hai đầu vào: đầu vào "đúng" và một số đầu vào "ngẫu nhiên" mà chúng ta nhận được từ các hàm như Math.Random().

[0,1]nlogn

[0,1]nlogn

Như Jonathan và frafl đề cập, có nhiều cách để kiểm tra xem một nguồn ngẫu nhiên có hoạt động "ngẫu nhiên" hay không. Nhưng tất cả những gì họ sẽ làm là ảnh hưởng đến những gì bạn tin về thông tin trong tương lai đến từ nguồn ngẫu nhiên này. Nếu bạn nghĩ rằng mỗi bit có khả năng bằng 0 hoặc 1, bất kể các bit trước đó, thì theo hiểu biết và niềm tin tốt nhất của bạn, nguồn đó là ngẫu nhiên và độc lập ngẫu nhiên và do đó, theo kiến ​​thức và niềm tin tốt nhất của bạn, Nó sẽ chạy nhanh hoặc chính xác hoặc như vậy. Dù sao đó cũng là triết lý của tôi.


-2

Chúng tôi không thể tạo ra số thực sự ngẫu nhiên. Có các phương pháp khác nhau để tạo các số giả ngẫu nhiên bằng cách sử dụng một phương trình xác định và một giá trị hạt giống cụ thể. Vì vậy, chuỗi số ngẫu nhiên phụ thuộc vào giá trị hạt giống. Khi chúng ta biết giá trị hạt giống, chúng ta có thể dự đoán chuỗi sẽ diễn ra. Ngoài ra, còn có các phương pháp khác để tạo số ngẫu nhiên. Mọi người hiện đang sử dụng một số phương pháp để tạo các số ngẫu nhiên thực sự như sử dụng thời gian chuyển động của đầu đĩa và các phương pháp vật lý khác có thể được kết hợp trong máy tính Tham khảo: http://en.wikipedia.org/wiki/Random_number_generation#Generation_methods



-3

theo phương thức đã cho như bạn đã nói
Math.random () trong Java
Randomize; Ngẫu nhiên (n); ở Delphi

bạn có thể thực hiện cấu trúc và logic của riêng mình để tạo các số ngẫu nhiên,
trong đó "thuật toán" đó có thể thực hiện theo các thông số kỹ thuật đã cho của bạn để có kết quả ngẫu nhiên tốt hơn.
và xây dựng dựa trên đó các logic.

Cảm ơn.


2
Làm thế nào điều này trả lời câu hỏi "làm thế nào để biết một chuỗi là ngẫu nhiên"?
Juho

như tôi đã nói.chỉ ... trong đó "ngẫu nhiên" có thể được coi là gian lận, nhưng không ảnh hưởng đến hiệu ứng ngẫu nhiên của nó. Làm cho nó tự hào và xây dựng logic của bạn. Đơn giản.
Biệt danh

-4

câu trả lời khác là tốt, đây là một số góc độ khác về câu hỏi rất quan trọng / vô tình sâu sắc này. các nhà khoa học máy tính đã nghiên cứu ngẫu nhiên trong nhiều thập kỷ và có khả năng tiếp tục nghiên cứu nó. nó có nhiều kết nối sâu sắc và các câu hỏi mở đầu tiên còn lại trên toàn lĩnh vực. đây là một vài gợi ý

  • "Sự ngẫu nhiên thực / thực" xảy ra với các quá trình vật lý ở mức độ thấp và "nhiễu" như trong điốt zener, cơ học lượng tử, v.v. có thể được khai thác trong các RNG dựa trên phần cứng

  • các số khác được tạo trong vương quốc máy tính là cái được gọi là "giả ngẫu nhiên" được mô phỏng và không bao giờ có thể khớp với "tính ngẫu nhiên thực sự". chúng được gọi là PRNG

  • có một ý nghĩa quan trọng về "độ cứng mật mã của các bộ tạo số ngẫu nhiên" theo nghĩa nào đó đo lường "chất lượng" hoặc "bảo mật" của họ, ví dụ như PRNG bảo mật bằng mật mã . về cơ bản, một máy phát "yếu" không có độ phức tạp tính toán nhiều như máy phát "cứng" và máy phát "yếu" dễ bị hỏng hơn.

  • O(n)O(n2)=?Bằng chứng NP phải có một "độ phức tạp" nhất định nếu không, kỹ thuật phân tích tương tự có thể được sử dụng để phá vỡ PRNG, và hơn nữa, hơi ngạc nhiên, hầu hết hoặc có thể tất cả các phân tách / kỹ thuật phân loại phức tạp được biết đến vào ngày đó (hoặc thậm chí sau đó, cho đến nay ) không có đủ độ phức tạp.

  • một chủ đề nghiên cứu quan trọng trong TCS là các thuật toán ngẫu nhiên và derandomized . ý tưởng là, đại khái, để nghiên cứu mức độ thay đổi của thuật toán bằng cách thay thế "tính ngẫu nhiên thực sự" bằng PRNG và có nhiều định lý sâu sắc khác nhau về chủ đề này. đây là một câu hỏi cstheory.se được đánh giá cao mang lại một số hương vị của nghiên cứu trong lĩnh vực này: các thuật toán ngẫu nhiên hiệu quả và đơn giản trong đó khó xác định

  • Một chủ đề liên quan quan trọng khác trong TCS là entropy thông tin - ban đầu được giới thiệu trong vật lý từ lâu, trong đó nghiên cứu một khái niệm liên quan chặt chẽ về "trật tự thông tin" và giống như một số khái niệm quan trọng khác trong (T) CS dường như là một trong những ý tưởng quan trọng xuyên suốt ranh giới giữa phân tích ứng dụng và lý thuyết, thậm chí một số công thức là như nhau .

  • một lần nữa chứng thực tình trạng nghiên cứu tích cực, có những câu hỏi xếp hạng cao khác trên cstheory.se liên quan đến câu hỏi này. Đây là một gần, gần giống nhau: là một trình tạo số thực sự ngẫu nhiên Turing tính toán


Và không chỉ các nhà khoa học máy tính tất nhiên quan tâm đến "tính ngẫu nhiên". Nó có lẽ là một câu hỏi vô ích, cũng được xem xét từ các quan điểm tôn giáo và triết học.
Juho

đồng ý, trong vật lý, đây là một khái niệm quan trọng trong phát minh của QM và cuộc tranh luận Bohr-Einstein , Bells thm , và vẫn thúc đẩy "các lý thuyết biến ẩn" một lần nữa là một lĩnh vực nghiên cứu tích cực. Vì vậy, như bạn nói, có lẽ không ai biết nó là gì, nhưng nhiều người vẫn đang tìm kiếm một câu trả lời dứt khoát hơn khi chúng ta nói.
vzn

nhiều hơn về sự liên quan của tính ngẫu nhiên với góc P so với NP, nó thể hiện ở "điểm chuyển tiếp" thỏa đáng và phù hợp, ví dụ như trong bài viết này Độ phức tạp đơn điệu của k-Clique trên đồ thị ngẫu nhiên của Rossman
vzn

Đang phá vỡ các trình tạo số ngẫu nhiên, xem cuộc tấn công RNG , wikipedia
vzn

một cái nhìn tổng quan về tính ngẫu nhiên trong CS của người làm tóc giả RANDOMNESS VÀ PSEUDORANDOMNESS
vzn
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.