Kokujou
Lieutenant
- Registriert
- Dez. 2017
- Beiträge
- 948
Hallo~
Ich hab ein kleines stochastisches Problem und wollte mal kurz überprüfen ob ich richtig gedacht habe:
Gegeben sei ein Kartenspiel. Jede Karte kann mit einer bestimmten wahrscheinlichkeit P eingesammelt zu werden. Um einen "Yaku" y zu bekommen müssen c(y) eingesammelt werden. Gesucht ist nun die Wahrscheinlichkeit diesen Yaku y erlangen zu können.
Zu beachten ist dass auch mehr als c(y) Karten zu einem Yaku gehören können.
Mein Ansatz dabei ist erstmal c(y)-1 Karten blind aufzumultiplizieren, das ist die Basiswahrscheinlichkeit.
Dann summiere ich alle restlichen Wahrscheinlichkeiten auf und multipliziere das mit der Basiswahrscheinlichkeit.
Da die Reihenfolge der Karten ja egal ist hatte ich gehofft dass das ausreicht, ich bin mir aber nicht sicher, ob das so legitim ist.
Ich habs nochmal in C# formuliert:
Ich hab ein kleines stochastisches Problem und wollte mal kurz überprüfen ob ich richtig gedacht habe:
Gegeben sei ein Kartenspiel. Jede Karte kann mit einer bestimmten wahrscheinlichkeit P eingesammelt zu werden. Um einen "Yaku" y zu bekommen müssen c(y) eingesammelt werden. Gesucht ist nun die Wahrscheinlichkeit diesen Yaku y erlangen zu können.
Zu beachten ist dass auch mehr als c(y) Karten zu einem Yaku gehören können.
Mein Ansatz dabei ist erstmal c(y)-1 Karten blind aufzumultiplizieren, das ist die Basiswahrscheinlichkeit.
Dann summiere ich alle restlichen Wahrscheinlichkeiten auf und multipliziere das mit der Basiswahrscheinlichkeit.
Da die Reihenfolge der Karten ja egal ist hatte ich gehofft dass das ausreicht, ich bin mir aber nicht sicher, ob das so legitim ist.
Ich habs nochmal in C# formuliert:
C#:
foreach (YakuProperties yakuProp in this)
{
if (!yakuProp.IsPossible) continue;
int count = 0;
float baseProb = 1;
float addProb = 0;
foreach (CardProperties cardProp in cardProperties)
{
if (!yakuProp.yaku.Contains(cardProp.card)) continue;
if (cardProp.Probability > 0)
{
count++;
baseProb *= cardProp.Probability;
if (count >= yakuProp.yaku.minSize - 1)
{
addProb += cardProp.Probability;
}
}
}
yakuProp.Probability = baseProb * addProb;
}