Làm cách nào để xác định khoảng thời gian của trình tạo số giả ngẫu nhiên?


14

Giả sử tôi đang sử dụng một trình tạo số giả ngẫu nhiên tuyến tính (PRNG). Cho hạt giống , hệ số nhân (a), hệ số dịch chuyển (c) và hệ số mô đun (m), làm cách nào tôi có thể xác định thời gian PRNG của mình? Tôi có xác định nó bằng các thuật toán phát hiện thử nghiệm / mẫu hoặc có một công thức trực tiếp để tính thời gian của nó không? x0

Mặc dù câu hỏi của tôi là cụ thể về phương pháp cộng hưởng tuyến tính, tôi vẫn sẵn sàng để biết thêm về cách tính thời gian trong thực tế cho các PRNG khác.



BTW, nếu bạn đang sử dụng LFSR thì khoảng thời gian là tối đa nếu đa thức phản hồi là nguyên thủy . Trong trường hợp như vậy, giai đoạn AFAIK (không báo cho tôi; quá lười biếng để khai thác nốt khóa học của tôi) là nơi những phản hồi đa thức p ( x ) F q [ x ] của mức độ n , và q là kích thước của lĩnh vực hệ số. qnp(x)Fq[x]nq

2
Các thuật toán phát hiện chu kỳ của Floyd cũng như các thuật toán phát hiện chu trình của Brent đều là những cách hiệu quả để phát hiện các chu kỳ. Cả hai sẽ trả về một số L của giai đoạn và khi bạn có được điều đó, bạn có thể tính hệ số L và xem đâu là yếu tố nhỏ nhất là một khoảng thời gian.
xdavidliu

Câu trả lời:


12

Nếu bạn tự giới hạn mình trong LCG PRNG chu kỳ đầy đủ thì câu trả lời rất dễ, theo định nghĩa, nó chỉ đơn giản là m . m

Để tìm thời gian của LCG PRNG không chu kỳ đầy đủ cho một hạt giống nhất định, bạn chỉ cần đếm số lần lặp của PRNG cho đến khi nó tạo ra giá trị hạt giống một lần nữa.

Từ trang wikipedia được tham chiếu :

Chiều dài thời gian

Thời gian của một LCG chung là nhiều nhất là m , và đối với một số lựa chọn ít hơn thế nhiều. Với điều kiện c là khác không, LCG sẽ có một khoảng thời gian đầy đủ cho tất cả các giá trị hạt giống khi và chỉ khi :

Trong khi LCG có khả năng tạo ra số giả ngẫu nhiên , điều này cực kỳ nhạy cảm với sự lựa chọn của các tham số c , mmột .

Trong lịch sử, các lựa chọn kém đã dẫn đến việc triển khai LCG không hiệu quả. Một ví dụ đặc biệt minh họa cho điều này là RANDU được sử dụng rộng rãi vào đầu những năm 1970 và dẫn đến nhiều kết quả hiện đang bị nghi ngờ vì việc sử dụng LCG kém này.

Tại sao bạn muốn sử dụng một trình tạo chu kỳ đầy đủ

Nếu bạn không giới hạn bản thân với các PRNG LCG đầy đủ thì bạn đang gặp rủi ro rất lớn .

Nếu bạn không biết rằng LCG đã cho là chu kỳ đầy đủ thì bạn có thể kết thúc với một trình tạo với số lượng các chuỗi khác nhau tùy ý, một số trong đó có thể nhỏ một cách đáng xấu hổ và có sự ngẫu nhiên kinh khủng, thậm chí còn tệ hơn cả trình tạo RANDU khét tiếng .

Bạn thực sự không muốn phải kiểm tra mọi giá trị hạt giống có thể để đảm bảo rằng nó tạo ra một chuỗi đủ dài cho ứng dụng của bạn.

đọc thêm

Đối với một mồi tuyệt vời về trình tạo số ngẫu nhiên giả, tôi thực sự khuyên bạn nên đọc chương Công thức số về số ngẫu nhiên.


Điều đó là đúng, nhưng tôi không gò bó bản thân với LCG PRNG toàn thời gian ... Tôi tò mò về các lựa chọn kém của a, c và m, sao cho các luồng ngẫu nhiên không đạt được toàn bộ thời gian. Tôi muốn có thể biết trước thời hạn, đưa ra một số a, c và m, khoảng thời gian chắc chắn sẽ là gì. Tôi biết rằng nó được giới hạn trên bởi m, nhưng tôi đã tự hỏi liệu chúng ta có thể làm tốt hơn thế không và có được khoảng thời gian chính xác.
Paul

Tôi không nghĩ rằng đây là một vấn đề về kỹ thuật: câu hỏi là "làm thế nào để xác định thời gian của LCG với các thông số tùy ý", trong khi câu trả lời này cho biết "không sử dụng LCG tùy ý, luôn sử dụng LCG toàn thời gian, và giả sử bạn làm như vậy , câu trả lời cho câu hỏi của bạn sẽ là khoảng thời gian tối đa có thể, theo định nghĩa ". Lập luận cho việc sử dụng LCF toàn thời gian được nêu trong câu trả lời này là hoàn toàn thuyết phục, nhưng vấn đề là đó không phải là tất cả những gì câu hỏi được hỏi.
xdavidliu

Xin lỗi @xdavidliu nhưng tôi không thấy nhận xét mới của bạn giúp tôi cải thiện câu trả lời của mình như thế nào. Bạn đã chú ý rằng tôi không thực sự trả lời câu hỏi, tôi đã chỉnh sửa câu trả lời của mình để khắc phục điều đó, và sau đó cho bạn biết theo cách mà tôi nghĩ có thể khiến bạn mỉm cười (nếu bạn là một người hâm mộ Futurama). Tôi không thấy bất cứ điều gì cần phải nói thêm.
Đánh dấu gian hàng

Lưu ý rằng trên trao đổi ngăn xếp, các bình luận không dành cho các cuộc thảo luận mở rộng, cho việc sử dụng Trò chuyện Khoa học tính toán . Nhận xét là để giúp cải thiện câu hỏi và câu trả lời, và gây mất tập trung, vì vậy chúng tôi cố gắng giữ chúng ở mức tối thiểu. Bình luận nên được coi là phù du, bất kỳ bình luận nào không còn tích cực giúp cải thiện một câu hỏi hoặc câu trả lời có thể bị xóa bất cứ lúc nào để dọn dẹp một bài đăng.
Đánh dấu gian hàng
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.