Nochmal Stochastik: Würfel vergleichen.
Übersicht

![]() |
BladeRunnerModeratorBetreff: Nochmal Stochastik: Würfel vergleichen. |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
folgendes Szenario: Ich werfe einen achtseitigen Würfel als Probe. Die Ergebnisse 5,6,7 bedeuten einen Erfolg, das Ergebnis 8 bedeutet zwei Erfolge. Nun werfe ich einen zweiten achtseitigen Würfel: Die Ergebnisse 5,6,7,8 bedeuten hier einen Misserfolg. Wie groß ist nun die Wahrscheinlichkeit dass ich wenn ich beide Würfel geworfen habe mehr Erfolge als Misserfolge habe, sprich, es muss mindestens ein Erfolg erzielt werden. Nun noch ausgebaut: a) wie berechne ich die Wahrscheinlichkeiten wenn ich beliebige Mengen an Erfolgs- und Misserfolgswürfeln zur Verfügung habe? Beispiel 5 Erfolgswürfel, 3 Misserfolgswürfel. b) wie ändert sich die Berechnung wenn ich ermitteln will ob 2, 3, ...n Erfolge erzielt wurden. Hoffe ihr habt ein paar Ideen für mich. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo BR,
1. Würfel +=3/8 (5,6,7) -=4/8 ++=1/8 (8) 2. Würfel +=4/8 -=4/8 Gewinn: 1+ 2+ = 1/4 -1/8 1++ 2- =1/8 1++ 2+ = 1/8 =3/8 Verlieren: 1 - 2- = 1/4 =2/8 unentschieden: 1+ 2- =1/4 - 1/8 1- 2+ = 1/4 =3/8 |
||
between angels and insects |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich suche noch nach der Formel, aber binome sind es schon einmal nicht:
1 0 1/2 zu 1/2 00 =0 01 =0 u 10 =0 u 11 =1 1/4 zu 3/4 000 = - 001 = - 010 = - 011 = + 100 = - 101 = + 110 = + 111 = + 4/8 zu 4/8 0000 = - 0001 = - 0010 = - 0011 = - u 0100 = - 0101 = - u 0110 = - u 0111 = + 1000 = - 1001 = - u 1010 = - u 1011 = + 1100 = - u 1101 = + 1110 = + 1111 = + 5/16 zu 11/16 00000 = - 00001 = - 00010 = - 00011 = - 00100 = - 00101 = - 00110 = - 00111 = + 01000 = - 01001 = - 01010 = - 01011 = + 01100 = - 01101 = + 01110 = + 01111 = + 10000 = - 10001 = - 10010 = - 10011 = + 10100 = - 10101 = + 10110 = + 10111 = + 11000 = - 11001 = + 11010 = + 11011 = + 11100 = + 11101 = + 11110 = + 11111 = + 16/32 zu 16/32 Edit: also, bei nur Verlierwürfeln: Wenn ungerade Anzahl: 50% wenn gerade anzahl an Würfeln: n=anzahl würfe unentschieden nach Binom: (https://www.cliffsnotes.com/study-guides/algebra/algebra-ii/additional-topics/binomial-coefficients-and-the-binomial-theorem) Binom : a= (n) über (n/2) Wahrscheinlichkeit: ((2^n-a)/2)/2^n Das ganze nehmen wir nun noch mit dem Glücksfaktor: bei n gerade: Wahrscheinlichkeit: (((2^n-a)/2)*((50%*verlieren+62,5%*gewinnen)/n))^n bei n ungerade: Wahrscheinlichkeit: (50%*verlieren+62,5%*gewinnen)/n) |
||
between angels and insects |
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jan_ hat Folgendes geschrieben: Hallo BR,
1. Würfel +=3/8 (5,6,7) -=4/8 ++=1/8 (8) 2. Würfel +=4/8 -=4/8 Gewinn: 1+ 2+ = 1/4 -1/8 1++ 2- =1/8 1++ 2+ = 1/8 =3/8 Verlieren: 1 - 2- = 1/4 =2/8 unentschieden: 1+ 2- =1/4 - 1/8 1- 2+ = 1/4 =3/8 3/8 wäre ne 37,5%ige Wahrscheinlichkeit zu gewinnen. Tatsächlich ist sie aber 20/64=31.25% Wenn Du letztendlich MINDESTENS einen Erfolg haben willst, fallen schonmal alle Würfe weg, bei denen der erste Würfel eine 1, 2, 3 oder 4 zeigt. Also insgesamt 32/64 Möglichkeiten die wegfallen. Wenn der erste Würfel eine 5, 6 oder 7 zeigt, darf der zweite Würfel KEINE 5, 6, 7 oder 8 zeigen, d.h. es fallen wieder jeweils 4/8 Würfen weg, also 12. Das sind ingesamt schon 44/64 Möglichkeiten. Wenn der erste Würfel ne 8 zeigt, ist es egal was der zweite zeigt. 44/64 Möglichkeiten führen nicht zu mindestens einem Erfolg, d.h. 20/64 Möglichkeiten führen zu mindestens einem Erfolg. Macht 31.25% aller Würfe aus. Hier ganz anschaulich: + = ingesamt 1 Erfolg ++ = ingesamt 2 Erfolge 0 = ingesamt 1 Erfolg und 1 Misserfolg ODER 0 Erfolge und 0 Misserfolge - = insgesamt 1 Misserfolg Zitat: 11 o 21 o 31 o 41 o
12 o 22 o 32 o 42 o 13 o 23 o 33 o 43 o 14 o 24 o 34 o 44 o 15 - 25 - 35 - 45 - 16 - 26 - 36 - 46 - 17 - 27 - 37 - 47 - 18 - 28 - 38 - 48 - 51 + 61 + 71 + 81 ++ 52 + 62 + 72 + 82 ++ 53 + 63 + 73 + 83 ++ 54 + 64 + 74 + 84 ++ 55 o 65 o 75 o 85 + 56 o 66 o 76 o 86 + 57 o 67 o 77 o 87 + 58 o 68 o 78 o 88 + Alle + und ++ beinhalten mindestens 1 Erfolg. Ingesamt sinds 20/64 aller möglichen Würfe. Falls ich keinen Denkfehler drinhab Oo PSY |
||
PSY LABS Games
Coders don't die, they just gosub without return |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke schon mal für eure Antworten,
und ich denke PSY liegt für die ein-Würfel-Problematik schon ganz richtig. Aber wie sieht es bei mehreren aus? Bei Jans Berechnung hakt es ein wenig bei mir - warum sollte die Tatsache ob gerade oder ungerade Anzahl an Würfeln geworfen wird auf die grundsätzliche Wahrscheinlichkeitsverteilung Einfluss haben. Die Gesamtsumme der Möglichen Erfolge und der möglichen Misserfolge sollte doch allein entscheidend sein, und deren Anwachsen ist ja über die Anzahl der Würfel linear? Zudem: wie kommst du auf den "Glücksfaktor", der noch dazu in der Summe größer 100% liegt? Eine Wahrscheinlichkeitsberechnung hat ja nichts mit Glück zu tun, es geht ja stur um die Verteilung der Möglichkeiten auf Ergebnisse. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
tldr: 31.1% für 1:1
a) 72.59% für 5:3 Ich bin nicht gut in Mathe, darum lasse ich das den Computer machen: Python Code: [AUSKLAPPEN] #!/usr/bin/python
import random number_tests = 100000 number_success = 0 number_fails = 0 success_dice = { 'throws': 5, 'faces': [1, 2, 3, 4, 5, 6, 7, 8], 'points': {5: 1, 6: 1, 7: 1, 8: 2} } fail_dice = { 'throws': 3, 'faces': [1, 2, 3, 4, 5, 6, 7, 8], 'points': {5: 1, 6: 1, 7: 1, 8: 1} } def throwDice(success_dice, fail_dice): success_points = 0 fail_points = 0 for x in xrange(0, success_dice['throws']): roll = random.choice(success_dice['faces']) success_points += success_dice['points'].get(roll, 0) for x in xrange(0, fail_dice['throws']): roll = random.choice(fail_dice['faces']) fail_points += fail_dice['points'].get(roll, 0) return success_points - fail_points for x in xrange(0, number_tests): if throwDice(success_dice, fail_dice) > 0: number_success += 1 else: number_fails += 1 percent_success = 100.0 * number_success / number_tests print "{} Success Dice and {} Failure Dice => {}% success ({} / {})".format(success_dice['throws'], fail_dice['throws'], percent_success, number_success, number_fails) Der Code sollte relativ selbsterklärend sein: Jede Würfelart kann konfiguriert werden: Wie viele es gibt, welche Ergebnisse es gibt und wie viel das Ergebnis wert ist. Es wird ein Erfolg gezählt, wenn min. 1 Erfolg übrig blieb. Nach 10000 Würfen bekommt man einen statistischen Mittelwert. Wenn es einen simplen Weg gibt, dass in eine rein mathematische Formel zu gießen - nur zu! Edit: off-by-one fix |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genau eine solche Formels suche ich ja.
Ich weiss dass die Wahrscheinlichkeit mit n Würfeln mit k Seiten mindestens eine x zu würfeln bei 1-(k-(x+1)/k)^n liegt. Allerdings hilft mir das hier nur begrenzt weiter, denn ich muss ja die Gesamtzahl an "Gewinnen" betrachten, um sie mit den "Verlusten" vergleichen zu können. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
BladeRunner hat Folgendes geschrieben: Ich weiss dass die Wahrscheinlichkeit mit n Würfeln mit k Seiten mindestens eine x zu würfeln bei 1-(k-(x+1)/k)^n liegt. Also die Wahrscheinlichkeit, eine x oder grösser zu würfeln? Müsste in dem Fall aber 1-((x-1)/k)^n sein oder? |
||
PSY LABS Games
Coders don't die, they just gosub without return |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Formel für 2 Würfel könnte man so hinschreiben:
Code: [AUSKLAPPEN] WÜRFEL 1 ======================= Fall A: 5,6,7 =3/8 + Fall B: 8 =1/8 ++ Fall C: 1,2,3,4 =4/8 o WÜRFEL 2 ======================= Fall X: 1234 =4/8 o Fall Y: 5678 =4/8 - FORMEL ====================== Erfolg= (A*X) + (B*X) + (B*Y) + (C*0) Kein Erfolg= (A*Y) + (B*0) + (C*X) + (C*Y) EINGESETZT: ===================== Erfolg= 3/8*4/8 + 1/8*4/8 +1/8*4/8 + 0 =12/64 + 4/64 + 4/64 =20/64 = 31,25% Kein Erfolg= 3/8*4/8 + 0 + 4/8*4/8 + 4/8*4/8 =12/64 + 16/64 + 16/64 =44/64 = 68,75% Für 2 "Erfolgswürfel" gibt es übrigens diese 5 Möglichkeiten: Code: [AUSKLAPPEN] Für 2 Erfolgs-Würfel: ++ +++ + ++++ o 2*(A*A + B*C) 2*A*B 2*A*C B*B C*C |
||
- Zuletzt bearbeitet von Midimaster am Di, Feb 27, 2018 12:19, insgesamt 4-mal bearbeitet
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
(50%*verlieren+62,5%*gewinnen)/n
ist unter 100% da gewin + verlieren = n sind @PSY 2 Würfel, 3 zustände = 2^3 = 8 wie kommst du auf 64 Zustände? es kommt auf gerade und ungerade an, weil es ein unentschieden geben kann |
||
between angels and insects |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
@jan
2 Würfel mit 3 Zuständen wären nicht 2^3, sondern 3^2, also 9 mögliche Zustände: A B C AA AB AC BA BB BC CA CB CC Es sind aber 2 Würfel mit unterschiedlichen Zuständen A B C X Y AX BX CX AY BY CY Das wären 6 Möglichkeiten hat also gar nix mit einer 8 oder einer 64 zu tun! Die "64" kommt von den Wahrscheinlichkeiten, da es sich ja um zwei 8-seitigen Würfel handelt 8^2=64 Und noch was zu den Wahrscheinlichkeiten in Prozent: Der Erste würfel liefert zu 3/8 also 37,5% Erfolg, den der zweite Würfel zu 50% wieder zerstören kann also 18.75% Der Erste würfel liefert aber auch in 1/8 aller Fälle also 12,5% Erfolg, den der zweite Würfel nicht zerstören kann also 12.5% Der Erste Würfel liefert in 50% aller Fälle Mißerfolg, auf die der zweite Würfel keinen Einfluß mehr hat. Code: [AUSKLAPPEN] 18,75% Erfolg
+ 12,50% Erfolg + 50,00% Mißerfolg + 18,75% Mißerfolg ================= = 100,00% |
||
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jan_ hat Folgendes geschrieben: @PSY 2 Würfel, 3 zustände = 2^3 = 8 wie kommst du auf 64 Zustände? Es gibt genau 8^2 = 64 Möglichkeiten, 2 8-seitige Würfel zu werfen. Von den möglichen 64 Würfen führen 20 zum gewünschten Ergebnis --> 20/64 = 31,25% Das mit den 3 Zuständen greift so nicht. Die Würfe bringen ja nicht die Zustände mit sich, sondern erst die Bewertung |
||
PSY LABS Games
Coders don't die, they just gosub without return |
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
Midimaster hat Folgendes geschrieben: Der Erste würfel liefert zu 3/8 also 37,5% Erfolg, den der zweite Würfel zu 50% wieder zerstören kann also 18.75% Der Erste würfel liefert aber auch in 1/8 aller Fälle also 12,5% Erfolg, den der zweite Würfel nicht zerstören kann also 12.5% Eben, und 18.75 + 12.5 = 31.25 QED Sorry, aus Versehen Doppelpost ![]() ![]() ![]() ![]() |
||
PSY LABS Games
Coders don't die, they just gosub without return |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
np @ Doppelpost, beide Postings tragen ja was sinnvolles bei. Du hast recht PSY, meine "mit n Würfeln mindestens eine x" -Formel war fehlerhaft. Man, ist das lange her.
aber eine allgemeingültige Lösung in Form einer Formel für beliebig viele Würfel scheint es nicht zu geben? Ich würde es ja vom Rechner durchrechnen lassen, allerdings (ob der benötigten Rekursion) wird das arg rasch den Stack sprengen. Bei 3 Würfeln sind es ja schon 521 Kombinationen, wenn ich nun zB 5 gegen 3 Würfel antreten lasse sind wir schon bei 16777216 Kombinationen die geprüft werden müssen. Daher hätte es mich halt auch gereizt das ganze als Formel zu haben. Konkret geht es mir ums Balancing für ein Würfelspiel, und es mag sein dass im Zuge dessen die Erfolgszahlen von mir halt auch noch angepasst werden. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmmmm,
mit ner allgemeinen Formel wirds schwierig. Fällt mir auf Anhieb kein Lösungsansatz ein. Bei 9 Würfeln braucht mein B3D auf meinem Rechner knapp über 9 Sekunden, um die komplette Rekursion durchzugehn. Also bis 9 Würfel sollte es kein Problem darstellen, die Gewinnwahrscheinlichkeit auszurechnen. Du kannst Dir aber auch einfach ein Programm schreiben, das Dir ne zeitlang x Würfel wirft und auswertet. Am Ende teilst Du einfach die Anzahl der Gewinne durch die Anzahl der absoluten Würfe. Je länger der Code läuft, umso genauer wird er. Sollte fürs Balancing Deines Würfelspiels mehr als ausreichen ![]() (edit) Hier haste mal n Code zum Testen. Voreingestellt sind 1 Erfolgswürfel und 1 Failwürfel. Sollte sich dann wie ausgerechnet auf 31.25% annähern. Je länger der Code läuft, desto genauer sollte das Ergebnis sein. Bei 5 Erfolgswürfeln und 3 Failwürfeln ist die Gewinnwahrscheinlichkeit ca. 72.768% Code: [AUSKLAPPEN] Const s = 1 ; Anzahl Erfolgswürfel
Const f = 1 ; Anzahl Failwürfel Const t = 10000000000 ; Anzahl Würfe SeedRnd ( MilliSecs() ) CastDices ( s, f, t ) WaitKey End Function CastDices# ( s, f, t ) Local x%, y%, i%, foo%, success%, win%, casts% For i = 1 To t For x=1 To s foo% = Rand ( 8 ) If foo>4 Then success = success + 1 If foo=8 Then success = success + 1 ; 8 gibt einen zusätzlichen Erfolg Next For y=1 To f foo% = Rand ( 8 ) If foo>4 Then success = success - 1 Next If success > 0 Then win = win + 1 ; Bei mindestens 1 Erfolg gewinnt der Spieler success = 0 casts = casts + 1 If casts Mod 1000000 = 0 Then Print "Erfolge: " + win * 100.0 / casts + "%" ; Alle 1 MIO Versuche die bis dahin aktuellen Erfolge in PROZENT ausgeben Next End Function PSY |
||
PSY LABS Games
Coders don't die, they just gosub without return |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hab da auch mal was gebastelt.
Zu Beginn des Codes gibt man beliebige Würfel als Typen ein. Und dann berechnet das Programm alle Kombinationen. Die Syntax ist... TWurfel.Add Seiten , [Wahrscheinlichkeiten] , [Erfolge] Die Wahrscheinlichkeiten und Erfolge werden als Array übergeben: TWurfel.Add 8, [1,3,4] , [2,1,0] bedeutet ein achtseitiger Würfel mit 3 Varianten 1 Seite mit Erfolg=2 3 Seiten mit Erfolg=1 4 Seiten mit Erfolg=0 BlitzMax: [AUSKLAPPEN] SuperStrict Das ganze ist natürlich heiß gestrickt und hingerotzt, aber funktioniert schon... |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wow, Midimaster, I'm impressed.
Ich habe mittlerweile einen Bruteforce-Ansatz hingesaut, der alle Kombinationen in einem Array durchgeht, aber deines schlägt das meinige was die Performance angeht um Längen. Dein Ansatz ist wirklich extremst interessant, das werd ich mal genauer zerlegen. Danke! Der Vollständigkeit halber mein Code: BlitzMax: [AUSKLAPPEN] SuperStrict |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
ah, jetzt weiß ich auch wie du auf die große Anzahl an Möglichkeiten kommst. Du gehts einfach wirklich jede Kombination jeder Seite der Würfel untereinander durch.
Ich berechne nur die Wahrscheinlichkeiten der einzelnen Würfel und kombiniere diese dann ntereinander. So kommst du auf 8x8x8 =512 Möglichkeiten bei 3 Würfeln Ich nur auf 3x3x2=18, weil ja der eine Würfeltyp "A" nur 3, der andere sogar Typ "B" nur 2 Varianten bietet. Der erste Würfel ist gewissermaßen nur "3-seitig", wobei jede Seite ungleichmäßig häufig auftritt. Die 8 benötige ich nur als Teiler, um die drei Wahrscheinlichkeiten 4/8, 3/8 und 1/8 zu berechnen. Ich konnte die theoretischen Möglichkeiten sogar innerhalb des Berechnungsprozesses weiter straffen, weil es bereits nach dem ersten beiden Würfen (mit 2 A-Würfeln mit 3x3 theoretíschen Kombinationen) in Wirklichkeiten nur 5 "Erfolgs"-Ergebnisse geben kann: 0,1,2,3,4. Und nach dem 3. Wurf (mit dem B-Würfel) sogar nur 6 statt der 18: -1,0,1,2,3,4,5 Mit dem vorliegenden Code kannsrt Du nun jede beliebige Anzahl und Kombination von "A"- und "B"-Würfeln austesten. Der Sinn der drei TResult Listen: Die AltListe enthält die Ergebnisse aller vorherigen Würfel. Die NeuListe wird mit den drei Wahrscheinlichkeiten des aktuellen Würfels gefüllt. In die Zielliste wird nun jede Kombination aus AltListe und NeuListe berechnet und dort eingetragen. Am Ende wird aus der ZielListe die AltListe für die nächste Runde In der Praxis muss man beim ersten Würfel etwas anders vorgehen. Die Neuliste wird direkt (ohne Berechnung) zur ZielListe und so auch zur AltListe für Würfel 2. Ab Würfel 2 läuft alles normal. Allerdings wird ab jetzt die ZielListe nach doppelten "Erfolg"-Werten untersucht und diese zusammengefasst. In meinem Code fehlt noch vollständig der Teil zum Bewerten der Ergebnisse. Hier müßte man dann final die letzte AltListe durchgehen und alle Eregnisse mit Erfolg>0 zusammen addieren. |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group