Vòng quay có ngẫu nhiên không?
Có. Múi trúng được chọn ngay khoảnh khắc bạn bấm, từ nguồn số ngẫu nhiên mật mã của trình duyệt. Đây là cách nó hoạt động và cách bạn tự kiểm tra.
Vòng quay này ngẫu nhiên: mỗi lượt quay rút một số mới từ crypto.getRandomValues, nguồn ngẫu nhiên mật mã có sẵn trong trình duyệt, và chỉ số đó quyết định múi nào thắng. Quyết định diễn ra ngay khoảnh khắc bạn bấm, trước khi vòng quay chuyển động, và không có gì trong hiệu ứng, thời gian hay các kết quả trước đó thay đổi được nó. Phần còn lại của trang này trình bày từng bước và kết thúc bằng một công cụ mô phỏng để bạn tự kiểm chứng.
Chuyện gì xảy ra khi bạn bấm quay
Ba việc diễn ra theo thứ tự, và thứ tự mới là điểm quan trọng. Một, trình duyệt đưa ra một số ngẫu nhiên và đoạn mã dùng nó để chọn một múi. Hai, đoạn mã tính một góc dừng bên trong múi đó và cộng thêm vài vòng quay đầy đủ. Ba, vòng quay chuyển động từ vị trí hiện tại đến góc đó, chậm dần theo một đường cong cố định cho đến khi dừng.
- 1Múi trúng được chọn ngay khoảnh khắc bạn bấm, bằng bộ tạo số ngẫu nhiên mật mã của trình duyệt.
- 2Vòng quay quay nhiều vòng đầy đủ rồi chậm dần theo một đường cong cố định về múi đó.
- 3Kim dừng bên trong múi, cách xa mép, nên không bao giờ có chuyện hòa.
Vì vậy lượt quay bạn đang xem là phần diễn lại một quyết định đã được đưa ra. Nếu bạn có thể dừng hiệu ứng ở khung hình ngay sau khi bấm và đọc biến chứa múi đã chọn, nó đã nói sẵn cái tên sắp thắng. Vòng quay không "quyết định khi chậm dần", và không có thời điểm nào trong lượt quay mà may rủi còn tham gia. Bấm tiếp trong lúc đang quay không có tác dụng; lần rút kế tiếp chỉ diễn ra khi bạn bắt đầu lượt quay tiếp theo.
Số ngẫu nhiên đến từ đâu
Trình duyệt có hai cách lấy số ngẫu nhiên. Math.random là cách thông thường, nhanh và đủ dùng cho trò chơi, nhưng đó là dãy giả ngẫu nhiên mà trình duyệt không cam kết là không thể đoán trước. crypto.getRandomValues là cách còn lại: nó được cấp từ kho entropy của hệ điều hành, cùng nguồn dùng để tạo khóa mã hóa và mã phiên, và đó là cách vòng quay sử dụng.
Đoạn mã yêu cầu một số nguyên 32 bit không dấu, tức một số từ 0 đến 4.294.967.295, rồi chia cho 4.294.967.296. Kết quả là một phân số từ 0 đến nhỏ hơn 1, trong đó mọi giá trị có khả năng như nhau. Nếu một trình duyệt rất cũ không có nguồn mật mã nào, đoạn mã sẽ lùi về Math.random thay vì từ chối quay, nhưng mọi trình duyệt hiện tại trên máy tính và điện thoại đã hỗ trợ crypto.getRandomValues từ nhiều năm, nên trên thực tế phương án dự phòng không bao giờ chạy.
Mỗi lượt quay rút một phân số, và rút thêm một phân số thứ hai chỉ để chọn kim nên nằm ở đâu trong múi thắng. Không phân số nào được dùng lại, lưu hay gửi đi đâu. Phần mô phỏng ở bên dưới trang gọi đúng hàm đó, và đó là lý do kết quả của nó là một đại diện công bằng cho vòng quay thật.
Số ngẫu nhiên biến thành múi trúng như thế nào
Hãy coi vòng quay là một đường tròn 360 độ với kim cố định ở phía trên. Với tám mục bằng nhau, mỗi múi rộng 45 độ. Nhân phân số ngẫu nhiên với 360 là bạn có một góc; chia góc đó cho 45 và làm tròn xuống là bạn có múi. Phân số 0,564 thành 203 độ, tức múi số năm, đếm từ kim theo chiều kim đồng hồ.
Vòng quay là một đường tròn 360°. Với 8 mục bằng nhau, mỗi múi rộng 45°. Lần rút ngẫu nhiên cho ra một góc, và múi trúng chỉ là góc đó chia cho độ rộng một múi.
203° ÷ 45° = 4.51 → múi 5
Mục có trọng số làm đổi kích thước múi chứ không đổi phương pháp. Một mục viết là Phở*3 có trọng số 3 và mục thường có trọng số 1, nên với Phở và ba mục thường thì tổng là 6 và múi của Phở chiếm 3 phần sáu vòng tròn, tức 180 độ. Đoạn mã duyệt qua các mục, cộng dồn trọng số cho đến khi tổng vượt số ngẫu nhiên nhân tổng trọng số, và mục nơi nó dừng là mục thắng. Múi vẽ trên màn hình được tính kích thước bằng đúng phép tính đó, vì thế xác suất bạn thấy chính là xác suất bạn nhận được. Mục có trọng số 0 không có góc nào cả và không bao giờ thắng, dù vẫn hiện trong danh sách.
Vì sao hiệu ứng không thể đổi kết quả
Khi múi đã được chọn, đoạn mã chọn một góc dừng ở khoảng 15% đến 85% bề ngang của múi, nên kim không bao giờ dừng trên đường ranh giới và không bao giờ có chuyện hòa phải xử lý. Sau đó nó cộng thêm các vòng nguyên: bốn cho lượt quay Ngắn, bảy cho Vừa, mười một cho Dài. Vòng quay đi từ góc hiện tại đến mục tiêu theo một đường cong giảm tốc, nhanh lúc đầu rồi chậm đều, và dừng đúng ở mục tiêu.
Đường cong đó luôn có hình dạng như nhau. Một lượt quay dài không "ngẫu nhiên hơn" một lượt ngắn; đó là cùng một quyết định với nhiều vòng trang trí hơn phía trước. Tiếng lách cách khi kim lướt qua mỗi mép múi và pháo giấy ở cuối do hiệu ứng tạo ra, không phải do bộ chọn, và tắt chúng đi không thay đổi gì về xác suất. Với các vòng quay có hơn 200 mục cũng vậy, khi trang thay vòng quay vẽ bằng một danh sách lăn: mục tiêu vẫn được chọn trước và đoạn lăn được canh thời gian để dừng đúng ở đó.
Vòng quay có thể bị gian lận không?
Chỉ theo những cách bạn nhìn thấy được. Xác suất của vòng quay này do danh sách quyết định và không gì khác, mà danh sách nằm trong một ô văn bản ngay trước mặt bạn. Nếu một cái tên xuất hiện hai lần, nó có hai múi. Nếu nó mang *3, nó có phần của ba múi. Cả hai đều hiện trên vòng quay thành vùng to hơn hoặc lặp lại, và đều hiện thành chữ. Không có cài đặt nào làm một múi thắng nhiều hơn mà không đổi kích thước của nó, và cũng không có máy chủ nào có thể thay thế kết quả.
Với một buổi bốc thăm, đây là cách kiểm tra bạn có thể đề nghị với khán giả: cho xem danh sách, cho thấy mỗi tên xuất hiện một lần và không có trọng số, và quay ở chế độ toàn màn hình. Nếu bạn tạo link chia sẻ, toàn bộ danh sách được mã hóa trong chính link, nên ai mở nó cũng thấy cùng một vòng quay và xác nhận rằng không có gì giấu giếm. Vòng quay tên được thiết kế đúng cho việc này, với Xóa người trúng để một tên đã bốc không thể bị bốc lại.
Có hai điều đôi khi bị nhầm là thiên lệch và đáng nêu tên. Chuỗi ngắn trông gồ ghề: tám tên và mười lượt quay hầu như luôn để sót một tên không được chọn và một tên được chọn hai lần, và đó chính là dáng vẻ của ngẫu nhiên ở số lượng nhỏ. Và mọi người nhớ những lượt quay hợp với một câu chuyện, như cùng một học sinh bị gọi hai ngày liền, mà quên hàng trăm lượt không như vậy. Phần mô phỏng bên dưới tồn tại để thay cả hai ấn tượng đó bằng số liệu đếm.
Tự kiểm tra: công cụ mô phỏng quay
Công cụ mô phỏng chạy bộ chọn thật, cùng hàm pickWeighted với cùng nguồn mật mã, bao nhiêu lần tùy bạn chọn, và chỉ bỏ qua hiệu ứng. Mỗi cột là một trong tám múi bằng nhau và đường nét đứt là số lần mà một cách chia hoàn toàn đều sẽ cho. Hãy thử 100 lượt trước, rồi 100.000, và xem các cột siết lại quanh đường kẻ khi số lần tăng.
Để biến hình ảnh thành con số, công cụ chạy kiểm định chi bình phương. Nó lấy số lần của mỗi múi, trừ đi số lần kỳ vọng, bình phương hiệu, chia cho số lần kỳ vọng, rồi cộng tám kết quả lại. Tổng nhỏ nghĩa là mọi cột đều gần đường kẻ; tổng lớn nghĩa là ít nhất một cột ở xa. Với 1.000 lượt, số lần kỳ vọng là 125 cho mỗi múi, và các cột từ khoảng 105 đến 145 là bình thường.
Giá trị p chuyển tổng đó thành một câu hỏi: nếu vòng quay hoàn toàn công bằng, nó cho ra một phân bố lệch ít nhất như thế này chỉ do may rủi thì thường xuyên đến đâu? Giá trị p bằng 0,30 nghĩa là một vòng quay công bằng làm vậy khoảng 30% số lần, chẳng có gì lạ. Dòng kết luận dùng ngưỡng quy ước 0,05. Từ ngưỡng đó trở lên, kết quả phù hợp với một vòng quay công bằng. Dưới ngưỡng, phân bố là loại mà một vòng quay công bằng cho ra ít hơn một lần trong hai mươi lần, đủ hiếm để đáng xem lại.
Dưới 0,05 không có nghĩa là vòng quay thiên lệch, và đây là chỗ mọi người hay hiểu sai. Theo định nghĩa, một trong hai mươi lần chạy công bằng rơi vào đó, nên nếu bạn bấm nút hai mươi lần thì nên kỳ vọng khoảng một cảnh báo. Vòng quay thiên lệch làm khác đi: nó thất bại hết lần này đến lần khác, và cùng một múi là múi nhô ra mỗi lần. Với tám múi, tổng chi bình phương phải vượt khoảng 14,1 thì giá trị p mới xuống dưới 0,05; một vòng quay lặng lẽ thiên về một múi dù chỉ vài phần trăm sẽ vượt mức đó trong mọi lần chạy 100.000 lượt và cho giá trị p thấp hơn 0,001 rất nhiều.
Nếu bạn muốn kiểm tra vòng quay thật thay vì công cụ mô phỏng, hãy mở bất kỳ vòng quay nào có danh sách ngắn, đặt Thời gian quay là Ngắn và quay một trăm lần. Tab Kết quả giữ mọi kết quả của phiên; sao chép nó, dán vào bảng tính và đếm. Bạn sẽ thấy cùng hành vi như các cột ở trên: số lần dao động quanh mức chia đều, lệch về hướng khác nhau mỗi phiên, và không bao giờ dồn vào một mục ưa thích.
Vòng quay may mắn ở trang chủ là bản đa dụng của mọi điều nói trên, có trọng số, vòng quay đã lưu và link chia sẻ. Nếu bạn chỉ cần một lựa chọn hai chiều công bằng, vòng quay có hoặc không xen kẽ Có và Không quanh vòng quay để hai đáp án luôn có xác suất giống hệt. Còn để bốc tên khi mỗi lượt chọn phải công bằng và được thấy là công bằng, vòng quay tên ghi lại mọi kết quả và xóa người trúng dần dần.
Câu hỏi thường gặp
Vòng quay này có thật sự ngẫu nhiên không?
Có. Mỗi lượt quay lấy một số từ crypto.getRandomValues, cùng nguồn ngẫu nhiên mà trình duyệt dùng cho khóa mã hóa, và chỉ số đó quyết định múi trúng. Hiệu ứng quay bắt đầu sau khi đã quyết định và chỉ đưa vòng quay đến múi đã chọn.
Vòng quay may mắn có thể bị gian lận không?
Không bằng bất cứ điều gì mà bạn không nhìn thấy. Cách duy nhất để đổi xác suất trên vòng quay này là thêm một mục nhiều lần hoặc gán trọng số như Tên*3, và cả hai đều hiện ra thành múi to hơn trên vòng quay và thành chữ trong danh sách. Không có cài đặt ẩn, không có máy chủ và không có tài khoản nào có thể thiên vị một mục.
Bấm lúc nào hay vòng quay quay bao lâu có quan trọng không?
Không. Số ngẫu nhiên được lấy đúng lúc bấm và múi trúng đã cố định từ đó. Cài đặt Thời gian quay chỉ đổi số vòng hiệu ứng quay trước khi đến nơi; Ngắn, Vừa và Dài đều dừng ở cùng một múi với cùng một lần rút.
Mục có trọng số thay đổi xác suất như thế nào?
Cơ hội của một mục bằng trọng số của nó chia cho tổng trọng số của danh sách. Với bốn mục trong đó một mục có trọng số 3, mục đó có 3 trên 6 phần, tức 50%, và múi của nó chiếm nửa vòng quay. Số ngẫu nhiên được đối chiếu với đúng các kích thước múi đó, nên hình vẽ và xác suất thật là một.
Giá trị p trong phần mô phỏng quay nghĩa là gì?
Đó là xác suất để một vòng quay hoàn toàn công bằng cho ra một phân bố số lần lệch ít nhất bằng cái bạn vừa thấy. Giá trị p từ 0,05 trở lên nghĩa là kết quả bình thường với vòng quay công bằng. Giá trị dưới 0,05 là khác thường nhưng chưa phải bằng chứng thiên lệch: khoảng một trên hai mươi lần chạy công bằng rơi vào đó do ngẫu nhiên, nên hãy chạy lại.
Làm sao để kiểm tra vòng quay thật chứ không phải phần mô phỏng?
Quay một vòng quay có vài mục từ một trăm lần trở lên rồi mở tab Kết quả, nơi giữ mọi kết quả của phiên. Sao chép danh sách và đếm từng mục. Số lần phải gần mức chia đều và lệch về những hướng khác nhau giữa các phiên, không bao giờ cứ lệch về cùng một mục.
Vòng quay có thể dừng ở đường ranh giữa hai múi không?
Không. Sau khi múi được chọn, góc dừng được đặt ở khoảng từ 15% đến 85% bề ngang của múi đó, nên kim luôn nằm rõ ràng bên trong múi. Cái rung nhẹ của kim khi lướt qua mép múi chỉ là hiệu ứng.
Các vòng quay khác
- Vòng quay có hoặc khôngĐể vòng quay quyết định: có, không, hoặc có thể.
- Vòng quay tênDán danh sách tên rồi chọn ngẫu nhiên một hay nhiều người.
- Chia nhóm ngẫu nhiênChia danh sách người thành các nhóm ngẫu nhiên.
- Vòng quay chữ cáiQuay vòng A–Z cho trò chơi và hoạt động trên lớp.
- Vòng quay sốChọn một số bất kỳ giữa hai giá trị.
- Vòng quay quốc giaQuay quả địa cầu và dừng ở một quốc gia ngẫu nhiên.
- Vòng quay gọi tên học sinhMười cách giáo viên dùng vòng quay ngẫu nhiên mỗi ngày.
- Vòng quay may mắnNhập các lựa chọn của bạn rồi quay.