[mathjax]
En promedio ¿en qué ronda voy a obtener mi carta core?
Puedes leer la parte anterior de esta serie aquí
Ahora estamos hablando de valor esperado. Para una variable aleatoria discreta, este se define como:
Aquí he escrito como algo que normalmente se denota sin la estrella. Para distinguirla de otra variable que vamos a usar después.
Esto es: la sumatoría de la probabilidad de cada evento multiplicada por el evento en si. Para un dado de seis caras (d6) sería
Esto quiere decir que, en promedio, nuestras tiradas de un d6 van a resultar en un El valor esperado de muchas variables aletorias es el la media (promedio) debido, en parte, a la ley fuerte de los grandes números, de la cual ya hemos hablado antes.
Para nuestro deck de arkham este valor esperado se calcularía de la siguiente manera. Primero vamos a suponer que seguimos la estrategía anterior, es decir, hicimos nuestro mulligan de 5 cartas, usamos nuestras primeras tres acciones para tomar tres cartas y tomamos nuestra carta de upkeep. También vamos a suponer que en todas las rondas subsecuentes solo tomamos nuestra carta de upkeep. Entonces:
Para cualquier ronda tenemos que calcular dos probabilidades (1) la probabilidad de que saquemos la carta que queremos. A esta probabilidad le vamos a llamar (2) La probabilidad de que no hayamos sacado esa carta en las rondas anteriores (siendo un poco liberales con la notación)
La probabilidad (1) es muy fácil. Si es el número de cartas que quedan al principio de la ronda. la probabilidad de que saquemos nuestra carta core es
La forma de calcular (2) es un poco más elaborada.
Esa pi mayúscula significa producto, y toda la expresión quiere decir que vamos a multiplicar todas las probabilidades de que no hayamos sacado la carta core en cada ronda anterior. Por ejemplo, para
Recordemos que es la probabilidad de que no tengamos nuestra carta core en la primera ronda de acuerdo a nuestro modelo anterior, y tenemos que para
Vamos a utilizar y para calcular
Esto debido a que la probabilidad de que ocurra el evento , es decir que en la ronda sea cuando tomamos nuestra carta core, es la probabilidad de que tomemos la carta () y no la hayamos tomado en las rondas anteriores a esta (). Las probabilidades se multiplican porque se trata de eventos independientes. Pero esta serie se esta volviendo un poco más complicada de lo que esperaba entonces no voy a explicar independencia… aunque debería.
Finalmente, nuestro valor esperado se calcularía como:
Y en forma de bonita tabla:
1 | 33 | 0.419 | 0.581 | 1.0000 | 0.4194 |
2 | 24 | 0.042 | 0.958 | 0.5806 | 0.0484 |
3 | 23 | 0.043 | 0.957 | 0.5565 | 0.0726 |
4 | 22 | 0.045 | 0.955 | 0.5323 | 0.0968 |
5 | 21 | 0.048 | 0.952 | 0.5081 | 0.1210 |
6 | 20 | 0.050 | 0.950 | 0.4839 | 0.1452 |
7 | 19 | 0.053 | 0.947 | 0.4597 | 0.1694 |
8 | 18 | 0.056 | 0.944 | 0.4355 | 0.1935 |
9 | 17 | 0.059 | 0.941 | 0.4113 | 0.2177 |
10 | 16 | 0.063 | 0.938 | 0.3871 | 0.2419 |
11 | 15 | 0.067 | 0.933 | 0.3629 | 0.2661 |
12 | 14 | 0.071 | 0.929 | 0.3387 | 0.2903 |
13 | 13 | 0.077 | 0.923 | 0.3145 | 0.3145 |
14 | 12 | 0.083 | 0.917 | 0.2903 | 0.3387 |
15 | 11 | 0.091 | 0.909 | 0.2661 | 0.3629 |
16 | 10 | 0.100 | 0.900 | 0.2419 | 0.3871 |
17 | 9 | 0.111 | 0.889 | 0.2177 | 0.4113 |
18 | 8 | 0.125 | 0.875 | 0.1935 | 0.4355 |
19 | 7 | 0.143 | 0.857 | 0.1694 | 0.4597 |
20 | 6 | 0.167 | 0.833 | 0.1452 | 0.4839 |
21 | 5 | 0.200 | 0.800 | 0.1210 | 0.5081 |
22 | 4 | 0.250 | 0.750 | 0.0968 | 0.5323 |
23 | 3 | 0.333 | 0.667 | 0.0726 | 0.5565 |
24 | 2 | 0.500 | 0.500 | 0.0484 | 0.5806 |
25 | 1 | 1.000 | 0.000 | 0.0242 | 0.6048 |
De modo que, en promedio, vamos a tomar nuestra carta core en la ronda 8.25
Una vez más, programaticamente
def RoundCore():
R = 1
ad = PlayerDeck([
Card(name='Forbidden Knowledge', kind='asset'),
Card(name='Holy Rosary', kind='asset'),
Card(name='Shrivelling', kind='asset', core=True),
Card(name='Scrying', kind='asset'),
Card(name='Arcane Studies', kind='asset'),
Card(name='Arcane Initiate', kind='asset'),
Card(name='Drawn to the Flame', kind='event'),
Card(name='Ward of Protection', kind='event'),
Card(name='Blinding Light', kind='event'),
Card(name='Fearless', kind='skill'),
Card(name='Leather Coat', kind='asset'),
Card(name='Scavenging', kind='asset'),
Card(name='Baseball Bat', kind='asset'),
Card(name='Rabbit\'s Foot', kind='asset'),
Card(name='Stray Cat', kind='asset'),
Card(name='Dig Deep', kind='asset'),
Card(name='Cunning Distraction', kind='event'),
Card(name='Look what I found!', kind='event'),
Card(name='Lucky!', kind='event'),
Card(name='Survival Instinct', kind='skill'),
Card(name='Heirloom of Hyperborea: Artifact from Another Life', kind='asset'),
Card(name='Dark Memory', kind='weakness'),
Card(name='Haunted', kind='weakness'),
Card(), Card(), Card(), Card(), Card(), Card(), Card(), Card(), Card(), Card(),
])
for i in range(2):
j = 0
while j < 5:
if ad.draw(initial=True).core:
return R
j+=1
else:
ad.mulligan(r=5)
j = 0
while j < 4:
if ad.draw().core:
return R
j+=1
while True:
R += 1
c = ad.draw()
if c.core:
return R
Lenguaje del código: PHP (php)
rounds = 0
tries = 100000
for i in range(tries):
rounds += RoundCore()
print("In avarage, the core card was drawed in the round:", rounds / tries)
Lenguaje del código: PHP (php)
In avarage, the core card was drawed in the round: 8.26042
Lenguaje del código: CSS (css)
Que una vez más es bastante cercano a nuestro modelo
¿Qué podemos concluir?
Personalmente no creo que valga la pena gastar acciones en tomar cartas después de la primera ronda, porque el encounter deck te va a poner el pie tan rápido como pueda. Entonces creo que si aun con la estrategia de Mulligan y tomar 3 cartas no tienes tu core en la mano, necesitas estar lista para adaptar tu estrategia.
Esta es la segunda parte de tres en una mini serie de probabilidad en Arkham Horror. Puedes leer las otras dos partes aquí:
- ¿Cuál es la probabilidad de que tenga mi carta core al final de la primera ronda?
- ¿Qué valor de skill necesito para pasar un skill check?
Anya es actuaria, nuestra CRO, y ha pasado los últimos años llevando su conocimiento de datos e investigación de operaciones al Software y al Diseño. Está obsesionada con los juegos de mesa, su diseño y sus mecánicas. También colecciona sistemas de juegos de rol que jamás juega. Cree que Nolan’s Batman is overrated y va a pasar horas hablando de eso si se lo permiten.
SCRUM | Design [Sprint] Thinking | Python | Fate Core | PbtA | 35 mm
Anya es actuaria, nuestra CRO, y ha pasado los últimos años llevando su conocimiento de datos e investigación de operaciones al Software y al Diseño. Está obsesionada con los juegos de mesa, su diseño y sus mecánicas. También colecciona sistemas de juegos de rol que jamás juega. Cree que Nolan’s Batman is overrated y va a pasar horas hablando de eso si se lo permiten.
SCRUM | Design [Sprint] Thinking | Python | Fate Core | PbtA | 35 mm