Saltar al contenido

¿Cómo resolver el problema de Monty Hall?

Ya no tienes que indagar más en otras webs ya que llegaste al sitio indicado, poseemos la respuesta que quieres pero sin complicaciones.

Solución:

Yo mismo he investigado esto y no creo que el problema esté en Mathematica. El problema es cómo representar la elección del anfitrión. Aquí hay un intento que probé:

Entonces, la idea básica aquí es: elijo un número entre 1 y 3 y también lo hace el automóvil. El anfitrión elige al azar entre los números 1 y 2 y agrega ese número (mod 3) al mío para elegir una puerta diferente a la que yo hice. Luego, condiciona que el número del anfitrión no sea el automóvil.

Entonces, ¿qué da esto?

unif[n_] := DiscreteUniformDistribution[1, n];
Probability[
 Conditioned[
  myChoice == car,
  Mod[myChoice + hostChoice, 3, 1] != car
  ],
 
  myChoice [Distributed] unif[3],
  car [Distributed] unif[3],
  hostChoice [Distributed] unif[2]
  
]

1/2

Ugh … eso no se ve bien, ¿verdad? Seguramente algo salió mal aquí. Simulemos esto, porque los números no mienten:

simulation = AssociationThread["MyChoice", "Car", "HostChoice", #] & /@ 
  RandomVariate[
   ProductDistribution[unif[3], unif[3], unif[2]],
   10000
];
Dataset[simulation, MaxItems -> 10]

ingrese la descripción de la imagen aquí

Estoy convirtiendo los números en Asociaciones para hacer que el código sea más legible. Así que vamos a contar un poco:

CountsBy[
 Select[simulation, Mod[#MyChoice + #HostChoice, 3, 1] =!= #Car &],
 #MyChoice === #Car &
]
N[%/Total[%]]

<|True -> 3392, falso -> 3310 |>

<|True -> 0.506118, Falso -> 0.493882 |>

Ok, tal vez Probability no estaba mal después de todo. Lo que estamos viendo aquí es la verdadera razón por la que el problema de Monty Hall es difícil: el resultado depende fundamentalmente de cómo modele el comportamiento del anfitrión. En esta descripción, en principio, el anfitrión puede abrir la puerta con el coche. Simplemente condicionamos esa posibilidad.

Pero esto es diferente del comportamiento real del anfitrión: si eliges la puerta con el coche, el anfitrión selecciona al azar entre las dos puertas restantes. Si no elige el automóvil, ¡el anfitrión no elige al azar en absoluto! Aquí es donde nuestro cálculo se rompe: siempre asumimos que el anfitrión elige entre dos puertas, pero no es así como funciona y es por eso que el problema de Monty Hall es más complicado de lo que parece, incluso cuando crees que lo entiendes.

Para decirlo de manera sucinta: la línea hostChoice [Distributed] unif[2] está claramente equivocado. La elección del anfitrión es una combinación entre una elección determinista y unif[2] eso depende de myChoice.

En cuanto a la pregunta de cómo reproducir la respuesta correcta con Probability y Conditioned: No creo que sea posible representar este tipo de condicionalidad (es decir, la distribución de una variable aleatoria en función de otra variable aleatoria) se pueda implementar con las herramientas que se ofrecen actualmente. Lo único que se acerca es ParameterMixtureDistribution, pero no creo que eso ayude aquí.


Editar

Me alegra hacerle saber que en realidad me las arreglé para meter a Monty Hall en ParameterMixtureDistribution con algo de tortura. En primer lugar, necesitaremos poder definir distribuciones de probabilidad como “una elección aleatoria de los números en una lista por peso”. Definí dicha distribución de la siguiente manera:

Clear[discreteNumberDistribution]
discreteNumberDistribution[lst_List -> weights_List, min_, max_] := 
  With[nWeights = weights/Total[weights],
   ProbabilityDistribution[
    Sum[nWeights[[i]]*KroneckerDelta[[FormalX], lst[[i]]], i, Length[lst]],
    [FormalX], min, max, 1
   ]
];

Entonces ahora podemos hacer cosas como:

RandomVariate @ discreteNumberDistribution[2, 3 -> 2, 10, 1, 3]

3 (* lo más probable *)

Ahora podemos definir la distribución de mezcla de mi elección, el coche y la elección del anfitrión de la siguiente manera:

mixture = ParameterMixtureDistribution[
  ProductDistribution[
   discreteNumberDistribution[[FormalM] -> 1, 1, 3], (* my choice *)
   discreteNumberDistribution[[FormalC] -> 1, 1, 3], (* car *)
   discreteNumberDistribution[ (* host choice *)
    Range[3] -> (Boole[! ([FormalM] == # || [FormalC] == #)] & /@ Range[3]),
    1, 3
   ]
  ],
  
   [FormalM] [Distributed] DiscreteUniformDistribution[1, 3],
   [FormalC] [Distributed] DiscreteUniformDistribution[1, 3]
   
];

Preguntémosle a Mathematica nuevamente:

Probability[myChoice == car, myChoice, car, host [Distributed] mixture]

1/3

y

Probability[
  otherChoice == car [Conditioned] otherChoice != myChoice && otherChoice != host, 
  
    myChoice, car, host [Distributed] mixture, 
    otherChoice [Distributed] DiscreteUniformDistribution[1, 3]
  
]

2/3

¡Victoria!

Sé que esto no es lo que quieres, pero para completar, agregaré una versión Monte-Carlo:

findthecar[numberofdoors_Integer /; numberofdoors >= 3] :=
  Module[car, goats, myfirstchoice, notmyfirstchoice, organizerschoice, mysecondchoice,
    (* the car is behind a random door *)
    car = RandomInteger[1, numberofdoors];
    (* there are goats behind the other doors *)
    goats = Complement[Range[numberofdoors], car];
    (* at first I choose a random door *)
    myfirstchoice = RandomInteger[1, numberofdoors];
    (* these are the doors I did not choose yet *)
    notmyfirstchoice = Complement[Range[numberofdoors], myfirstchoice];
    (* the organizer opens a door that is not my choice and that has a goat *)
    organizerschoice = [email protected]
[notmyfirstchoice, goats]; (* my second choice is not my first and not the organizer's *) mysecondchoice = [email protected][Range[numberofdoors], myfirstchoice, organizerschoice]; (* is the car behind my second chosen door? *) mysecondchoice == car]

Pruébelo un millón de veces para tres puertas y vea que encuentro el automóvil en aproximadamente 2/3 de los casos:

Table[findthecar[3], 10^6] // Counts
(*    <|True -> 666122, False -> 333878|>    *)

De manera más general, en un juego de $ n $ puertas donde se abre el organizador $ k $ puertas reveladoras de cabras y tengo la opción de cambiar, mi probabilidad de encontrar el coche antes y después de cambiar son

$$ P _ text sin interruptor (n, k) = frac 1 n, \ P _ text interruptor (n, k) = frac n-1 n (nk-1), $$

respectivamente. Como $ P _ text interruptor (n, k)> P _ text sin interruptor (n, k) $ en todos los casos, siempre debemos cambiar después de la revelación de cabras del organizador.

Si te apasiona este mundo, eres capaz de dejar un enunciado acerca de qué te ha gustado de este ensayo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *