2013-07-10 44 views

Trả lời

10

Một cách sử dụng này là nó cho phép bạn tạo lại kết quả của chương trình trong tương lai.

Ví dụ, tôi muốn tính một biến ngẫu nhiên cho mỗi hàng trong cơ sở dữ liệu. Tôi muốn chương trình có thể tái sản xuất, nhưng tôi muốn sự ngẫu nhiên giữa các hàng. Để làm điều này, tôi đặt hạt giống số ngẫu nhiên thành khóa chính của mỗi hàng. Bằng cách đó, khi tôi chạy chương trình một lần nữa, tôi đã nhận được kết quả tương tự, nhưng giữa các hàng, biến ngẫu nhiên là giả ngẫu nhiên.

+2

Ồ - và ngoài ra, bạn có thể đặt hạt giống ngẫu nhiên thành thứ gì đó thật sự ngẫu nhiên - như thể bạn có bộ đếm geiger nằm xung quanh. Bạn có thể đặt hạt giống mỗi giây hoặc thường xuyên, bạn có thể đo nguồn ngẫu nhiên thực sự của bạn, sau đó lặp lại nó cho đến khi bạn có thể đặt lại nó. – Owen

+0

cảm ơn rất nhiều Owen !! – nilashan

3

Hạt giống được sử dụng để khởi tạo trình tạo số ngẫu nhiên. Một hạt giống được sử dụng để thiết lập điểm bắt đầu để tạo ra một loạt các số ngẫu nhiên. Hạt giống đặt trình tạo thành một điểm khởi đầu ngẫu nhiên. Một hạt giống duy nhất trả về một chuỗi số ngẫu nhiên duy nhất.

This có thể trợ giúp.

Trình tạo số giả ngẫu nhiên (PRNG), còn được gọi là trình tạo bit ngẫu nhiên xác định DRBG, là một thuật toán tạo chuỗi số xấp xỉ các thuộc tính của các số ngẫu nhiên. Trình tự không thực sự ngẫu nhiên ở chỗ nó được xác định hoàn toàn bởi một tập hợp tương đối nhỏ các giá trị ban đầu, được gọi là trạng thái PRNG, bao gồm một hạt giống thật sự ngẫu nhiên.

+0

cảm ơn rất nhiều 'The New Idiot' – nilashan

3

tôi có thể thấy hai lý do để làm điều này:

  1. Bạn có thể tạo một dòng ngẫu nhiên tái sản xuất. Đối với một hạt giống cho trước, kết quả tương tự sẽ được trả về từ các cuộc gọi liên tiếp đến (giống nhau) nextX phương pháp.

    Nếu hai trường hợp ngẫu nhiên được tạo ra với các hạt giống nhau, và cùng một chuỗi của phương pháp các cuộc gọi được thực hiện cho mỗi, họ sẽ tạo ra và trở về trình tự giống hệt nhau của số

  2. Bạn cảm thấy , vì lý do nào đó, hạt giống của bạn có chất lượng cao hơn nguồn mặc định (mà tôi đoán là có nguồn gốc từ thời gian hiện tại trên PC của bạn).

+3

Về 2: * Thời gian hiện tại * '^' * liên tục * '+' * truy cập *, nếu tôi nhớ chính xác. Hằng số ở đó để sửa các hạt xấu với entropy thấp; bộ đếm để ngăn chặn hai cá thể 'Random' được tạo đồng thời trong các chuỗi khác nhau để chia sẻ cùng một hạt giống. Nó không phải là chất lượng mô phỏng của quản lý hạt giống nhưng hoạt động tốt đủ cho phần lớn các trường hợp không phải là hardcore. – Joey

+0

cảm ơn rất nhiều Duncan Jones !! – nilashan

3

Hạt giống cụ thể sẽ luôn cung cấp cùng một chuỗi số "ngẫu nhiên". Vì vậy, chỉ có 2^64 trình tự khác nhau trong Random! Bên cạnh đó setSeed cũng có thể sử dụng một hàm tạo với một hạt giống. Khi không sử dụng hạt giống sử dụng đồng hồ của máy tính để chọn hạt nhân thực sự ngẫu nhiên.

Vì vậy, trong trường hợp thông thường không sử dụng hạt giống cụ thể, hàm tạo Random()khôngsetSeed. Đặc biệt là hạn chế setSeed(System.currentTimeMillis()).

Để gỡ lỗi phụ thuộc vào dữ liệu, nơi bạn muốn lặp lại cùng một dữ liệu giả ngẫu nhiên, hãy sử dụng một hạt giống cụ thể.

Không cần phải lo lắng liệu chuỗi hạt giống/chuỗi cụ thể có thể được nhận diện hay không và các con số tiếp theo được dự đoán, vì phạm vi lớn của hạt giống.

Hàm tạo mặc định sử dụng System.nanoTime() (bị xáo trộn một cách thích hợp), là hàm OS chi phí, khi nói về hàng nghìn new Random().

+0

cảm ơn rất nhiều Joop Eggen !! – nilashan

1

Một số người khác đã đề cập đến khả năng tái sản xuất. Khả năng tái tạo là trung tâm của việc gỡ lỗi, bạn cần có khả năng tái tạo các trường hợp xảy ra lỗi.

Sử dụng quan trọng khác về khả năng tái sản xuất là bạn có thể chơi một số trò chơi thống kê để giảm sự thay đổi của một số ước tính. Xem Wikipedia's Variance Reduction article để biết thêm chi tiết, nhưng trực giác như sau. Giả sử bạn đang cân nhắc hai bố cục khác nhau cho ngân hàng hoặc cửa hàng tạp hóa. Bạn không thể xây dựng cả hai và xem cái nào hoạt động tốt hơn, vì vậy bạn sử dụng mô phỏng. Bạn biết từ xếp hàng lý thuyết rằng kích thước của dòng và sự chậm trễ của khách hàng kinh nghiệm một phần là do cách bố trí, nhưng cũng một phần là do sự thay đổi về thời gian đến, nhu cầu tải, vv, do đó bạn sử dụng ngẫu nhiên trong hai mô hình của bạn. Nếu bạn chạy các mô hình hoàn toàn độc lập và thấy rằng các đường lớn hơn trong bố cục 1 so với bố cục 2, có thể do bố cục hoặc có thể do bố cục 1 vừa xảy ra để có được nhiều khách hàng hơn hoặc kết hợp giao dịch đòi hỏi khắt khe hơn do sự may mắn của trận hòa. Tuy nhiên, nếu cả hai hệ thống đều sử dụng cùng một nhóm khách hàng đến cùng một thời điểm và có cùng yêu cầu giao dịch, thì đó là so sánh "công bằng" hơn. Sự khác biệt bạn quan sát có nhiều khả năng là do bố cục. Bạn có thể thực hiện điều này bằng cách tái tạo sự ngẫu nhiên trong cả hai hệ thống - sử dụng cùng một hạt giống và đồng bộ hóa sao cho cùng một số ngẫu nhiên được sử dụng cho cùng một mục đích trong cả hai hệ thống.

+0

Bạn được chào đón! – pjs

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