Cách tốt nhất để hạn chế các giá trị của PRNG thành một phạm vi nhỏ hơn là gì? Nếu bạn sử dụng mô-đun và số lượng tối đa cũ không chia hết cho số lượng tối đa mới, bạn thiên vị về phía 0
đến (old_max - new_max - 1)
. Tôi cho rằng cách tốt nhất sẽ là một cái gì đó như thế này (đây là điểm nổi, không toán số nguyên)Phương pháp thích hợp để hạn chế số pseduo-ngẫu nhiên thành một phạm vi nhỏ hơn là gì?
random_num = PRNG()/max_orginal_range * max_smaller_range
nhưng một cái gì đó trong ruột của tôi làm cho tôi hỏi phương pháp đó (có thể nổi thực hiện điểm và đại diện khác biệt?).
Trình tạo số ngẫu nhiên sẽ tạo ra các kết quả nhất quán trên nền tảng phần cứng và phần mềm, và hạn chế cũng cần phải có.
Tôi có quyền nghi ngờ mã giả ở trên (nhưng không phải vì lý do tôi nghĩ). Của MichaelGG answer khiến tôi suy nghĩ về vấn đề theo một cách khác. Tôi có thể mô hình hóa nó bằng cách sử dụng các số nhỏ hơn và kiểm tra mọi kết quả. Vì vậy, giả sử chúng ta có một PRNG tạo ra một số ngẫu nhiên từ 0 đến 31 và bạn muốn phạm vi nhỏ hơn là 0 đến 9. Nếu bạn sử dụng modulus bạn thiên về 0, 1, 2 và 3. Nếu bạn sử dụng mã giả ở trên bạn thiên về 0, 2, 5, và 7. Tôi không nghĩ rằng có thể có một cách tốt để lập bản đồ một bộ vào khác. Điều tốt nhất mà tôi đã đưa ra cho đến nay là tạo lại các số ngẫu nhiên lớn hơn old_max/new_max
, nhưng điều đó cũng có vấn đề sâu sắc (giảm thời gian, thời gian để tạo số mới cho đến khi một số nằm trong phạm vi bên phải, v.v.) .
Tôi nghĩ rằng tôi có thể đã tiếp cận một cách ngây thơ vấn đề này. Nó có thể là thời gian để bắt đầu một số nghiên cứu nghiêm túc vào văn học (ai đó đã phải giải quyết điều này trước đây).
Bạn cũng có thể xem java.util.Random.nextInt (int) sử dụng một phương pháp khá thông minh để hạn chế kết quả mà không đưa ra sự sai lệch. Đã cho tôi biết một ngày để hiểu lý do tại sao nó hoạt động, mặc dù :) – Joey
Nguồn đó sẵn có ở đâu (Xin lỗi, tôi không phải là người lập trình java, tôi không biết gì về API) – DevinB
Kiểm tra ngẫu nhiên không phải là ý tưởng hay, nhưng nếu tôi giảm số lượng thành một thứ có thể quản lý được, tôi có thể kiểm tra mọi kết quả (xem ở trên), và mã giả trên thực tế là thiên vị. Bây giờ tôi phải đi đào qua các bài báo mà tôi không hiểu, thở dài. –