Wie man einen Würfel mit einer fairen Münze simuliert


21

Angenommen, Sie erhalten eine faire Münze und möchten die Wahrscheinlichkeitsverteilung für das wiederholte Umdrehen eines fairen (sechsseitigen) Würfels simulieren. Meine anfängliche Idee ist, dass wir geeignete ganze Zahlen wählen müssen , so dass . Nachdem wir die Münze mal geworfen haben, ordnen wir die von der Bitfolge mit der Länge k codierte Zahl den Ausgängen des Chips zu, indem wir den Bereich in 6 Intervalle mit jeweils Längen teilen . Dies ist jedoch nicht möglich, da nur zwei Primfaktoren hat, die Primfaktoren von drei. Es sollte einen anderen einfachen Weg geben, richtig?k,m2k=6mk[0,2k-1]m2k6m


Sehen Sie sich diese Frage an, in der das Problem allgemeiner behandelt wird.
Raphael

Hier ist ein Artikel zu diesem Thema . Hier erfahren Sie, wie Sie die Ablehnungsabtastung verwenden und wie Sie die "verschwendeten" Bits wiederverwenden, um weitere Rollen zu beschleunigen.
ZeroUltimax

Antworten:


12

Um eine etwas effizientere Methode als die von @FrankW beschriebene zu haben, aber dieselbe Idee zu verwenden, können Sie Ihre Münze mal umdrehen , um eine Zahl unter . Dann interpretiere dies als eine Menge von Würfeln, wobei die größte Zahl ist, so dass (wie bereits gesagt, Gleichheit gilt hier nie). Wenn Sie eine Zahl größer oder gleich , müssen Sie den Wert verwerfen und alle Flips wiederholen .n2nmm6m<2n6mn

Sie können eine Funktion implementieren, die einen einzelnen Würfelwurf zurückgibt, indem Sie Münzwürfe ausführen und dann das Ergebnis für die folgenden Würfelwurfanforderungen zwischenspeichern.nm-1

Der interessante Punkt ist, dass einige Werte von besser sind als andere, weil sie eine geringere Rückweisungsrate haben. Hier ist eine Liste von guten Werten (dh Werten, die eine niedrigere Ablehnungsrate als die vorherigen haben):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

erhalten mit den Formeln: .

m=nLog32r=1-3m2n

Die erste Zeile entspricht der Antwort von @FrankW mit einer Ausschussquote von 25%. Die folgenden Zahlen sind nett: und können beide in einer einzelnen statischen Ganzzahlvariablen gespeichert werden. Insbesondere die Ausschussrate von beträgt nur 5%, was eine sinnvolle Verbesserung gegenüber 25% darstellt und dies zu einem guten Kandidaten für eine mögliche Implementierung macht.n=8n=13n=13


Sie brauchen keine 6 ^ m, 6 * m ist ausreichend. Sie könnten also 5 Würfe verwenden, um eine 5-Bit-Zahl zu erhalten, die nur 1/16 Fälle zurückweist.
Taemyr

Eine Ablehnungsrate von 5% für 13 Würfe ist schrecklich, verglichen mit 25% für 3 Würfe. Weil 25% für 3 Würfe in 0,390625% der Fälle nur 4-mal ablehnen (dh mehr als 12 Würfe ausgeben).
Taemyr

@Taemyr eine 5-Bit-Zahl kann 32 verschiedene Werte darstellen, wodurch Sie einen einzelnen Würfel darstellen können (da zwei Würfel 36 Möglichkeiten haben). Bei einer Ausschussrate von 27/32 = 84% sind also nur 6/32 Werte akzeptabel
Emanuele Paolini

@Taemyr: Eine Rückweisungsrate von auf Würfe bedeutet, dass im Durchschnitt jede Charge von Würfen mit der Wahrscheinlichkeit . Im Durchschnitt wird jeder Wurf mit der gleichen Rate (unabhängig von ) zurückgewiesen. n n r r nrnnrrn
Emanuele Paolini

Ja. Und wenn Sie die FrankW-Methode mit einer Rückweisungsrate von 25% für eine Charge von 3 Würfen verwenden, haben Sie eine Wahrscheinlichkeit von 1-0.00390625, die Sie bis spätestens zur 4. Charge akzeptieren.
Taemyr

29

Was Sie tun können, ist eine Methode zu verwenden, die als Rückweisungsabtastung bezeichnet wird :

  • Wirf die Münze dreimal um und interpretiere jeden Wurf als ein Bit (0 oder 1).
  • Verketten Sie die 3 Bits und geben Sie eine Binärzahl in .[0,7]
  • Wenn die Zahl in , nimm sie als Würfelwurf.[1,6]
  • Andernfalls, dh wenn das Ergebnis oder , wiederholen Sie die Umkehrungen.707

Da der möglichen Ergebnisse führen in jedem Satz an Terminierung, die Wahrscheinlichkeit um mehr als Sätze von Flips würfeln zu erhalten ist . Daher ist diese Methode in der Praxis effizient. l(1-668l(1-68)l=14l

Verbesserungen:

@ Angels Antwort weist darauf hin, dass die Anzahl der Münzwürfe in jedem Satz, aber dem ersten Satz, von 3 auf 2 verringert werden kann, indem die Unterscheidung zwischen einer und einer als erstes Bit für den nächsten Satz verwendet wird.707

@Emanuele Paolini erklärt, wie Sie die Anzahl der Nachwürfe verringern können, wenn Sie mehrere Würfelwürfe benötigen.


Würde diese Methode nicht zu einer größeren zentralen Tendenz führen als ein echter d6?
Red_Shadow

3
@Red_Shadow Nein. Beachten Sie, dass Sie die Münzwürfe nicht addieren (drei wären dann nicht genug), sondern jedes Bit in einer Bit-Binärzahl nach Münze auswählen. Sie probieren also gleichmäßig aus [ 0..2 k - 1 ] und weisen Zahlen zurück, die nicht aus dem Zielintervall stammen. dies kann nur eine gleichmäßige Verteilung auf das Zielintervall ergeben. k[0..2k-1]
Raphael

Wenn Sie mit dem abgelehnten Bereich schlau sind, ist es in diesem Fall eigentlich einfach, diesen zu verwenden, um die Anzahl der erforderlichen Münzwürfe im Ablehnungsfall zu reduzieren.
Mooing Duck

@MooingDuck können Sie entscheiden , ob Ihr Ergebnis nach 2 Würfen verwerfen: Wenn es 0,0 0,1 oder 1,0 , dann wieder werfen sonst das letzte Bit über Start
Ratsche Freak

1
@NikosM. Die Wahrscheinlichkeit, länger als Schritte zu dauern, nimmt jedoch exponentiell gegen Null ab, so dass die Antwort keine falsche Behauptung aufstellt: Sie ist in der Praxis effizient und tatsächlich weit verbreitet. (Bei komplizierteren Distributionen ist dies häufig die einzige bekannte Methode.)k
Raphael

7

Eine Alternative zur Zurückweisungsabtastung (wie in FrankWs Antwort beschrieben ) ist die Verwendung eines Skalierungsalgorithmus, der eine Antwort von [7,8] berücksichtigt, als wäre es ein weiteres Münzwurf.

Es gibt eine sehr detaillierte Erklärung auf mathforum.org , einschließlich des Algorithmus (es NextBit()würde Ihre faire Münze umwerfen ).

Das Werfen eines Würfels mit einer fairen Münze (Stichprobe 2 → 6) ist einfacher als der generische Algorithmus. Sie nehmen einfach einen Fehler (7 oder 8) als eine andere Münzeingabe und führen zwei weitere Flips durch.


2

Ein anderer Ansatz zur Simulation einer Rolle eines dN mit einem dM (im Fall der spezifischen Frage, die ein d6 mit einem d2 stellt) ist die Aufteilung des Intervalls [0, 1) in N gleiche Intervalle der Länge 1 / N, [0, 1 / N), [1 / N, 2 / N), ..., [(N-1) / N, N).

Verwenden Sie das dM, um eine Base-M-Fraktion, 0.bbbb ..., in [0, 1) zu erzeugen. Wenn das in [(i-1) / N, i / N) fällt, nimm i als Rolle des dN. Beachten Sie, dass Sie nur genügend Basis-M-Stellen des Bruchs generieren müssen, um zu bestimmen, in welchem ​​Intervall er liegt.


Die Beendigungsbedingung muss präzisiert werden. Wenn ich die Münze einmal umwerfe, erhalte ich entweder den binären Bruch 0.0 oder 0.1 (dh ½), die beide in ein Intervall fallen (in diesem Fall entsprechend 0 bzw. 3). Sie müssen den generierten Bruch als Bereich betrachten und stoppen, wenn sich der gesamte Bereich innerhalb eines einzelnen Intervalls befindet. Ich bin mir sicher, dass Sie das beabsichtigt haben, aber ich glaube nicht, dass es klar ist.
rici

1

Eine möglicherweise einfachere Erklärung für eine verbesserte Rückweisungsabtastung.

Ich gebe diese Erklärung, da sie hoffentlich dazu beitragen kann, das Verständnis oder die Analyse von Wahrscheinlichkeiten in bestimmten Situationen zu vereinfachen.

FrankW schlägt vor , das Ablehnungs-Sampling zu verwenden, die Münze dreimal zu werfen , das Ergebnis beizubehalten, wenn es sich im richtigen Bereich befindet, oder die drei anderen Flips bis zum Erfolg zu wiederholen.

Ángel schlägt vor, bei jedem Versuch einen Flip zu speichern und ihn durch die Binärauswahl zu ersetzen, die aus den beiden nicht verwendeten Werten des vorherigen Dreier-Sets übrig bleibt.

Das bedeutet wirklich, dass mit den ersten drei Flips eine Information erzeugt wurde, die nicht erzeugt werden musste. Genauer gesagt sollten Sie die Münze nur zweimal werfen müssen, um zu wissen, ob die aktuelle Reihe von Flips erfolgreich sein wird.

Zu wissen, ob der aktuelle Flip-Satz erfolgreich ist, ist die einzige Wahrscheinlichkeit, die von Bedeutung ist , da die Interpretation eines erfolgreichen Flip-Satzes wahrscheinlichkeitsunabhängig ist. Und dies kann bekannt sein, bevor alle Flips für diesen Satz abgeschlossen sind.

Dies kann auf mindestens zwei Arten erreicht werden, oder genauer in zwei unterschiedlichen Interpretationen der Klappen. Es kann andere geben.

Gruppieren von Ergebnissen in Paaren

Die Idee besteht darin, nur drei Werte (1,2), (3,4) und (5,6) zu berücksichtigen, die durch drei beliebige Double-Flip-Konfigurationen dargestellt werden, beispielsweise TT, TH, HT. Anschließend können Sie eine Zurückweisungsabtastung mit Doppelflips anwenden, die immer dann wiederholt wird, wenn Sie die Fehlerkonfiguration HH erhalten.

Sobald Sie eine der drei erfolgreichen Konfigurationen erhalten haben, werfen Sie einfach noch einmal die Münze, um zu entscheiden, ob Sie den ersten oder den zweiten Wert des entsprechenden Paares nehmen sollen.

Frühzeitige Erkennung eines Flip-Set-Fehlers

Die Idee ist, eine etwas andere Lesart der Drei-Flip-Konfiguration zu verwenden. Wenn Head und Tail als 1 und 0 interpretiert werden, sollte eine Konfiguration der binären Interpretation plus eins entsprechen. Das heißt, TTT (dh 000) entspricht 1, HTH (dh 101) entspricht 6, HHT (dh 110) und HHH (dh 111) entspricht 7 und 8 oder irgendetwas außerhalb von [1,6].

Dann wissen wir, dass das Flip-Set nur mit den ersten beiden Flips erfolgreich ist oder fehlschlägt. Wenn sie HH erzeugen, schlägt der Flip-Set unabhängig vom letzten Flip fehl. So kann übersprungen werden.

Ich denke, dass die Früherkennung immer als Erklärung dienen kann, aber abhängig von der Anzahl der Gesichter auf Ihren simulierten Würfeln kann die Fehlererkennung nach einer variablen Anzahl von Flips erfolgen.

Zum Beispiel benötigen Sie für einen Würfel mit 10 Gesichtern im Prinzip ein Flip-Set mit 4 Flips, wobei 6 Konfigurationen dem Versagen entsprechen. Der Trick besteht darin, alle Fehlerkonfigurationen wie folgt am oberen Ende der Folge von Binärwerten zu haben:

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

Erfolgreiche Konfigurationen entsprechen dem Bereich [1, 10] und Fehlern im Bereich [11, 16].

Dann scheitern Sie, wenn die ersten beiden Flips HH ergeben oder wenn die ersten drei HTH ergeben, ohne die fehlenden Flips des Sets überhaupt versuchen zu müssen.

Wenn Sie nicht scheitern, beenden Sie einfach die Flip-Reihe.


1

Hierfür gibt es zwei bekannte Ansätze. Eine davon ist "Rejection Sampling". Verwenden Sie beispielsweise drei Bits, um einen von sechs Werten auszuwählen, und versuchen Sie es erneut mit den zwei zusätzlichen Abtastwerten. Oder verwenden Sie 14 Bits (8192 Werte), um 5 Werte von 1 bis 6 (7776 Möglichkeiten) auszuwählen, und versuchen Sie es in 13 von 256 Fällen erneut.

Zum anderen wird der Dekomprimierungsteil eines Komprimierungs- / Dekomprimierungsalgorithmus verwendet: Mit der arithmetischen Codierung kann eine Folge von Zufallswerten von 1 bis 6 nahezu redundanzfrei komprimiert werden. Generieren Sie die komprimierte Sequenz nach dem Zufallsprinzip und dekomprimieren Sie sie. Dies ist viel komplizierter, erfordert jedoch praktisch keine zusätzlichen Zufallszahlen.


0

Entschuldigung im Voraus, wenn die Erklärung überflüssig ist. Ich war mir nicht sicher, wie detailliert oder wie einfach das Konzept zu verstehen war.

Angenommen, Sie haben drei Münzen (helle Münzen). Wenn Sie jeder Seite jeder Münze inkrementell einen Wert zuweisen, haben Sie sechs Werte.

Wie so: Auf der ersten Münze ist Kopf 1 und Zahl 2. Auf der zweiten Münze ist Kopf 3 und Zahl 4. Auf der dritten Münze ist Kopf 5 und Zahl 6.

Durch Umwerfen der Münzen erhalten Sie einen Satz von drei Zahlen, Ihren aktuellen Satz. Jetzt wird Ihr aktueller Satz zu Ihrem vorherigen Satz und Sie wiederholen den Vorgang, um einen neuen Satz mit drei Zahlen zu erhalten.

Fahren Sie so lange fort, bis nur noch eine Nummer von Ihrer aktuellen zur vorherigen übereinstimmt. Das ist deine Nummer.

Wenn Sie also [Köpfe, Schwänze, Köpfe] für den aktuellen Satz haben, wäre das [1, 4, 5]. Jetzt drehen Sie sie erneut und Ihr aktueller Satz ist [2, 4, 5]. Zwei Streichhölzer. Nicht gut. Versuche es noch einmal. Sie erhalten [2, 3, 6]. Nur ein Treffer. Ihre Nummer ist zwei.

Die Wahrscheinlichkeit, dass eine bestimmte Zahl angezeigt wird, ist gleich hoch, aber nicht besonders kosteneffizient, da ein Satzpaar nur zu 3/32 erfolgreich ist (nur eine Übereinstimmung). Im Durchschnitt müsste der Algorithmus also etwa zehnmal wiederholt werden. Es ist auch nicht leicht verallgemeinerbar für ungeradzahlige Chips.

Zumindest ist es vielleicht ein Denkanstoß. Sehr interessante Frage.


4
Lognn12n2n/2n

0

Ich würde die Münze dreimal umwerfen und das Ergebnis als Binärzahl interpretieren und Ergebnisse außerhalb des Bereichs ablehnen.

Zum Beispiel, lassen Sie Heads eine 1 und Tails eine 0 sein. Wenn Sie es dreimal umgedreht haben und Heads, Tails und Heads haben, haben Sie eine Binärzahl von 101, was 5 in Dezimalzahl ist. HHT = 110b = 6. TTT = 000b = 0 und HHH = 111b = 7, die beide außerhalb des Bereichs liegen und abgelehnt würden, und Sie würden für alle Ziffern umkehren.


1
Das ist nur Franks Antwort.
Raphael

2
@Raphael Eigentlich eine strenge Teilmenge von Franks Antwort , da Frank die erwartete Laufzeit anspricht.
David Richerby

0

Leider kann man einen (fairen) Würfel mit (Sequenzen von) fairen Münzen nicht (getreu) simulieren.

62

Aber man kann dies mit einer fairen "Dreimünze" tun (wenn ein solcher Begriff verwendet werden kann). Das heißt, eine Münze mit 3 Ergebnissen. Und eine einfache 2-Münzen, so dass der gemeinsame Raum dieser 2 Münzen genau dem Ereignisraum des Würfels entspricht.

Die Ablehnungsabtastung (wie in einigen Antworten erwähnt) kann in der Tat eine ungefähre Simulation liefern . Aber es wird immer noch einen gewissen Fehler oder eine falsche Übereinstimmung der Wahrscheinlichkeiten geben (in endlicher Zeit). Wenn man also die Veranstaltungsräume dieser beiden Systeme tatsächlich abgleichen möchte, wird es Fälle geben, in denen dies nicht funktioniert.

In der Wahrscheinlichkeitssimulation (wofür die Zurückweisungsabtastung ein Beispiel ist) weisen generierte typische Sequenzen tatsächlich die relativen Elementarwahrscheinlichkeiten auf (in diesem Fall den Ereignisraum eines Chips). Wie in den Kommentaren erwähnt, kann jede dieser typischen Sequenzen beliebig lange Teilsequenzen mit genau den gleichen Ergebnissen enthalten. Dies bedeutet, dass die Verwendung der Ablehnungsabtastung (in einigen Fällen) entweder beliebig lange dauern kann oder die generierte Verteilung aufgrund von Über- oder Unterdarstellung einiger Teile ihres Ereignisraums verzerrt ist (dh nicht fair ist) . Wenn dies nicht der Fall wäre, wäre ein deterministischer Algorithmus möglich, der genau zu den Ereignisräumen eines Würfels und einer Münze passt (die nicht nach Dimensionalität übereinstimmen).


Kommentare sind nicht für eine längere Diskussion gedacht. Diese Unterhaltung wurde in den Chat verschoben .
Gilles 'SO- hör auf böse zu sein'

@ Gilles, schade, die negative Abstimmung ist immer noch da, trotz aller Erklärungen und Gespräche (bezüglich der Korrektheit), die weitergingen: p
Nikos M.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.