[PYTHON] Résolvez le problème de Monty Hall

Problème de Monty Hall

Tout le monde est célèbre [problème de Monty Hall](http://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3% Connaissez-vous 83% BB% E3% 83% 9B% E3% 83% BC% E3% 83% AB% E5% 95% 8F% E9% A1% 8C)?

Je vais laisser l'explication détaillée au lien ci-dessus, mais voici un aperçu du problème.

À propos, à ce moment, est-il plus probable que la voiture gagne si la porte est resélectionnée? Ou la probabilité est-elle la même sans avoir à resélectionner?

Au début, vous ne savez pas dans laquelle des trois portes se trouve la voiture.

250px-Monty_closed_doors.svg.png

Parmi les portes non sélectionnées, la perte sera ouverte.

250px-Monty_open_door_chances.svg.png

Dans cet état, vous pouvez ou non sélectionner à nouveau la porte.

(L'image est [Wikipedia](http://en.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%BB% Réimprimé à partir de E3% 83% 9B% E3% 83% BC% E3% 83% AB% E5% 95% 8F% E9% A1% 8C))

Pensez-y pour le moment.

Problèmes controversés

Le Livre Guinness a le QI le plus élevé au monde [Marilyn Boss Savant](http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AA%E3%83%AA] % E3% 83% B3% E3% 83% BB% E3% 83% 9C% E3% 82% B9% E3% 83% BB% E3% 82% B5% E3% 83% 90% E3% 83% B3% E3 % 83% 88) était controversé en 1990, affirmant que la resélection doublerait les chances de heurter une voiture que de ne pas la resélectionner.

En réponse, les lecteurs ont été inondés de 10 000 déclarations disant «sa réponse est fausse», dont 1 000 sont titulaires d'un doctorat et «même si vous changez de porte, la probabilité est de cinquante-cinquante (1/5). Puisqu'il vaut 2), il ne peut pas être doublé à 2/3. "

Un mathématicien qui a publié 1500 articles au cours de sa vie [Paul Erdesh](http://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%BC%E3%83%AB%E3 % 83% BB% E3% 82% A8% E3% 83% AB% E3% 83% 87% E3% 82% B7% E3% 83% A5) est "impossible", Robert de l'Université George Mason «En tant que mathématicien professionnel, je m'inquiète du manque de connaissances mathématiques du grand public. Admettre mes erreurs améliorera la situation», a déclaré le Dr Scott Smith de l'Université de Floride. Le meilleur détenteur de l'indice du renseignement au monde devrait lui-même arrêter immédiatement la folie de répandre l'ignorance mathématique dans le monde et en connaître la honte! », Critiqué par d'autres médecins éminents l'un après l'autre. Controversé.

Et la bonne réponse?

Simulez le problème

Ce problème est simulé par la méthode de Monte Carlo sur un ordinateur, ce qui prouve que la réponse de Savanto était correcte. En d'autres termes, si vous resélectionnez la porte après la révélation de l'extérieur, les chances sont doublées.

Simulons-le avec Python.

import sys
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import font_manager
from random import choice

def montyhall(N, doors):
    """Renvoie un vecteur indiquant si vous avez résolu ou non le problème de Monty Hall et gagné"""
    #Préparez un vecteur de même longueur que le nombre d'essais
    arr_picked = np.zeros(N)
    arr_switch = np.zeros(N)

    for i in range(N):
        car = choice(doors) #Décidez au hasard de la porte dans laquelle se trouve la voiture
        picked = choice(doors) #Choisissez la porte qui vous semble la bonne réponse

        #Le modérateur ouvre la porte avec la chèvre
        goat = choice(list(set(doors) - set([picked, car])))

        #Sélectionner de nouveau
        switch = choice(list(set(doors) - set([picked, goat])))

        #Stocker le résultat de la bonne réponse à la position correspondante de chaque vecteur
        if picked == car:
            arr_picked[i] = 1 #1 si la réponse est correcte si elle n'est pas resélectionnée
        if switch == car:
            arr_switch[i] = 1 #1 si la réponse est correcte une fois resélectionnée

    #Renvoie deux vecteurs
    return (arr_picked, arr_switch)

def plot(N, arr_picked, arr_switch):
    """Tracez les résultats"""
    #Il est pratique de spécifier la police en fonction de l'environnement
    if sys.platform == "darwin":
        font_path = "/Library/Fonts/Osaka.ttf"
    else:
        font_path = "/usr/share/fonts/truetype/fonts-japanese-gothic.ttf"
    prop = font_manager.FontProperties(fname=font_path)

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)

    X = np.arange(N) + 1 #Amenez le nombre d'essais sur l'axe X
    picked_car = arr_picked.cumsum() #Trouvez le nombre cumulé de bonnes réponses
    switch_car = arr_switch.cumsum()

    ax.plot(X, picked_car, label='picked up')
    ax.plot(X, switch_car, label='switched car')
    ax.set_title('Nombre total de problèmes de Montyhall', fontproperties=prop)
    ax.legend(loc='best')
    plt.savefig('image.png')

def main(args):
    N = 10000 #Simuler 10000 fois
    doors = np.array([1, 2, 3])

    #Résolvez le problème de Montyhall
    (arr_picked, arr_switch) = montyhall(N, doors)
    #Tracez les résultats
    plot(N, arr_picked, arr_switch)

    #Calculez le nombre cumulé de victoires
    win_picked = arr_picked.sum()
    win_switch = arr_switch.sum()

    print("Si vous n'avez pas changé la porte: %f %% (%d)" %
          (100.0 * win_picked / N, win_picked))
    print("Si vous changez la porte:      %f %% (%d)" %
          (100.0 * win_switch / N, win_switch))

#=>Pendant 10000 matchs
#Si vous n'avez pas changé la porte: 33.060000 % (3306)
#Si vous changez la porte:      66.940000 % (6694)

image.png

↑ Le taux de réponse correcte de la voiture commutée (lorsqu'elle est resélectionnée) est clairement doublé.

Résumé

Ce problème est la base des statistiques bayésiennes [probabilité postérieure](http://en.wikipedia.org/wiki/%E4%BA%8B%E5%BE%8C%E7%A2%BA%E7%8E Souvent utilisé pour expliquer% 87). En d'autres termes, la probabilité qu'il y ait trois portes et qu'une voiture soit dans l'une d'elles est la "pré-probabilité", et la probabilité que le modérateur ouvre la porte et voit la chèvre est la "post-probabilité". Parlons des statistiques bayésiennes à un autre moment.

Même les problèmes qui ont été trompés par un mathématicien bien connu il y a 20 ans peuvent maintenant être facilement démontrés en utilisant l'ordinateur à portée de main en utilisant uniquement des logiciels libres. À l'extrême, nous pouvons dire que nous avons acquis des capacités d'analyse de données qui surpassent même les mathématiciens il y a à peine 20 ans. C'est une exagération, bien sûr, mais il est certain que la vérité des choses peut être révélée en déplaçant les mains de cette manière, en déplaçant l'ordinateur et en analysant réellement les données. Acquérir la capacité de vérifier scientifiquement avec un ordinateur même face à de vrais problèmes.

Recommended Posts

Résolvez le problème de Monty Hall
Comprenez-vous le problème de Monty Hall?
Écrivons un programme de simulation simple pour le "problème de Monty Hall"
Comment résoudre le problème d'emballage du bac
Résolvez le problème du voyageur de commerce avec OR-Tools
Résolvez le problème maximum de sous-tableau en Python
Essayez de résoudre le problème du fizzbuzz avec Keras
Essayez de résoudre le problème de l'héritage de classe Python
Résoudre les problèmes de sac à dos à l'aide de pyomo et glpk
[Chez Coder] Résoudre le problème de la dichotomie
Examiner le double problème
Résoudre le calcul du masque
Essayez de résoudre le problème d'affectation du médecin de formation avec Python
J'ai essayé de résoudre le problème avec Python Vol.1
À propos du problème du voyageur de commerce
Résolvez le problème japonais lors de l'utilisation du module CSV en Python.
Le problème devient plus facile à résoudre en fonction de la méthode de formulation
Résoudre le problème de la libcudart manquante dans Ubuntu 16.04 + CUDA 8.0 + environnement Tensorflow
Essayez de résoudre le problème N Queen avec SA de PyQUBO
Je voulais résoudre le problème ABC164 A ~ D avec Python
Résolution du problème de la valeur initiale des équations différentielles ordinaires avec JModelica
Résolvez le problème du sac à dos Python avec la méthode de branche et liée
J'ai essayé de résoudre le problème de planification des équipes par diverses méthodes
Résolvez les problèmes de somme partielle avec une recherche complète en Python
Essayez de résoudre le problème de minimisation des fonctions en utilisant l'optimisation des groupes de particules
Pensez au problème de changement minimum
À propos du problème du vendeur de patrouille commandé
Résoudre le retard d'observation de l'interféromètre
Illustration des résultats du problème du sac à dos
Utilisez Rasppie pour résoudre le problème de connexion Wi-Fi mobile insuffisante
Le 16ème comment écrire un problème de référence en temps réel hors ligne à résoudre avec Python
Essayez de résoudre le problème du voyageur de commerce avec un algorithme génétique (théorie)
Le 19ème comment écrire un problème de référence en temps réel hors ligne à résoudre avec Python
Explication intuitive qui ne repose pas sur la formule du problème de Monty Hall et simulation avec Python