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

Xác suất và phân phối không đều

Trong lĩnh vực đồ họa máy tính, việc tạo hệ thống một cách ngẫu nhiên thường là công việc đơn giản nhất. Tuy nhiên, trong khuôn khổ các bài học này, chúng ta cần xây dựng hệ thống được mô phỏng theo những gì chúng ta thấy trong tự nhiên. Phụ thuộc vào chế độ ngẫu nhiên mặc định không phải là một giải pháp hiệu quả để giải quyết vấn đề về thiết kế, đặc biệt là vấn đề khi mô phỏng liên quan đến tự nhiên hoặc trông giống tự nhiên.
Với một vài thủ thuật, chúng ta có thể thay đổi cách sử dụng hàm random() để tạo ra phân phối số ngẫu nhiên "không đồng đều". Kỹ thuật này sẽ có ích trong suốt khóa học bởi vì ta sẽ cần xử lý một con số trong nhiều tình huống khác nhau. Ví dụ, với thuật toán di truyền, chúng ta cần một phương pháp để thực hiện "chọn lọc", tức là chọn ra thành viên trong quần thể có ADN nên được truyền cho thế hệ tiếp theo. Bạn có nhớ lý thuyết cho rằng cá thể sống sót là cá thể phù hợp nhất (survival of the fittest) không? Giả sử chúng ta có một quần thể khỉ đang tiến hóa. Không phải con khỉ nào cũng có cơ hội sinh sản ngang nhau. Để mô phỏng thuyết tiến hóa của Darwin, chúng ta không thể chọn ngẫu nhiên hai con khỉ để làm bố mẹ. Chúng ta cần những cá thể "phù hợp" hơn để tăng khả năng được chọn. Ta sẽ cần xác định "xác suất để trở thành cá thể phù hợp nhất". Ví dụ, xác suất được chọn để sinh sản của một con khỉ đặc biệt nhanh nhẹn và khỏe mạnh có thể lên tới 90%, trong khi xác suất tương ứng của con khỉ yếu hơn chỉ vào khoảng 10%.
Hãy cùng xem xét lại các nguyên tắc cơ bản của xác suất. Đầu tiên, chúng ta sẽ xét xác suất của biến cố đơn lẻ, tức là khả năng một biến cố nhất định xảy ra.
Nếu bạn có một hệ thống với một số kết quả có thể xảy ra mỗi kết quả có cùng khả năng xảy ra thì xác suất xảy ra một biến cố nhất định bằng với số kết quả đủ điều kiện được coi là biến cố đó chia cho tổng số kết quả có thể xảy ra. Một ví dụ đơn giản đó là tung đồng xu. Chỉ có hai kết quả có thể xảy ra: mặt ngửa hoặc mặt sấp. Chỉ có một cách duy nhất để tung được mặt ngửa. Vì vậy, xác suất để tung được mặt ngửa là 1 chia 2 và bằng 1/2 hoặc 50%.
Giả sử ta có một bộ bài 52 lá. Xác suất để rút được quân Át từ bộ bài đó là:
số quân Át / tổng số lá bài = 4 / 52 = 0,077 = ~ 8%
Xác suất để rút được quân bài chất Rô là:
số quân Rô / tổng số lá bài = 13 / 52 = 0,25 = 25%
Chúng ta cũng có thể tính được xác suất của biến cố với nhiều hành động xảy ra theo trình tự bằng cách nhân các xác suất riêng lẻ của từng biến cố với nhau.
Như vậy, xác suất để tung đồng xu được mặt ngửa ba lần liên tiếp là:
(1/2) * (1/2) * (1/2) = 1/8 (hay 0,125)
Ta có thể diễn giải là, cứ 8 lần thì sẽ có 1 lần tung được mặt ngửa ba lần liên tiếp (mỗi “lần” tương ứng với ba lần tung).
Nếu bạn muốn ôn tập về xác suất trước khi tiếp tục bài học, hãy xem lại các bài biến cố phức hợpxác suất độc lập.
Có một số cách để ta sử dụng hàm random() kết hợp với xác suất. Ta có thể khai báo một mảng mới chứa các số cần chọn, một vài số được lặp lại. Sau đó, chọn số ngẫu nhiên từ mảng đó và tạo biến cố tùy theo kết quả lựa chọn.
Xác suất để chương trình trên in giá trị 1 là 40%, giá trị 2 là 20% và giá trị 3 là 40%.
Chúng ta cũng có thể yêu cầu trả về một số ngẫu nhiên (ví dụ như một số thập phân ngẫu nhiên trong khoảng từ 0 đến 1) và cho phép một biến cố xảy ra chỉ khi số ngẫu nhiên trả về nằm trong khoảng nhất định. Hãy xem ví dụ dưới đây và tiếp tục nhấn vào nút khởi động lại cho đến khi số được chọn ngẫu nhiên nhỏ hơn ngưỡng điều kiện:
Phương pháp này có thể áp dụng để cho ra nhiều kết quả đầu ra hơn. Giả sử kết quả A có xác suất xảy ra là 60%, kết quả B là 10% và kết quả C là 30%. Chúng ta sẽ triển khai theo hướng chọn một số ngẫu nhiên và xem số đó nằm trong khoảng nào.
  • Từ 0,00 đến 0,60 (60%) –> Kết quả A
  • Từ 0,60 đến 0,70 (10%) –> Kết quả B
  • Từ 0,70 đến 1,00 (30%) –> Kết quả C
Hãy nhấn nút khởi động lại để xem tần suất nhận được các kết quả khác nhau có chính xác không:
Chúng ta có thể áp dụng phương pháp trên để tạo đối tượng random walker có xu hướng di chuyển sang phải. Xác suất các hướng di chuyển của đối tượng Walker có thể như sau:
  • Xác suất di chuyển lên: 20%
  • Xác suất di chuyển xuống: 20%
  • Xác suất di chuyển sang trái: 20%
  • Xác suất di chuyển sang phải: 40%
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.