Supongamos que hay dos jugadores $A$, $B$ jugar a un juego de dados, $A$ tiene un normal dados cuyas caras están numeradas del 1 al 6, $B$, por otro lado, tiene un (regular) icosaedro dados con las caras numeradas del 1 al 20. En cada ronda, $A$ rollos sus dados 3 veces y obtener la suma como su puntuación, mientras que $B$ rollos de una sola vez y obtener el resultado en forma de su puntuación, y la que tiene la mayor puntuación gana y obtiene 1 punto. Si las puntuaciones son iguales, entonces se pueden obtener de 0,5 puntos. Es este un juego justo?
Un cálculo rápido muestra que los resultados esperados para ambos jugadores son de 3.5, por lo que parece que es perfectamente justo. Pero para mi sorpresa, cuando me estaba haciendo un Monte Carlo en Python, la programación me dijo, de 10^5 simulaciones, $A$ sólo cuenta con alrededor de 48.el x% de la total de 10^5 puntos, y un 1.el x% de la desventaja era constante a través de varias pruebas.
Ahora paso a una más complicado que la versión. Esta vez vamos a introducir un nuevo reproductor $C$, que juega con exactamente la misma regla de $B$. De nuevo, cada ronda, el jugador con la puntuación más alta gana; si dos jugador tiene la misma puntuación que son más altos que en el tercer jugador, que luego pueden obtener 1/2 puntos; y si los tres tienen la misma puntuación, a continuación, obtener toda 1/3 puntos. Es este un juego justo?
Pensé que con un firme "sí" por las mismas razones que antes. Pero los resultados de la simulación totalmente sorprendido de mí, mucho más que el anterior 1.x% de diferencia: ahora en el juego de 3 jugadores, de 10^5 simulaciones, el jugador $A$ sólo recibe alrededor de 27.el x% de los puntos, mientras que el $B$ $B$ tanto obtener alrededor de 36.x% - $A$ es casi un 9% desventaja!
Sé que para conseguir todo lo claro que lo mejor es explícitamente calcular la distribución de probabilidad de caso por caso, y es cierto que no es difícil en cualquier sentido técnico. Pero, antes de hacerlo, hay una explicación sencilla acerca de las discrepancias entre la intuición y la realidad como se muestra arriba? Gracias!
A continuación se adjunta el código:
import random import numpy as np import pandas as pd def get_A_score(): return sum(random.randint(1, 6) for i in range(3)) def get_B_score(): return random.randint(1, 20) if __name__ == '__main__': n_sim = 100000 A_wins = 0.0 for i in range(n_sim): if get_A_score() > get_B_score(): A_wins += 1 elif get_A_score() == get_B_score(): A_wins += 1/2 # in case of equal numbers print(A_wins / n_sim) print() wins = np.array([0.0, 0.0, 0.0]) for i in range(n_sim): A_score = get_A_score() B_score = get_B_score() C_score = get_B_score() scores = np.array([A_score, B_score, C_score]) winner_index = np.argwhere(scores == np.amax(scores)) n_winners = len(winner_index) wins[winner_index] += 1 / n_winners print(wins / n_sim)
Respuestas
¿Demasiados anuncios?El primer juego es justo por una simetría argumento: hay una involución en el conjunto de resultados posibles, que sustituye el resultado de $i$ de cada una de las que mueren por $7-i$, y el resultado $k$ de la icosaédrica morir por $21-k$, y en virtud de esta involución de los logros de los jugadores de su expresión; por lo tanto, no espera que las ganancias son iguales.
Sin embargo, para los tres jugadores de un juego no tan simetría se aplica, y, de hecho, no es justo. Si cada uno de los $20\times20\times 6^3 = 86400$ de los resultados debe llegar exactamente una vez (que es uno de los resultados de cada segundo en un día), las ganancias serían $31446$ para cada uno de los icosaédrica jugadores, pero sólo $23508$ durante los tres dados compañeros. Mientras que entre cada par de jugadores que tiene la igualdad de cambiar de vencer a los otros, los que con más plano de distribución de sus resultados tienen un carácter marcadamente mejor oportunidad de vencer a los otros jugadores a la vez.