8 votos

Porcentaje de éxito de las probabilidades de ataque de Dungeons & Dragons

En D&D los jugadores tiran un dado de 20 caras tratando de superar un número establecido para determinar si un ataque da en el blanco. Los jugadores a menudo pueden añadir modificadores a esta tirada para ayudar a las probabilidades de alcanzar este número objetivo. Si el número objetivo (nivel de armadura del enemigo) es superado por la tirada de ataque, se produce un daño al objetivo que requiere una tirada diferente dependiendo de la potencia del ataque. Si el nivel de armadura es igualado por esa tirada de ataque, el daño se calcula de forma normal (tirando dados, añadiendo modificadores) y luego se reduce a la mitad, redondeando hacia abajo al número entero más cercano.

Uno de mis hechizos me permite hacer tres ataques a la vez sobre una criatura, y al impactar hace 2 dados de 6 caras +2 de daño.

Resulta que usé este hechizo con mi "Aliado" y estoy tratando de averiguar qué posibilidades tenía de matarlo realmente.

Tiro un 1d20 (1 dado de 20 caras) y añado +4 a la tirada y si ese resultado es mayor o igual a 16 (el nivel de Armadura de mis "Aliados"), tiro el daño que es 2d6+2 (redondeando a la mitad el daño si el ataque es igual al nivel de Armadura). El resultado del daño se resta de la salud inicial de mis "aliados", que es 20.

Repito esto 2 veces más, añadiendo daño en cada golpe. Si su salud se reduce a 0 entonces está muerto. Si su salud es 1 o más al final de este ataque, vive y puede atacarme.

Quiero saber, estadísticamente qué porcentaje de tiempo se reducirá mi Ally a 0 de salud después de hacer este hechizo?

11voto

jldugger Puntos 7490

ArcMap respeta el tamaño de letra por defecto del sistema operativo. Puede cambiar el tamaño de la fuente en su panel de control. También puede activar la ampliación para que todas las aplicaciones "clásicas" de Windows sean más grandes y legibles.

6voto

AdamSane Puntos 1825

Así que si sacas 12 igualas exactamente su clase de armadura, y si sacas más, la superas.

Eso es 11/20 posibilidades de 0 daños, 1/20 posibilidades de $\lfloor\frac{_1}{^2}$ (2d6+2) $\rfloor$ y 8/20 de probabilidad de 2d6+2.

                         Damage distribution (prob x 36)
Event       Prob     0    1    2    3    4    5    6    7    8    9   10   11   12   13   14 
 Hit        0.40                         1    2    3    4    5    6    5    4    3    2    1
Just hit    0.05               3    7   11    9    5    1
 Miss       0.55    36

Así que el incondicional la distribución de los daños por ataque es:

                         Damage distribution (prob x 36 x 20)
                     0    1    2    3    4    5    6    7    8    9   10   11   12   13   14 
(Prob x 36 x 20)   396    0    3    7   19   25   29   33   40   48   40   32   24   16    8 
    Prob %        55.0  0.0 0.42 0.97 2.64 3.47 4.03 4.58 5.56 6.67 5.56 4.44 3.33 2.22 1.11

La convolución del daño de tres de estos ataques es:

Dam        0    1    2    3    4    5    6    7    8    9   10   11   12   13   14 
Prob%  16.64 0.00 0.38 0.88 2.40 3.16 3.71 4.29 5.32 6.55 5.82 5.17 4.61 4.11 3.58 

Dam       15   16   17   18   19   20   21   22   23   24   25   26   27   28   29 
Prob%   2.96 3.26 3.44 3.46 3.28 2.98 2.62 2.21 1.79 1.42 1.14 0.94 0.79 0.68 0.59 

Dam       30   31   32   33   34   35   36   37   38   39   40   41   42 
Prob%   0.50 0.41 0.31 0.23 0.16 0.10 0.06 0.03 0.02 0.01 0.00 0.00 0.00 

(Aunque el cálculo de la convolución es sencillo, esta convolución se realizó utilizando el convolve en R.)

enter image description here

La probabilidad de hacer 20 o más daños = 16,99735%

Es decir, la probabilidad deseada es esencialmente del 17%.

(Curiosamente, esta es la misma probabilidad que la de hacer ningún daño .)

El daño medio en tres ataques es de 11,44, el daño medio es de 11.


Incorporación de los crits:

                         Damage distribution (prob x 36)

Event       Prob                         8   10   12   14   16   18   20   22   24   26   28 
 Crit       0.05                         1    2    3    4    5    6    5    4    3    2    1

Event       Prob     0    1    2    3    4    5    6    7    8    9   10   11   12   13   14 
 Hit        0.35                         1    2    3    4    5    6    5    4    3    2    1
Just hit    0.05               3    7   11    9    5    1
 Miss       0.55    36

La distribución incondicional de los daños por ataque es:

                     Damage distribution (prob x 36 x 20)
          0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
(Px720) 396  0  3  7 18 23 26 29 36 42 37 28 24 14 11  0  5  0  6  0  5  0  4  0  3  0  2  0  1

La convolución para tres ataques es:

Dam     0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   
Pr% 16.64 0.00 0.38 0.88 2.27 2.91 3.33 3.78 4.79 5.73 5.33 4.49 4.35 3.49 3.50 

       15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   
     2.42 3.29 2.80 3.60 2.73 3.18  2.30 2.54 1.74 1.88 1.31 1.44 1.07 1.14 0.91 

       30   31   32   33   34   35   36   37   38   39   40  >40
     0.86 0.74 0.68 0.55 0.51 0.39 0.37 0.26 0.26 0.18 0.19 0.78

enter image description here

Por lo que obtenemos Prob(daño $\geq$ 20) = 23.28396 %

5voto

rMatey180 Puntos 31

Una forma de conseguirlo de forma bastante sencilla es a través de la simulación: no obtendrás el porcentaje exacto hasta el segundo decimal, pero puedes acercarte mucho a él. A continuación he introducido un código R que simulará las tiradas que estás haciendo y escupirá la probabilidad de que tu aliado muera.

# Creating a hundred thousand sets of your three rolls to hit     
roll.1 <- sample(1:20, replace = TRUE, 100000)
roll.2 <- sample(1:20, replace = TRUE, 100000)
roll.3 <- sample(1:20, replace = TRUE, 100000)

# Creating a hundred thousand sets of three damage rolls
damage.1 <- replicate(100000, (sample(1:6, 1) + sample(1:6, 1) + 2))
damage.2 <- replicate(100000, (sample(1:6, 1) + sample(1:6, 1) + 2))
damage.3 <- replicate(100000, (sample(1:6, 1) + sample(1:6, 1) + 2))

# Here we calculate the damage of each roll. Essentially this line is saying
# "Apply the full damage if the hit roll was 13 or more (13 + 4 = 17), and 
# apply half the damage if the roll was 12." Applying zero damage when the roll
# was less than 12 is implicit here.
hurt.1 <- ((roll.1 >= 13) * damage.1 + floor((roll.1 == 12) * damage.1 * .5))
hurt.2 <- ((roll.2 >= 13) * damage.2 + floor((roll.2 == 12) * damage.2 * .5))
hurt.3 <- ((roll.3 >= 13) * damage.3 + floor((roll.3 == 12) * damage.3 * .5))

# Now we just subtract the total damage from the health
health <- 20 - (hurt.1 + hurt.2 + hurt.3)

# And this gives the percentage of the time you'd kill your ally.
sum(health <= 0)/1000000

Cuando ejecuto esto, obtengo consistentemente entre 16.8% y 17.2%. Así que tienes un 17% de posibilidades de matar a tu aliado con este hechizo.

Si te interesa, el siguiente código también calcula la probabilidad exacta utilizando el método descrito en la respuesta de Micah. Resulta que la probabilidad exacta es del 16,99735%.

# Get a vector of the probability to hit 0, 1, 2, and 3 times. Since you can
# only kill him if you get 2 hits or more, we only need the latter 2 probabilities
hit.times <- (dbinom(0:3, 3, 9/20))

# We'll be making extensive use of R's `outer` function, which gives us all
# combinations of adding or multiplying various numbers - useful for dice 
# rolling
damage.prob <- table(outer(1:6, 1:6, FUN = "+") + 2)/36

damage.prob <- data.frame(damage.prob)
colnames(damage.prob) <- c("Damage", "Prob")
damage.prob$Damage <- as.numeric(as.character(damage.prob$Damage))

# Since we'll be multiplying by the probability to hit each number of times 
# later, we just use 8/9 as the probability to get full damage, and 1/9 as 
# the probability of half damage.
damage.prob.full <- data.frame("Damage" = damage.prob$Damage, "Prob" = damage.prob$Prob * 8/9)
damage.prob.half <- data.frame("Damage" = damage.prob$Damage * .5, "Prob" = damage.prob$Prob * 1/9)

# Rounding down the half damage
damage.prob.half$Damage <- floor(damage.prob.half$Damage)
damage.prob.half <- aggregate(damage.prob.half$Prob, by = list(damage.prob.half$Damage), FUN = sum)
colnames(damage.prob.half) <- c("Damage", "Prob")

damage.prob.total <- merge(damage.prob.full, damage.prob.half, by = "Damage", all.x = TRUE, all.y = TRUE)
damage.prob.total$Prob <- rowSums(cbind(damage.prob.total$Prob.x, damage.prob.total$Prob.y), na.rm=TRUE)

# Below I'm multiplying out all the damage probabilities for 2 and 3 hits, then
# summing the probabilities of getting each damage total that equals 20 or more.

damage.2 <- outer(damage.prob.total$Damage, damage.prob.total$Damage, FUN = '+')
prob.kill.2 <- sum(outer(damage.prob.total$Prob, damage.prob.total$Prob)[damage.2 >= 20])

damage.3 <- outer(outer(damage.prob.total$Damage, damage.prob.total$Damage, FUN = "+"), damage.prob.total$Damage, FUN = "+")

prob.kill.3 <- outer(outer(damage.prob.total$Prob, damage.prob.total$Prob), damage.prob.total$Prob)[damage.3 >= 20]

# Now we just multiply the probability of killing with 2 hits by the probability
# of hitting twice, and the same for 3 hits. Adding that together we get the 
# answer.

sum(prob.kill.2)*hit.times[3] + sum(prob.kill.3)*hit.times[4]

1voto

Laconic Droid Puntos 121

Tienes que dividirlo. Empieza con un intento. Tienes una probabilidad de 1/20 de sacar exactamente su clase de armadura y tienes un cambio de 8/20 de vencerla [13-20].

Así que se tiene una distribución de probabilidad de los daños que es una mezcla de tres casos: 0 con probabilidad 11/20, 2d6+2 con probabilidad 8/20 y 2d6+2/2 con probabilidad 1/20.

Supongamos que superas su CA, entonces la distribución de 2d6+2 puede descomponerse en

 p     dmg    total
1/36 : 2+2  = 4
2/36 : 2+3  = 5
3/36 : 2+4  = 6
4/36 : 2+5  = 7
5/36 : 2+6  = 8
6/36 : 2+7  = 9
5/36 : 2+8  = 10
4/36 : 2+9  = 11
3/36 : 2+10 = 12
2/36 : 2+11 = 13
1/36 : 2+12 = 14

Luego tienes que ajustar esas probalidades por el hecho de que tienes una probabilidad de 8/20 de que ocurra:

 dmg prob   
 4   0.011111 
 5   0.022222 
 6   0.033333 
 7   0.044444 
 8   0.055556 
 9   0.066667 
 10  0.055556 
 11  0.044444 
 12  0.033333 
 13  0.022222 
 14  0.011111 

Si aciertas por la mitad, entonces tienes que volver a multiplicar por 1/20

   dmg  prob     
     2  0.0013889  
     2  0.0027778  
     3  0.0041667  
     3  0.0055556  
     4  0.0069444  
     4  0.0083333  
     5  0.0069444  
     5  0.0055556  
     6  0.0041667  
     6  0.0027778  
     7  0.0013889  

Así que ahora tienes varias formas de obtener 4,5,6,7 dmg, ya que se trata de una relación OR (4 OR 5 OR 6 OR 7) sumas las probabilidades de que esas cosas ocurran:

dmg prob     
 0                                   = 0.55
 2  0.0013889 + 0.0027778            = 0.0041667
 3  0.0041667 + 0.0055556            = 0.0097223
 4  0.0069444 + 0.0083333 + 0.011111 = 0.0263887
 5  0.0069444 + 0.0055556 + 0.022222 = 0.0347220
 6  0.0041667 + 0.0027778 + 0.033333 = 0.0402775
 7  0.0013889             + 0.044444 = 0.0458329
 8  0.055556                         = 0.055556
 9  0.066667                         = 0.066667
 10 0.055556                         = 0.055556
 11 0.044444                         = 0.044444
 12 0.033333                         = 0.033333
 13 0.022222                         = 0.022222
 14 0.011111                         = 0.011111
 SUM                                   1

Para hacer esto tres veces, tienes que calcular todas las formas posibles de romper el número que quieres (20) y sumar las probabilidades de que ocurra cada una de ellas. La probabilidad de que ocurra A Y B es el producto de las (o 3) probabilidades. Así, por ejemplo, una posibilidad es un 14 Y un 6, la probabilidad de que ocurra es 0,11111*0,04. Puedes hacerlo más fácil asumiendo que obtienes un número para la primera tirada y luego sumando las probabilidades que resultarán en > 20). Así que asumirías que obtendrás un 14 en la primera tirada y luego multiplicarías la probabilidad de que eso ocurra Y la probabilidad de obtener más de 6 en la siguiente tirada (6 O 7 O ...). Entonces sería P_14*(P_6+P_7+P_8+...P_20), es decir, la probabilidad de sacar un 14 Y (6 O 7 O ...). Entonces habría que decir cuál es la probabilidad de (2 Y 4 Y 14) O (2 Y 5 Y (13 O 14)) O (2 Y 6 Y (12 O 13 O 14)) ... y así sucesivamente. La última parte se la dejo a usted. Supongo que querrás hacer algo de programación.

También es posible llegar a una fórmula general, pero será grande.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X