Wie simuliere ich voreingenommene Würfel in Python?

7

Ich möchte N-seitig vorgespannt sterben?

%Vor%     
Pratik Deoghare 26.01.2009, 09:37
quelle

8 Antworten

23

Ein bisschen Mathe hier.

Ein regulärer Würfel gibt jede Zahl 1-6 mit gleicher Wahrscheinlichkeit, nämlich 1/6 . Dies wird als einheitliche Verteilung bezeichnet (die diskrete Version davon, im Gegensatz zur fortlaufenden Version). Das heißt, wenn X eine Zufallsvariable ist, die das Ergebnis einer einzelnen Rolle beschreibt, wird X~U[1,6] - also X gleichmäßig auf alle möglichen Ergebnisse des Würfelwurfs verteilt, 1 bis 6.

Dies ist gleichbedeutend mit der Auswahl einer Zahl in [0,1) bei der Aufteilung in 6 Abschnitte: [0,1/6) , [1/6,2/6) , [2/6,3/6) , [3/6,4/6) , [4/6,5/6) , [5/6,1) .

Sie beantragen eine andere Verteilung, die voreingenommen ist. Der einfachste Weg, dies zu erreichen, besteht darin, den Abschnitt [0,1) je nach gewünschter Ausrichtung in 6 Teile aufzuteilen. Also in Ihrem Fall würden Sie es in folgende Teile teilen wollen: [0,0.2) , [0.2,0.4) , [0.4,0.55) , 0.55,0.7) , [0.7,0.84) , [0.84,1) .

Wenn Sie sich den Wikipedia-Eintrag ansehen, werden Sie sehen, dass in diesem Fall die kumulative Wahrscheinlichkeitsfunktion verwendet wird nicht aus 6 Teilen gleicher Länge bestehen, sondern aus 6 Teilen, die sich in der Länge entsprechend der von Ihnen gegebenen Neigung unterscheiden. Gleiches gilt für die Massenverteilung.

Zurück zur Frage, übersetze es je nach verwendeter Sprache einfach zurück in deinen Würfelwurf. In Python ist hier ein sehr skizzenhaftes, wenn auch funktionierendes Beispiel:

%Vor%     
Yuval Adam 26.01.2009, 10:09
quelle
8

Mehr Sprache Agnostiker, aber Sie könnten eine Nachschlagetabelle verwenden.

Verwenden Sie eine Zufallszahl im Bereich 0-1 und suchen Sie den Wert in einer Tabelle:

%Vor%     
Toon Krijthe 26.01.2009 09:47
quelle
4
%Vor%

Die Verzerrung wird proportional sein.

%Vor%

Könnte auch Ganzzahlen (besser) verwenden:

%Vor%     
nosklo 26.01.2009 10:14
quelle
1

Siehe das Rezept für Alias-Methode von Walker für zufällige Objekte mit unterschiedlichen Wahrscheinlichkeiten.
Ein Beispiel, Zeichenfolgen A B C oder D mit Wahrscheinlichkeiten .1 .2 .3 .4 -

%Vor%

Prost   - Denis

    
denis 26.01.2009 14:29
quelle
1

Es ist ein wenig überraschend, dass die np.random.choice Antwort gibt wurde hier nicht gegeben.

%Vor%

Die Option p gibt "die Wahrscheinlichkeiten für jeden Eintrag in a " an, wobei a np.range(N) für uns ist. "Wenn nicht gegeben, nimmt das Beispiel eine einheitliche Verteilung über alle Einträge in a " an.

    
shrokmel 27.03.2017 15:14
quelle
0

Um nur eine effizientere (und pythonische3) Lösung vorzuschlagen, kann man bisect im Vektor der akkumulierten Werte zu suchen - die darüber hinaus vorberechnet und gespeichert werden können in der Hoffnung, dass nachfolgende Aufrufe an die Funktion sich auf die gleiche "Neigung" beziehen (um dem Frage-Sprachgebrauch zu folgen).

%Vor%

Wenn Python 3 nicht vorhanden ist, kann man einfach eine einfache Schleife schreiben, um die kumulative Summe zu berechnen.

    
Mapio 22.02.2014 09:14
quelle
0
%Vor%     
edo liberty 10.03.2016 15:22
quelle
0

Ich habe einen Code für ein Wörterbuch erstellt, der ein Ereignis und eine entsprechende Wahrscheinlichkeit gibt, es gibt den entsprechenden Schlüssel zurück, dh das Ereignis dieser Wahrscheinlichkeit.

%Vor%     
niksy 16.07.2017 14:21
quelle

Tags und Links