Je ne sais pas si cela correspond à mon intuition ou non, donc le problème de Monty Hall est devenu un incontournable des problèmes de quiz de probabilité. Mais comprenez-vous vraiment?
Il y a trois portes, A, B et C. Une seule des trois portes est un succès et les deux autres sont fermées. Le jeu se joue selon la procédure suivante.
Question: Le joueur doit-il changer la porte ou non? Plus précisément, en changeant de porte, les chances de gagner augmenteront, diminueront ou ne changeront pas.
Réponse: Les joueurs doivent changer la porte. Puisque le joueur a choisi l'une des trois portes, la chance de gagner la porte choisie est de 1/3. De plus, la probabilité qu'une des portes non sélectionnées soit un succès est de 2/3. Et Monty a ouvert une des portes qu'il n'a pas choisie. Par conséquent, la probabilité que la porte restante soit un succès est de 2/3. En d'autres termes, en changeant la porte, les chances de gagner sont augmentées de 1/3 à 2/3.
Mais que se passerait-il si Monty ne l'ouvrait pas, mais qu'une rafale de vent ouvrait la porte? La rafale est un accident, pas le but d'exciter le jeu, il est donc possible d'ouvrir la porte de votre choix ou la porte que vous frappez. Nous supposons également que la probabilité d'une ouverture de porte est la même.
Question: Le joueur doit-il changer la porte ou non? Plus précisément, en changeant de porte, les chances de gagner augmenteront, diminueront ou ne changeront pas.
Réponse: Les chances de gagner sont les mêmes, que vous changiez de porte ou non. e? Si vous le changez, la probabilité est de 2/3? De quoi parlez-vous?
Quelqu'un qui comprend d'une manière ou d'une autre le problème de Monty Hall peut ne pas être convaincu par les conséquences d'une rafale de vent. Que ce soit Monty qui l'ouvrit ou une rafale de vent, la conclusion fut la même car la porte de la périphérie que le joueur n'avait pas choisie s'ouvrit. Tu ne le pensais pas?
Ici, on peut dire que la théorie des probabilités est désordonnée. Cependant, comme vous le savez tous, [Monty est Python](https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3 % E3% 83% BB% E3% 83% 91% E3% 82% A4% E3% 82% BD% E3% 83% B3). Ici, j'aimerais que vous vous convainciez de force en simulant le problème de Monty Hall et le problème de la rafale de vent de Monty Hall avec Python.
Problème ordinaire de Monty Hall
import random
N = 100000
first_choice_is_atari = 0
second_choice_is_atari = 0
for _ in range(N):
#Tout le monde a raison
atari = random.choice(["A", "B", "C"])
#Tout d'abord, choisissez-en un
first_choice = random.choice(["A", "B", "C"])
#Monty ouvre quelque chose qui n'est ni un hit ni un élu
monty_opened = random.choice(list({"A", "B", "C"}.difference(atari).difference(first_choice)))
#Ensuite, il n'y a qu'une seule chose que vous n'avez pas encore ouverte et que vous n'avez pas choisie.?
second_choice_candidates = list({"A", "B", "C"}.difference(first_choice).difference(monty_opened))
assert len(second_choice_candidates) == 1
#Si vous voulez changer, vous pouvez changer
second_choice = second_choice_candidates[0]
if first_choice == atari:
first_choice_is_atari += 1
elif second_choice == atari:
second_choice_is_atari += 1
else:
raise ValueError("Unreachable")
#Probabilité de gagner si elle n'est pas modifiée,Probabilité de gagner en cas de modification
print(first_choice_is_atari / N, second_choice_is_atari / N)
Je l'ai écrit d'une manière simple et facile à comprendre sans tenir compte de l'efficacité. Ce n'est pas précis car il utilise des nombres aléatoires, mais quel que soit le nombre de fois que vous l'exécutez, il devrait être d'environ 1/3 si vous ne le changez pas et 2/3 si vous le changez.
Problème de Gale Monty Hall
import random
N = 100000
first_choice_is_atari = 0
second_choice_is_atari = 0
game_canceled = 0
for _ in range(N):
#Tout le monde a raison
atari = random.choice(["A", "B", "C"])
#Choisissez-en un
first_choice = random.choice(["A", "B", "C"])
#Un coup de vent souffle et on s'ouvre
wind_opened = random.choice(["A", "B", "C"])
#Si la bonne réponse s'ouvre ou si le premier choix s'ouvre, le jeu sera annulé.
if wind_opened == atari or wind_opened == first_choice:
game_canceled += 1
continue
#Si vous continuez le jeu, il n'y a qu'une seule chose que vous n'avez pas encore ouverte et que vous n'avez pas choisie.?
second_choice_candidates = list({"A", "B", "C"}.difference(first_choice).difference(wind_opened))
assert len(second_choice_candidates) == 1
#Si vous voulez changer, vous pouvez changer
second_choice = second_choice_candidates[0]
if first_choice == atari:
first_choice_is_atari += 1
elif second_choice == atari:
second_choice_is_atari += 1
else:
raise ValueError("Unreachable")
#Probabilité de gagner si elle n'est pas modifiée,Probabilité de gagner en cas de modification,Probabilité de ne pas pouvoir continuer le jeu
print(first_choice_is_atari / N, second_choice_is_atari / N, game_canceled / N)
C'est aussi un nombre aléatoire, donc ce n'est pas précis, mais cette fois, il devrait être d'environ 22% avec ou sans changement.
Laissons Python faire de notre mieux. Cette fois, je vais essayer de savoir d'où viennent ces 22% en listant tous les modèles au lieu de nombres aléatoires.
Découvrez le mystère de la rafale
from itertools import product
first_choice_is_atari = 0
second_choice_is_atari = 0
game_canceled = 0
print("|Frappé|Premier choix|Rafale|résultat|")
print("|------|----------|----|--------|")
for atari, first_choice, wind_opened in product("ABC", repeat=3):
if atari == wind_opened or first_choice == wind_opened:
result = "Annuler"
game_canceled += 1
elif atari == first_choice:
result = "Ne changez pas"
first_choice_is_atari += 1
else:
result = "Changement"
second_choice_is_atari += 1
print("| {}| {}| {}|{}|".format(atari, first_choice, wind_opened, result))
print("")
total = first_choice_is_atari + second_choice_is_atari + game_canceled
print(first_choice_is_atari / total, second_choice_is_atari / total, game_canceled / total)
Une table au format Markdown est sortie. Si vous comptez le cas où la personne qui ne change pas gagne («ne change pas») et le cas où la personne qui change gagne («change»), vous pouvez voir qu'il y en a 6 chacun. Avec ou sans changement, il y a 6 voies sur 27 au total, donc 6/27 = 2/9 = 22,2222 ...%.
Frappé | Premier choix | Rafale | résultat |
---|---|---|---|
A | A | A | Annuler |
A | A | B | Ne changez pas |
A | A | C | Ne changez pas |
A | B | A | Annuler |
A | B | B | Annuler |
A | B | C | Changement |
A | C | A | Annuler |
A | C | B | Changement |
A | C | C | Annuler |
B | A | A | Annuler |
B | A | B | Annuler |
B | A | C | Changement |
B | B | A | Ne changez pas |
B | B | B | Annuler |
B | B | C | Ne changez pas |
B | C | A | Changement |
B | C | B | Annuler |
B | C | C | Annuler |
C | A | A | Annuler |
C | A | B | Changement |
C | A | C | Annuler |
C | B | A | Changement |
C | B | B | Annuler |
C | B | C | Annuler |
C | C | A | Ne changez pas |
C | C | B | Ne changez pas |
C | C | C | Annuler |
Le problème de la probabilité est difficile. Et il est encore plus difficile d'obtenir la confirmation que la réponse au problème de probabilité est vraiment bonne ou mauvaise. Mais c'est à ce moment que les langages de programmation deviennent un partenaire rassurant.
En fait, préparer une porte et M. Monty et souffler une rafale de vent jusqu'à ce que la porte s'ouvre est une tâche assez difficile, mais elle est trop grande pour attribuer des nombres aléatoires sur un ordinateur et effectuer une simulation appropriée. Si vous n'avez pas de problème, vous pouvez l'essayer tout de suite. En outre, l'énumération et le comptage de tous les modèles sont limités à des problèmes plus petits, mais même ainsi, le problème de Monty Hall n'est pas du tout un problème.
Faites-le vous-même avant de vous sentir confus ou trompé. Vous pouvez voir un monde différent.
En passant, si vous avez la capacité de réserve, pourquoi ne pas essayer d'énumérer tous les modèles pour voir pourquoi changer la porte réduit la probabilité à 2/3 dans le problème de Monty Hall où le vent ne souffle pas.
Recommended Posts