Stochastik: kombinierte Würfelwürfe

Übersicht Sonstiges Gamedesign

Neue Antwort erstellen

BladeRunner

Moderator

Betreff: Stochastik: kombinierte Würfelwürfe

BeitragSo, Feb 15, 2015 21:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
folgende Situation: Ich möchte für ein (nicht programmiertes) Game die Wahrscheinlichkeiten für das Eintreten bestimmter kombinierter Würfelwürfe berechnen. Klingt erst mal trivial, scheint es aber nicht zu sein.

Ein Beispiel: Ich würfele mit zwei W6 (sechsseitigen Würfeln) und bilde die Summe der Würfe.
Ich kann also Ergebnisse von 2-12 erreichen. Die Wahrscheinlichkeit ist aber nicht linear verteilt, eine 2 ist nur bei dem Würfelwurf 1/1 erreichbar, für eine drei gibt es schon folgende Möglichkeiten: 1/2,2/1, für die 4 als Ergebnis ist es dann 1/3,3/1,2/2.

Dieses Ergebnis entspricht der Gaußschen Normalverteilung.

Nun zu meinem Problem: Ich kann für eine beliebige Anzahl Würfel leicht ermitteln welchen Wertebereich sie abdecken: Anzahl Würfel bis Anzahl würfel*Seiten pro Würfel.
Ich kenne auch die Gesamtanzahl an Kombinationen: Würfelseiten^Anzahl Würfel.

Gibt es aber eine Formel um für jeden beliebigen Wert eines solchen Summenszenarios die Wahrscheinlichkeit zu ermitteln OHNE sie händisch abzuzählen?

Beispiel: 3W6 - wie hoch ist die Wahrscheinlichkeit eine Summe von 9 zu erreichen?
Diese Formel sollte idealerweise nicht nur für beliebige Mengen gleicher Würfel gelten sondern auch für die Kombination verschiedener Würfel, Beispiel 2W6+3W10, wie hoch ist die Wahrscheinlichkeit eine 25 zu erreichen?


Hat jemand eine zündende Idee?
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

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Feb 16, 2015 0:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab's auch nur mit zusammenrechnen einzelner Werte geschafft, dabei wird durch Rekursion auch schnell mal ein Stapelüberlauf produziert Confused

Code: [AUSKLAPPEN]
Graphics 800,800,0,2
SetBuffer FrontBuffer()

Const MAXW=6
Const MAXS=24

Global AW%=Int(Input$("Anzahl Würfel: "))
If AW>MAXW Then RuntimeError "Zu viele Würfel (max. "+MAXW+")"

Global AS%=Int(Input$("Anzahl Seiten: "))
If AS>MAXS Then RuntimeError "Zu viele Seiten (max. "+MAXS+")"

Dim W(AW+1) ;Einzelne Würfel
Dim Z(MAXW*MAXS) ;Summenrechner

Global Werte=AS*AW

Local Count

;WÜRFELRESET
For Count=1 To AW
   W(Count)=1
Next

Zaehlen()

Print
Print "Summe / Wahrscheinlichkeit"
For Count=AW To Werte
   Print Count+" / "+Z(Count)
   Rect Count*10,790-Z(Count)*(800.0/Werte^2),10,10,1
Next

WaitKey
Cls



Function Zaehlen()
   Local Count
   Local Temp
   
   Temp=0
   For Count=1 To AW
      Temp=Temp+W(Count)
   Next
   
   Z(Temp)=Z(Temp)+1
   
   For Count=1 To AW
      If W(Count)<AS Then W(Count)=W(Count)+1:Exit Else W(Count)=1
   Next
   
   If KeyHit(1) Then End
   If Not Temp=Werte Zaehlen
End Function

Ich bin mir auch nicht sicher ob das möglich ist, da du ja nicht die Wahrscheinlichkeit einer bestimmten Zahl, sondern die Summe aller Kombination als Wahrscheinlichkeit haben möchtest. Dadurch ist es unausweichlich zu jeder Summe die Werte anderer "Wahrscheinlichkeiten" mit einzubeziehen.

Bei einem Wurf mit einem W6 wäre es ja mit 1/6 Wahrscheinlichkeit angegeben. Kenne ich nun den ersten Wert, kann ich den zweiten Wurf erneut mit 1/6 Wahrscheinlichkeit angeben. Ergibt also 1/6 zu 1/6 (Baumdiagramm).

Wenn ich nun aber die Wahrscheinlichkeit der Gesamtsumme wissen möchte, muss ich ja auch die "nebenliegende" Werte berücksichtigen und mit einbeziehen. Das heisst: 2 und 3 sind wie 3 und 2 wie auch 4 und 1 wie auch 1 und 4.

Das dumme dabei ist, dass die Gausche-Normalverteilung hier nicht immer gilt. Wie im Beispielcode ersichtlich, ist bei einem Würfel die Wahrscheinlichkeitskurve flach. Bei zwei Würfeln eine kantige Pyramide und bei mehr als zwei Würfel erst eine Kurve zu erkennen.

Das heißt, eine runter gebrochene Kurve aus einer detailierten Tabelle (wie man es zum Teil früher bei Sinuskurven gemacht hat) ist hier meiner Meinung nach nicht möglich. Aber ich lasse mich gerne überraschen und werde mal weiter grübeln. Very Happy
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
  • Zuletzt bearbeitet von hectic am Mo, Feb 16, 2015 1:05, insgesamt einmal bearbeitet

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Feb 16, 2015 0:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry für Doppelpost, hab echt gewartet ... Dabei wurde es bereits hoch geladen

Edit1 egal, weils Spaß macht hier noch mal mein Ansatz ohne Rekursion

Code: [AUSKLAPPEN]
Graphics 800,200,0,2
SetBuffer FrontBuffer()

Local AW%=Int(Input$("Anzahl Würfel die ins Spiel geworfen werden: "))
Local AS%=Int(Input$("Anzahl Seiten die jeweils ein Würfel hat: "))
Local WS%=Int(Input$("Welche Summe soll geprüft werden: "))

Print
Print "Die Summe "+WS+" kommt bei "+AW+" Würfel mit jeweils "+AS+" Seiten mit einer Wahrscheinlichkeit von "+Ausgeben(WS,AW,AS)+"%"
WaitKey

Function Ausgeben#(FValue,FThrow,FSides)
   
   If FValue<FThrow Then RuntimeError "Angegebener Wert zu klein"
   If FValue>FSides*FThrow Then RuntimeError "Angegebener Wert zu groß"
   
   Local Bank=CreateBank(FThrow)
   Local Maximus#=FSides^FThrow
   Local Loop1
   Local Loop2
   Local Value
   Local Score#=0
   Local Pos
   
   For Loop1=0 To FThrow-1
      PokeByte(Bank,Loop1,1)
   Next
   
   For Loop1=0 To Maximus-1
      
      Value=0
      For Loop2=0 To FThrow-1
         Value=Value+PeekByte(Bank,Loop2)
      Next
      
      If Value=FValue Then Score=Score+1
      
      Pos=0
      Repeat
         If KeyHit(1) Then End
         PokeByte(Bank,Pos,PeekByte(Bank,Pos)+1)
         If PeekByte(Bank,Pos)>FSides Then
            PokeByte(Bank,Pos,1)
            Pos=Pos+1
         Else
            Exit
         End If
      Forever
   Next
   
   FreeBank Bank
   Return (100*Score/Maximus)
   
End Function

Mach doch ein Wettbewerb, wer den besten Code schreibt Laughing

DAK

BeitragMo, Feb 16, 2015 10:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Geht's dir darum es zu berechnen oder willst du nur die Ergebnisse haben? Im 2. Fall schau dir diese Seite an.

Möchtest du es berechnen, dann schau hier hin.
Gewinner der 6. und der 68. BlitzCodeCompo

PSY

BeitragMi, Feb 25, 2015 4:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi...

Willst Du die Wahrscheinlichkeiten berechnen, damit Du weisst welche Wuerfel Du spaeter zwecks gutem balancing im Game verwendest? Oder soll das prinzipiell waehrend der Laufzeit geschehen?

Cheers,
PSY
PSY LABS Games
Coders don't die, they just gosub without return

BladeRunner

Moderator

BeitragMi, Feb 25, 2015 10:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ersteres - für während des spieles wäre das deutlich zu aufwändig Wink
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

DAK

BeitragMi, Feb 25, 2015 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
In diesem Fall sollte dir das Tool dann ja alles geben was du brauchst, oder? Wink
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht Sonstiges Gamedesign

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group