Chúng tôi đang gặp khó khăn trong việc tải các tài nguyên bên ngoài có trên trang web.

If you're behind a web filter, please make sure that the domains *.kastatic.org and *.kasandbox.org are unblocked.

Nội dung chính

Phân phối tùy chỉnh của các số ngẫu nhiên

Không phải lúc nào ta cũng muốn sử dụng phân phối chuẩn của các số ngẫu nhiên. Giả sử bạn đang đi loanh quanh tìm nhà hàng. Đi xung quanh một khu vực theo lộ trình ngẫu nhiên có vẻ là cách hợp lý để tìm đồ ăn, đặc biệt là khi bạn chưa biết nhà hàng ở đâu và phải tìm kiếm ngẫu nhiên cho đến khi thấy. Một vấn đề sẽ xảy ra là người đi bộ theo lộ trình ngẫu nhiên quay lại vị trí đã đến rất nhiều lần (hiện tượng "tăng kích thước mẫu" oversampling). Một cách để phòng tránh vấn đề trên là thực hiện những bước có khoảng cách lớn. Cách này cho phép người đi bộ đi theo lộ trình ngẫu nhiên xung quanh một địa điểm cụ thể, đồng thời định kỳ nhảy một bước rất xa để giảm thiểu hiện tượng tăng kích thước mẫu. Để triển khai biến thể này của lộ trình ngẫu nhiên (có tên gọi là chuyến bay Lévy), ta cần có một tập hợp xác suất tùy chỉnh. Nguyên tắc sau không phải là nguyên tắc chính xác của chuyến bay Lévy nhưng vẫn có thể áp dụng trong trường hợp này: bước càng dài thì xác suất được chọn càng thấp; bước càng ngắn thì xác suất được chọn càng cao.
Trên thực tế, ở các bài đọc trước, ta đã tạo phân phối xác suất tùy chỉnh bằng cách sử dụng mảng (một số giá trị trong mảng trùng lặp để tăng xác suất được chọn) hoặc bằng cách kiểm tra kết quả của hàm random(). Ta có thể triển khai nguyên tắc chuyến bay Lévy bằng cách đặt điều kiện chỉ có 1% xác suất người đi bộ sẽ di chuyển bước lớn hơn:
var r = random(1);
// A 1% chance of taking a large step
if (r < 0.01) {
  xstep = random(-100, 100);
  ystep = random(-100, 100);
} else {
  xstep = random(-1, 1);
  ystep = random(-1, 1);
}
Tuy nhiên, cách này làm giảm xác suất của các phương án khác. Điều gì sẽ xảy ra nếu chúng ta áp dụng một quy tắc tổng quát hơn là: số càng lớn thì xác suất được chọn càng cao? Số 3,145 sẽ có xác suất được chọn cao hơn 3,144, cho dù sự chênh lệch là rất nhỏ. Nói cách khác, nếu x là số ngẫu nhiên thì ta có thể tìm được xác suất trên trục y với y = x.
Hình I.4
Nếu chúng ta tạo được phân phối số ngẫu nhiên dựa vào biểu đồ trên, ta sẽ có thể áp dụng phương pháp tương tự đối với bất kỳ đường cong nào có công thức.
Một phương pháp để hiện thực hóa mong muốn trên là chọn hai số ngẫu nhiên thay vì một số. Số ngẫu nhiên đầu tiên đơn giản là một số bất kỳ. Số ngẫu nhiên thứ hai có thể được gọi là "số ngẫu nhiên để kiểm tra điều kiện". Số này cho ta biết nên dùng số đầu tiên hay bỏ số đó đi và chọn một số khác. Các số dễ dàng thỏa mãn điều kiện sẽ được chọn nhiều hơn, các số khó thỏa mãn điều kiện sẽ được chọn ít hơn. Dưới đây là các bước cụ thể (tạm thời ta chỉ xét giá trị ngẫu nhiên trong khoảng từ 0 đến 1):
  1. Chọn một số ngẫu nhiên: R1
  2. Tính xác suất P để R1 đủ điều kiện. Thử: P = R1.
  3. Chọn một số ngẫu nhiên khác: R2
  4. Nếu R2 nhỏ hơn P thì ta đã tìm được số R1!
  5. Nếu R2 không nhỏ hơn P, quay lại bước 1 và làm lại từ đầu.
Ở đây, ta đang giả sử xác suất một số ngẫu nhiên đủ điều kiện bằng chính số ngẫu nhiên đó. Ví dụ, ta chọn số ngẫu nhiên R1 là 0,1, tức là xác suất R1 đủ điều kiện là 10%. Nếu ta chọn số ngẫu nhiên R1 là 0,83 thì xác suất R1 đủ điều kiện là 83%. Số càng lớn thì xác suất ta sẽ sử dụng số đó càng cao.
Dưới đây là hàm (được đặt tên theo phương pháp Monte Carlo, phương pháp này được đặt tên theo sòng bạc Monte Carlo) triển khai thuật toán trên và trả về một giá trị ngẫu nhiên trong khoảng từ 0 đến 1. Sau đó, chương trình sử dụng các giá trị để xác định kích thước của hình elip. Dĩ nhiên là bạn hoàn toàn có thể sử dụng các giá trị đó cho những mục đích khác.
Khóa học "Mô phỏng tự nhiên" này được biên soạn dựa trên cuốn "The Nature of Code" (tạm dịch: Bản chất của lập trình) của tác giả Daniel Shiffman, được sử dụng theo giấy phép Creative Commons Attribution-NonCommercial 3.0 Unported License.

Tham gia cuộc thảo luận?

Chưa có bài đăng nào.
Bạn có hiểu Tiếng Anh không? Bấm vào đây để thấy thêm các thảo luận trên trang Khan Academy Tiếng Anh.