Mô Hình Xác Suất Bảo Đảm 10 Lần Rút Liên Tiếp
Trong các trò chơi trực tuyến, cơ chế “rút thẻ” hay “mở rương” mang tính may rủi luôn là yếu tố thu hút người chơi. Ban đầu, các nhà thiết kế game chỉ đơn giản cài đặt xác suất rút thẻ một cách ngẫu nhiên. Ví dụ, tỷ lệ ra thẻ cam (thẻ hiếm) là 10%, nghĩa là mỗi lần rút, người chơi có 90% nhận thẻ trắng và 10% nhận thẻ cam.
Tuy nhiên, với những game thủ nạp tiền “khủng” (đại gia), trải nghiệm của họ cần được chăm sóc kỹ lưỡng. Nếu gặp phải chuỗi rút xui xẻo liên tục không ra thẻ hiếm, họ có thể “tức giận gỡ game”. Hãy tính thử: Nếu một đại gia rút 20 lần liên tiếp không ra thẻ cam, xác suất việc này xảy ra là bao nhiêu? Với xác suất 0.9 cho mỗi lần thất bại, xác suất thất bại 20 lần liên tiếp là 0.9^20 ≈ 12.2%. Con số này không hề nhỏ - trung bình cứ 8 đại gia thì có 1 người gặp phải tình huống này, dẫn đến việc mất đi 1/8 nguồn thu của game.
Để giải quyết vấn đề này, các game thường áp dụng cơ chế “bảo đảm”. Một trong những cơ chế phổ biến là quy tắc “10 rút liên tiếp”: Khi người chơi mua gói rút 10 lần, hệ thống đảm bảo sẽ có ít nhất 1 thẻ cam trong đó. Cách thực hiện khá đơn giản: Tạo ra 10 thẻ theo xác suất gốc, nếu không có thẻ cam thì thêm vào 1 thẻ.
Nhưng làm thế nào để áp dụng cơ chế bảo đảm này cho cả những lần rút đơn lẻ? Nói cách khác, làm sao đảm bảo bất kỳ người chơi nào sau khi rút 10 lần liên tiếp cũng sẽ nhận được ít nhất 1 thẻ cam?
Cần lưu ý rằng nếu muốn duy trì tỷ lệ thẻ cam tổng thể là 10% (ví dụ 1,000 thẻ cam trong 10,000 thẻ), đồng thời đảm bảo mỗi 10 thẻ đều có ít nhất 1 thẻ cam, hệ thống sẽ không còn ngẫu nhiên thực sự - phải tuân theo quy luật cố định: Cứ 9 thẻ trắng là đến 1 thẻ cam.
Vì vậy, nếu muốn vừa giữ tính ngẫu nhiên vừa có cơ chế bảo đảm 10 lần, tỷ lệ thẻ cam thực tế phải cao hơn 10%. Một game trước đây của chúng tôi đã áp dụng giải pháp đơn giản: Ghi nhận số lần liên tiếp không rút được thẻ cam, nếu vượt quá 9 lần thì chắc chắn sẽ cho ra 1 thẻ. Tuy nhiên, giải pháp này phá vỡ trải nghiệm tự nhiên của người chơi, đồng thời dễ gây lỗi hệ thống - từng xảy ra trường hợp phát nhầm vật phẩm hiếm do lỗi lập trình.
Vì sao giải pháp này không tự nhiên? Nếu xác suất là 10%, sau khi nhận được 1 thẻ cam, xác suất nhận thẻ cam tiếp theo vẫn là 10%. Xác suất nhận thẻ cam ở lần thứ 2 sau 1 thẻ trắng là 0.9×0.1, ở lần thứ 3 sau 2 thẻ trắng là 0.9²×0.1… Tổng xác suất cho các trường hợp có từ 10 thẻ trắng trở lên là khoảng 35%.
Dãy số biểu diễn số thẻ trắng giữa 2 lần nhận thẻ cam tuân theo phân bố mũ - phân bố mô tả khoảng thời gian giữa các sự kiện ngẫu nhiên độc lập. Khi ép tất cả các giá trị lớn hơn 9 thành 9, phân bố này bị méo mó, làm mất đi tính tự nhiên.
Để tạo dãy số tuân theo phân bố mũ, có thể dùng công thức:
|
|
Với rate=10.
Nếu muốn thêm cơ chế bảo đảm 10 lần, chỉ cần sửa đổi:
|
|
Hoặc thêm giới hạn vòng lặp:
|
|
Khi áp dụng bảo đảm 10 lần, xác suất thực tế tăng lên khoảng 21%. Nếu muốn duy trì tỷ lệ 10%, cần đặt giới hạn bảo đảm ở mức 23 lần.
Câu hỏi phỏng vấn thú vị: Giả sử thẻ cam có xác suất 10%, mỗi lần rút mất 1.000đ. Gói 10 rút liên tiếp với giá 10.000đ sẽ đảm bảo có 1 thẻ cam (nếu không có sẽ đổi 1 thẻ trắng thành cam). Nếu chỉ tính giá trị thẻ cam, gói này đáng giá bao nhiêu?