Làm thế nào để mô phỏng một cái chết được đưa ra một đồng tiền công bằng


21

Giả sử rằng bạn đã nhận được một đồng tiền công bằng và bạn muốn mô phỏng phân phối xác suất của việc liên tục lật một cái chết công bằng (sáu mặt). Ý tưởng ban đầu của tôi là chúng ta cần chọn các số nguyên thích hợp k,m , sao cho . Vì vậy, sau khi lật đồng xu lần, chúng tôi ánh xạ số được mã hóa bởi chuỗi bit có độ dài k thành đầu ra của khuôn bằng cách chia phạm vi thành 6 khoảng mỗi chiều dài . Tuy nhiên, điều này là không thể, vì có hai là yếu tố chính duy nhất của nó nhưng các yếu tố chính của bao gồm ba. Nên có một số cách đơn giản khác để làm điều này, phải không?2k=6mk[0,2k1]m2k6m


Xem câu hỏi này trong đó vấn đề được giải quyết một cách tổng quát hơn.
Raphael

Đây là một bài viết về chủ đề này . Nó giải thích cách sử dụng lấy mẫu từ chối và cách sử dụng lại các bit "bị lãng phí" để tăng tốc các cuộn tiếp theo.
ZeroUltimax

Câu trả lời:


12

Để có một phương pháp hiệu quả hơn một chút so với phương pháp được @FrankW chỉ ra nhưng sử dụng cùng một ý tưởng, bạn có thể lật đồng xu của mình lần để có được số dưới 2 n . Sau đó giải thích điều này như một đợt m die flips, trong đó m là số lớn nhất sao cho 6 m < 2 n (như đã nói, đẳng thức không bao giờ giữ ở đây). Nếu bạn nhận được một số lớn hơn hoặc bằng 6 m, bạn phải từ chối giá trị và lặp lại tất cả n lần lật.n2nmm6m<2n6mn

Bạn có thể thực hiện một chức năng trả về một lần lật chết bằng cách thực hiện lật đồng xu và sau đó lưu kết quả vào bộ đệm cho các yêu cầu lật m - 1 sau đây .nm-1

Điểm thú vị là một số giá trị của tốt hơn các giá trị khác vì chúng có tỷ lệ loại bỏ ít hơn. Dưới đây là danh sách các giá trị tốt (nghĩa là các giá trị có tỷ lệ loại bỏ thấp hơn các giá trị trước):n

n m r
3 1 0.25
8 3 0.15625
13 5 0.05078125
44 17 0.0378308072686
75 29 0.0247036782182
106 41 0.0113974522704
243 94 0.00933096248381
380 147 0.00726015308463
517 200 0.00518501504347
654 253 0.00310553931213
791 306 0.00102171682348

thu được với các công thức: .

m= =nđăng nhập32r= =1-3m2n

Hàng đầu tiên tương ứng với câu trả lời của @FrankW với tỷ lệ từ chối 25%. Các số sau đây rất hay: n = 13 đều có thể được giữ trong một biến số nguyên duy nhất. Cụ thể, tỷ lệ loại bỏ n = 13 chỉ là 5%, đây là một sự cải thiện hợp lý với 25% và làm cho điều này trở thành một ứng cử viên tốt để thực hiện có thể.n=8n=13n=13


Bạn không cần 6 ^ m, 6 * m là đủ. Vì vậy, bạn có thể sử dụng 5 lần ném để có được số 5 bit chỉ từ chối 1/16 trường hợp.
Taemyr

Tỷ lệ loại bỏ 5% cho 13 lần ném là khủng khiếp, khi so sánh với 25% cho 3 lần ném. Bởi vì 25% cho 3 lần tung sẽ chỉ từ chối 4 lần (nghĩa là chi nhiều hơn 12 lần ném) trong 0,390625% các trường hợp.
Taemyr

@Taemyr một số 5 bit có thể đại diện cho 32 giá trị khác nhau cho phép bạn đại diện cho một con xúc xắc (vì hai con xúc xắc có 36 khả năng). Vì vậy, chỉ có 6/32 giá trị được chấp nhận với tỷ lệ từ chối là 27,32 = 84%
Emanuele Paolini

@Taemyr: tỷ lệ từ chối của trên n lần tung có nghĩa là, trung bình mỗi đợt n lần ném bị từ chối với xác suất r . Vì vậy, trung bình, mỗi lần tung bị từ chối với cùng tỷ lệ r (không phụ thuộc vào n ). rnnrrn
Emanuele Paolini

Vâng. Và sử dụng phương pháp của FrankW có tỷ lệ tái sử dụng 25% cho một đợt 3 lần ném, bạn sẽ có xác suất là 1-0.00390625 để chấp nhận không muộn hơn đợt thứ 4.
Taemyr

29

Những gì bạn có thể làm, là sử dụng một phương pháp gọi là lấy mẫu từ chối :

  • Lật đồng xu 3 lần và diễn giải mỗi lần lật là một chút (0 hoặc 1).
  • Nối 3 bit, cho số nhị phân trong .[0,7]
  • Nếu số nằm trong , hãy lấy nó làm cuộn chết.[1,6]
  • Mặt khác, tức là nếu kết quả là hoặc 7 , lặp lại các lần lật.07

Từ trong số các kết quả có thể dẫn đến việc chấm dứt trong mỗi bộ, xác suất cần nhiều hơnlbộ lật để có được một cuộn chết là(1-66số 8tôi . Do đó, phương pháp này là hiệu quả trong thực tế.(1-6số 8)tôi= =14tôi

Cải tiến:

Câu trả lời của @ Angel chỉ ra rằng, số lượng đồng xu lật trong mỗi bộ nhưng lần đầu tiên có thể giảm từ 3 xuống 2, bằng cách sử dụng sự phân biệt giữa 7 làm bit đầu tiên cho bộ tiếp theo.07

@Emanuele Paolini giải thích, làm thế nào bạn có thể giảm số lượng rerolls, nếu bạn cần nhiều cuộn chết.


Liệu phương pháp này có mang lại xu hướng trung tâm lớn hơn mà một d6 thực sự sẽ không?
Red_Shadow

3
@Red_Shadow Số Lưu ý rằng bạn không thêm các lần tung đồng xu (sau đó ba lần sẽ không đủ) nhưng bạn chọn từng bit trong số nhị phân -bit bằng xu. Do đó, bạn lấy mẫu thống nhất từ [ 0..2 k - 1 ] và từ chối các số không từ khoảng mục tiêu; điều này chỉ có thể mang lại một phân phối thống nhất trên khoảng mục tiêu. k[0..2k1]
Raphael

Nếu bạn xảo quyệt với phạm vi bị từ chối, trong trường hợp này thực sự dễ dàng sử dụng điều đó để giảm số lần lật đồng xu cần thiết trong trường hợp từ chối.
Vịt Mooing

@MooingDuck bạn có thể quyết định loại bỏ kết quả của mình sau 2 lần tung: nếu là 0,0 0,1 hoặc 1,0 thì hãy ném lại cho bit cuối cùng nếu không bắt đầu lại
ratchet freak

1
@NikosM. Tuy nhiên, xác suất để thực hiện lâu hơn bước đang giảm dần về 0 theo cấp số nhân, do đó, câu trả lời không đưa ra tuyên bố sai: đó hiệu quả trong thực tế và trên thực tế được sử dụng rộng rãi. (Đối với các bản phân phối phức tạp hơn, nó thường là phương pháp duy nhất được biết đến.)k
Raphael

7

Một cách khác để lấy mẫu từ chối (như được mô tả trong câu trả lời của FrankW ) là sử dụng thuật toán chia tỷ lệ, có tính đến câu trả lời của [7,8] như thể đó là một lần lật đồng xu khác.

Có một lời giải thích rất chi tiết tại mathforum.org , bao gồm cả thuật toán (nó NextBit()sẽ được tung ra đồng tiền công bằng của bạn).

Trường hợp ném xúc xắc bằng một đồng xu công bằng (lấy mẫu 2 → 6) dễ hơn thuật toán chung. Bạn chỉ cần một thất bại (7 hoặc 8) là một đầu vào coin khác và thực hiện thêm hai lần lật.


2

Một cách tiếp cận khác để mô phỏng một cuộn dN bằng cách sử dụng dM (trong trường hợp câu hỏi cụ thể đã hỏi d6 bằng cách sử dụng d2) là phân vùng khoảng [0, 1) thành N khoảng cách bằng nhau có độ dài 1 / N, [0, 1 / N), [1 / N, 2 / N), ..., [(N-1) / N, N).

Sử dụng dM để tạo phân số cơ sở M, 0.bbbb ..., trong [0, 1). Nếu điều đó rơi vào [(i-1) / N, i / N), hãy lấy i làm cuộn của dN. Lưu ý rằng bạn chỉ phải tạo đủ các chữ số cơ sở M của phân số để xác định khoảng đó nằm trong khoảng nào.


Điều kiện chấm dứt cần phải được thực hiện chính xác hơn. Nếu tôi lật đồng xu một khi tôi kết thúc bằng phân số nhị phân 0,0 hoặc 0,1 (tức là), cả hai đều rơi vào một khoảng (tương ứng với 0 và 3, trong trường hợp này). Bạn cần coi phân số được tạo là một phạm vi và bạn dừng lại khi toàn bộ phạm vi nằm trong một khoảng duy nhất. Tôi chắc chắn đó là những gì bạn dự định nhưng tôi không nghĩ nó rõ ràng.
rici

1

Một lời giải thích có thể đơn giản hơn về lấy mẫu từ chối được cải thiện.

Tôi đang đưa ra lời giải thích này vì nó có thể giúp đơn giản hóa việc hiểu hoặc phân tích xác suất trong một số tình huống.

FrankW đề nghị sử dụng lấy mẫu từ chối, lật đồng xu ba lần, giữ kết quả nếu nó nằm trong phạm vi phù hợp hoặc lặp lại ba lần lật khác, cho đến khi thành công.

Ángel đề nghị lưu một lần lật trên mỗi thử nghiệm, thay thế nó bằng lựa chọn nhị phân còn lại từ hai giá trị không sử dụng của bộ ba trước đó.

Điều này có nghĩa thực sự là một chút thông tin được tạo ra với ba lần lật đầu tiên, không cần phải tạo ra. Chính xác hơn, bạn chỉ cần lật đồng xu hai lần để biết liệu bộ lật hiện tại có thành công hay không.

Việc biết liệu bộ lật hiện tại có thành công hay không là xác suất duy nhất có vấn đề , vì việc diễn giải một bộ lật thành công là độc lập xác suất. Và điều này có thể được biết trước khi tất cả các lần lật được hoàn thành cho tập hợp đó.

Điều này có thể đạt được theo ít nhất hai cách, hoặc chính xác hơn theo hai cách hiểu khác nhau về các lần lật. Có thể có người khác.

Nhóm kết quả theo cặp

Ý tưởng là chỉ xem xét ba giá trị (1,2), (3,4) và (5,6) được biểu thị bằng bất kỳ cấu hình ba lần lật nào, giả sử TT, TH, HT. Sau đó, bạn có thể áp dụng lấy mẫu từ chối với hai lần lật, lặp lại bất cứ khi nào bạn nhận được cấu hình lỗi HH.

Khi bạn nhận được một trong ba cấu hình thành công, bạn chỉ cần lật đồng xu một lần nữa để quyết định xem bạn nên lấy giá trị đầu tiên hay giá trị thứ hai của cặp tương ứng.

Phát hiện sớm sự cố lật

Ý tưởng là sử dụng một cách đọc hơi khác về cấu hình ba lật. Nếu Head and Tail được hiểu là 1 và 0, thì cấu hình sẽ tương ứng với giải thích nhị phân cộng với một. Đó là TTT (tức là 000) tương ứng 1, HTH (tức là 101) tương ứng 6, HHT (tức là 110) và HHH (tức là 111) tương ứng với 7 và 8, hoặc bất cứ điều gì bên ngoài [1,6].

Sau đó, chúng ta biết rằng flip-set đang thành công hoặc thất bại chỉ với hai lần lật đầu tiên. Nếu họ tạo HH, bộ lật thất bại độc lập với lần lật cuối cùng. Vì vậy, nó có thể được bỏ qua.

Tôi nghĩ rằng việc phát hiện sớm luôn có thể được sử dụng như một lời giải thích, nhưng tùy thuộc vào số lượng khuôn mặt trên xúc xắc mô phỏng của bạn, phát hiện lỗi có thể xảy ra sau một số lần lật khác nhau.

Ví dụ, đối với một con xúc xắc 10 mặt, về nguyên tắc, bạn cần một bộ lật gồm 4 lần lật, với 6 cấu hình tương ứng với thất bại. Mẹo nhỏ là có tất cả các cấu hình thất bại ở mức cao của chuỗi các giá trị nhị phân như sau:

TTTT  0000   1
HTTT  1000   9
HTTH  1001  10
HTHT  1001  11
HTHH  1011  12
HHTT  1100  13
HHHH  1111  16

Các cấu hình thành công tương ứng với phạm vi [1, 10] và các lỗi trong phạm vi [11,16].

Sau đó, bạn thất bại khi hai lần lật đầu tiên cho HH, hoặc khi ba lần đầu tiên đưa HTH, mà không cần phải cố gắng thực hiện các lần lật bị thiếu của tập hợp.

Nếu bạn không thất bại, bạn chỉ cần chấm dứt tập hợp lật.


1

Có hai cách tiếp cận nổi tiếng về điều này. Một là "lấy mẫu từ chối". Ví dụ: sử dụng ba bit để chọn một trong sáu giá trị, thử lại cho hai mẫu bổ sung. Hoặc sử dụng 14 bit (8192 giá trị) để chọn 5 giá trị từ 1 đến 6 (7776 khả năng), thử lại trong 13 trên 256 trường hợp.

Phần khác là sử dụng phần giải nén của thuật toán nén / giải nén: Với mã hóa số học, một chuỗi các giá trị ngẫu nhiên từ 1 đến 6 có thể được nén mà hầu như không có dự phòng. Tạo chuỗi nén ngẫu nhiên và giải nén nó. Điều này phức tạp hơn nhiều, nhưng thực tế sẽ không yêu cầu bất kỳ số ngẫu nhiên bổ sung nào.


0

Xin lỗi trước nếu lời giải thích là thừa. Tôi không chắc có bao nhiêu chi tiết để đi vào hoặc dễ hiểu khái niệm này.

Giả sử bạn có ba đồng xu (tiền công bằng). Nếu bạn tăng dần một giá trị cho mỗi bên của mỗi đồng tiền, bạn sẽ có sáu giá trị.

Giống như vậy: Trên đồng xu thứ nhất, đầu là 1 và đuôi là 2. Trên đồng xu thứ hai, đầu là 3 và đuôi là 4. Trên đồng xu thứ ba, đầu là 5 và đuôi là 6.

Lật các đồng xu sẽ để lại cho bạn một bộ ba số, bộ hiện tại của bạn. Bây giờ, bộ hiện tại của bạn sẽ trở thành bộ trước đó của bạn và bạn sẽ lặp lại quy trình để có được bộ ba số mới.

Tiếp tục làm điều này cho đến khi một và chỉ một số khớp từ bộ hiện tại của bạn với bộ trước đó. Đó là số của bạn.

Vì vậy, nếu bạn có [đầu, đuôi, đầu] cho bộ hiện tại, đó sẽ là [1, 4, 5]. Bây giờ bạn lật chúng lại và bộ hiện tại của bạn là [2, 4, 5]. Hai trận đấu. Không tốt. Thử lại lần nữa. Bạn nhận được [2, 3, 6]. Chỉ có một trận đấu. Số của bạn là hai.

Sẽ có một cơ hội như nhau rằng bất kỳ số lượng cụ thể nào sẽ xuất hiện, nhưng nó không đặc biệt hiệu quả về mặt chi phí, chỉ có một thay đổi 3/32 rằng bất kỳ cặp bộ đã cho nào sẽ thành công (chỉ một trận đấu). Vì vậy, trung bình, thuật toán sẽ phải lặp lại khoảng mười lần. Ngoài ra, nó không dễ khái quát hóa cho chết số lẻ.

Ít nhất, có lẽ đó là thức ăn để suy nghĩ. Câu hỏi rất thú vị.


4
Điều này luôn luôn sẽ thực hiện ồ ạt, ồ ạt hơn so với lấy mẫu từ chối. Để lấy mẫu từ chối, bạn chỉ phải lậtđăng nhậpn tiền xu để mô phỏng một nchết bên và mỗi bộ lật thành công với xác suất lớn hơn 12. Phương pháp bạn đề xuất yêu cầu bạn lậtn2 tiền xu và mỗi bộ lật chỉ thành công với xác suất n/2n.
David Richerby

0

Tôi sẽ lật đồng xu ba lần và diễn giải kết quả dưới dạng số nhị phân, loại bỏ kết quả ra khỏi phạm vi.

Ví dụ: đặt các đầu là 1 và đuôi là 0. Nếu bạn lật nó ba lần và có các đầu, đuôi, đầu, bạn sẽ có nhị phân 101, là 5 trong số thập phân. HHT = 110b = 6. TTT = 000b = 0 và HHH = 111b = 7, cả hai đều nằm ngoài phạm vi và sẽ bị từ chối, và bạn sẽ phản xạ cho tất cả các chữ số.


1
Đó chỉ là câu trả lời của Frank.
Raphael

2
@Raphael Thật ra, một tập hợp con nghiêm ngặt của câu trả lời của Frank , vì Frank giải quyết thời gian chạy dự kiến.
David Richerby

0

Thật không may, người ta không thể (trung thành) mô phỏng một cái chết (công bằng) bằng cách sử dụng (chuỗi) đồng xu công bằng.

Đơn giản là vì không gian sự kiện của một con súc sắc có một chiều 6 và điều này không thể được kết hợp chính xác bởi một sức mạnh của 2 (đó là những gì không gian sự kiện của một đồng tiền công bằng cung cấp).

Nhưng người ta có thể làm điều này với một "tri-coin" công bằng (nếu thuật ngữ đó có thể được sử dụng). Có nghĩa là một đồng tiền với 3 kết quả. một đồng xu 2 đơn giản, vì vậy không gian chung của 2 đồng tiền này khớp chính xác với không gian sự kiện của người chết.

Lấy mẫu từ chối (như đã đề cập trong một số câu trả lời) có thể cung cấp một mô phỏng gần đúng thực sự. Nhưng nó vẫn sẽ có một số lỗi hoặc kết hợp sai xác suất (trong thời gian hữu hạn). Vì vậy, nếu một người muốn thực sự khớp với không gian sự kiện của 2 hệ thống này, sẽ có trường hợp nó không hoạt động.

Trong mô phỏng xác suất (trong đó lấy mẫu từ chối là một ví dụ), các chuỗi điển hình được tạo ra thực sự thể hiện các xác suất cơ bản tương đối (trong trường hợp này là không gian sự kiện của một con súc sắc). Tuy nhiên (như đã đề cập trong các bình luận), mỗi trình tự điển hình này có thể chứa các chuỗi con dài tùy ý có cùng kết quả. Điều này có nghĩa là để sử dụng lấy mẫu từ chối (trong một số trường hợp), có thể mất nhiều thời gian tùy ý hoặc phân phối được tạo sẽ bị sai lệch (nghĩa là không công bằng), do đại diện quá mức hoặc đại diện dưới một số phần của không gian sự kiện của nó . nếu đây không phải là trường hợp, thì một thuật toán xác định sẽ có thể phù hợp chính xác với không gian sự kiện của một con súc sắc và một đồng xu (không khớp với chiều).


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles, bỏ phiếu tiêu cực quá tệ vẫn còn ở đây, bất chấp mọi lời giải thích và trò chuyện (về tính chính xác) đã diễn ra: p
Nikos M.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.