[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 p^\ast_i 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 3.5 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 r; r \ge 2 tenemos que calcular dos probabilidades (1) la probabilidad de que saquemos la carta que queremos. A esta probabilidad le vamos a llamar p_r (2) La probabilidad de que no hayamos sacado esa carta en las rondas anteriores (siendo un poco liberales con la notación) \hat q_r

La probabilidad (1) es muy fácil. Si n_r 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 r=4

Recordemos que 0.58 es la probabilidad de que no tengamos nuestra carta core en la primera ronda de acuerdo a nuestro modelo anterior, y tenemos que para r=1

Vamos a utilizar p_r y \hat q_r para calcular p^{\ast}_r

Esto debido a que la probabilidad de que ocurra el evento r, es decir que en la ronda r sea cuando tomamos nuestra carta core, es la probabilidad de que tomemos la carta (p_r) y no la hayamos tomado en las rondas anteriores a esta (\hat q_r). 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:

rn_rp{1-p}\hat q_rr p \hat q_r
1330.4190.5811.00000.4194
2240.0420.9580.58060.0484
3230.0430.9570.55650.0726
4220.0450.9550.53230.0968
5210.0480.9520.50810.1210
6200.0500.9500.48390.1452
7190.0530.9470.45970.1694
8180.0560.9440.43550.1935
9170.0590.9410.41130.2177
10160.0630.9380.38710.2419
11150.0670.9330.36290.2661
12140.0710.9290.33870.2903
13130.0770.9230.31450.3145
14120.0830.9170.29030.3387
15110.0910.9090.26610.3629
16100.1000.9000.24190.3871
1790.1110.8890.21770.4113
1880.1250.8750.19350.4355
1970.1430.8570.16940.4597
2060.1670.8330.14520.4839
2150.2000.8000.12100.5081
2240.2500.7500.09680.5323
2330.3330.6670.07260.5565
2420.5000.5000.04840.5806
2511.0000.0000.02420.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í:

Aprende Sheets: Curso práctico de Hojas de cálculo de Google
Aprende Sheets: Curso práctico de Hojas de cálculo de Google