Estoy intentando averiguar qué probabilidad hay de sacar una determinada combinación de 6 puntuaciones de habilidad en Dragones y Mazmorras.
edit:
Dragones y Mazmorras es un juego de rol de mesa. Creas un personaje en un mundo de fantasía que tiene 6 estadísticas principales, Fuerza, Destreza, Constitución, Inteligencia, Sabiduría y Carisma. Estas puntuaciones de habilidad determinan los poderes que un personaje puede utilizar y su fuerza. Las puntuaciones de habilidad se tiran con 4 dados de 6 caras (4d6) y luego se usan las 3 puntuaciones más altas, lo que te da valores $\in [3, 18]$ para los posibles valores. Mi objetivo es calcular la probabilidad de obtener una combinación como (8, 8, 8, 8, 8) o (15, 14, 13, 12, 10, 8). /edit
Ya he calculado las probabilidades de sacar una sola estadística y una pregunta aquí confirmó que hice bien las cuentas:
3: $\frac{1}{1296}$ , 4: $\frac{4}{1296}$ , 5: $\frac{10}{1296}$ , 6: $\frac{21}{1296}$ , 7: $\frac{38}{1296}$ , 8: $\frac{62}{1296}$ , 9: $\frac{91}{1296}$ , 10: $\frac{122}{1296}$ , 11: $\frac{148}{1296}$ , 12: $\frac{167}{1296}$ , 13: $\frac{172}{1296}$ , 14: $\frac{160}{1296}$ , 15: $\frac{131}{1296}$ , 16: $\frac{94}{1296}$ , 17: $\frac{54}{1296}$ , 18: $\frac{21}{1296}$
Ahora, utilizando el mismo razonamiento, he conseguido calcular las probabilidades de las combinaciones basadas en la suma de las puntuaciones de las habilidades, pero sólo si los resultados son igualmente probables. Usé Python para calcular las probabilidades así:
def probability_of_outcomes(outcomes, repetitions, subsum=slice(None, None, None)):
probability_dict = {}
sum_combinations = 0
for c in combinations_with_replacement(outcomes, repetitions):
for p in set(permutations(c, repetitions)):
s = sum(sorted(p)[subsum])
if s in probability_dict:
probability_dict[s] += 1
else:
probability_dict[s] = 1
sum_combinations += 1
return probability_dict, sum_combinations
if __name__ == "__main__":
all_comb, num_combinations_stats = probability_of_outcomes(range(1, 7) 4, subsum=slice(1, None, None))
de la misma manera que puedo calcular:
abilities_comb, num_combinations_ability = probability_of_outcomes(range(3, 19) 6)
Ahora con el primer cálculo ya veo que no todos los números son igual de probables, pero no estoy seguro de dónde añadir esa probabilidad. Además el enfoque no es muy elegante, ya que simplemente pruebo todas las combinaciones posibles.
¿Alguna idea?
0 votos
No todo el mundo juega a DnD, por favor, explica con palabras sencillas qué probabilidad estás tratando de calcular.
1 votos
Parece que estás utilizando el método de "tirar cuatro dados e ignorar el más pequeño". ¿Es eso cierto?
0 votos
@MJD sí que es el método que uso en el primer ejemplo con el
subsum
. Pero cuando se especifica Ninguno, el código sólo toma todos los resultados (que es para la segunda llamada).0 votos
@orlp Voy a editar la pregunta