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?
probability-theory
randomness
sampling
Wahrscheinlichkeitsmann
quelle
quelle
Antworten:
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 .n 2n m m 6m< 2n 6m n
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.n m - 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
erhalten mit den Formeln: .
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 = 8 n = 13 n = 13
quelle
Was Sie tun können, ist eine Methode zu verwenden, die als Rückweisungsabtastung bezeichnet wird :
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-668 l ( 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.70 7
@Emanuele Paolini erklärt, wie Sie die Anzahl der Nachwürfe verringern können, wenn Sie mehrere Würfelwürfe benötigen.
quelle
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.
quelle
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.
quelle
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:
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.
quelle
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.
quelle
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.
quelle
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.
quelle
Leider kann man einen (fairen) Würfel mit (Sequenzen von) fairen Münzen nicht (getreu) simulieren.
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).
quelle