Le problème de Monty Hall illustré en Python


En plus d’être un article qui va nous faire remonter dans toutes les recherches sur les Monty Python, il va ravir nos amis statisticiens.

Le problème de Monty Hall est un problème mathématique si simple qu’un enfant de 5 ans peut le comprendre. Et sa véritable réponse est tellement contre intuitive que des centaines de doctorants ont longtemps contesté sa véracité.

Il part d’un jeu télévisé américain présenté par le canadien Monte Halperin, plus connu sous son nom de scène, Monty Hall. À un moment du jeu le candidat se retrouve face à 3 portes, derrière deux d’entre elles se cache une chèvre. Derrière l’une se cache une voiture à gagner.

Maintenant voilà l’astuce :

Quand le candidat choisit une porte, le présentateur, qui sait ce qu’il y a derrière les portes, ouvre une des portes qui n’a pas été choisie. Il s’arrange pour que la porte ouverte montre toujours une chèvre. Il demande alors si le candidat veut garder sa porte ou prendre la troisième porte.

Question :

Le candidat doit-il changer de porte ?

Là où le cerveau vous lache

Les êtres humains normaux, comme vous, moi et Jean Dujardin, ont tendance à sortir une réponse qui ressemble à peu prêt à ça : “on s’en branle connard, il a une chance sur deux, c’est pareil qu’il reste ou qu’il change”.

Sauf que non.

Marilyn vos Savant (un nom pareil putain, c’est prédestiné), a qui on avait posé la question, a une version un peu différente. Or la miss est notamment célèbre parce qu’elle a figuré dans le Guinness des records pour son QI de 190.

Selon elle, il vaut mieux changer de portes, car on a dans ce cas 2 chances sur 3 de gagner, et non une sur deux.

Si ça vous la coupe, ne vous inquiétez pas, elle a reçu des milliers de lettres plus ou moins sympathiques de scientifiques du monde entier pour la traiter de sale connasse qui ne comprend rien aux stats (je paraphrase). Notre cerveau n’aime pas trop cette réponse.

Si vous vous sentez bien réveillé, vous pouvez lire une des dizaines d’explications du phénomène. Peut être qu’il y en a une qui fera tilt. Sinon, faites comme moi, codez un petit script.

Avec Python, on se sent moins con

Rappelez-vous les règles :

  1. 3 portes, 2 chèvres, une voiture.
  2. Le participant choisit une porte au hasard, mais ne l’ouvre pas.
  3. Le présentateur, qui sait où est la voiture, fait monter la sauce en ouvrant une des deux portes restantes, dévoilant toujours une chèvre.
  4. Le participant se voit alors offrir le choix de garder sa porte ou en changer.

Et ça donne ça, dans la langue de Guido Van Rossum :

# -*- coding: utf-8 -*-
 
 
import random
 
 
victoires_quand_on_change = victoires_quand_on_reste = 0
portes = (u"Voiture", u"Chèvre", u"Chèvre")
 
# On fait 10000 parties du jeu
for i in xrange(10000):
 
    # Le joueur prend une porte au hasard
    porte_choisie = portes[random.randint(0, 2)]
 
    # Le présentateur ouvre une des deux autres porte et c'est toujours une 
    # chèvre derrière celle-ci. La dernière porte contient donc une
    # voiture si le candidat a choisit une chèvre, et inversement.
    porte_restante = u'Chèvre' if porte_choisie == u"Voiture" else u"Voiture"
 
    # int(False) == 0 et int(True) == 1 en Python
    victoires_quand_on_change += int(porte_restante == u'Voiture')
    victoires_quand_on_reste += int(porte_choisie == u'Voiture')
 
 
print(u"Victoires quand on reste : {}".format(victoires_quand_on_reste))
print(u"Victoires en change : {}".format(victoires_quand_on_change))
## Victoires quand on reste : 3354
## Victoires en change : 6646

On peut lancer le script autant de fois qu’on veut, on retrouve toujours cette proportion de 2 / 3 de victoires si on change, et 1 / 3 si on reste. Perturbant, mais au moins je sais que je n’ai pas 190 de QI.

Monty Hall, XKCD


Télécharger le code de l’article.

63 thoughts on “Le problème de Monty Hall illustré en Python

  • foxmask

    Marilyn vos Savant, c’était une des chevres derriere l’une des trois portes ; spour ça le QI de 190 ; elle sait ou est la caisse ;)

  • Max

    Je me demande à quoi elle pense quand elle tombe une émission du genre “les chtis à miami”…

  • Pocket Tiger

    Non mais c’est trop pas possible. Trois choix moins un, ça fait une chance sur deux. J’ai les neurones qui fumes. Je reviens, je vais le faire en PHP ><

  • Laurent

    A chaque fois que j’entends parler de ce problème je vais lire la page wikipédia.
    A chaque fois je me dis que j’ai compris.
    A chaque fois que je ferme la page wikipédia et que je repense a l’explication tout s’embrouille et je me rends compte que j’ai pas compris grand chose.
    Je viens de relire la page wikipedia et cette fois je pense que j’ai compris…ou pas.

  • ®om

    À mon avis, même si ton programme donne les bons résultats, il n’est pas suffisant pour se convaincre de ces probabilités.

    En particulier cette partie-là:

        # Le présentateur ouvre une des deux autres porte et c'est toujours une 
        # chèvre derrière celle-ci. La dernière porte contient donc une
        # voiture si le candidat a choisit une chèvre, et inversement.
        porte_restante = u'Chèvre' if porte_choisie == u"Voiture" else u"Voiture"
    

    Considère alors une variante du problème de Monty Hall dans lequel le présentateur ne sait pas où se trouve la porte gagnante. Du coup, une fois que le joueur a choisi sa porte, le présentateur indique une porte au hasard parmi les deux restantes. Si malheureusement il tombe sur la porte gagnante, la partie est annulée et on recommence.

    Ainsi, on ne considère que les parties où il désigne une porte perdante. Tu aurais pu écrire le même programme avec les mêmes explications. Sauf que le résultat dans ce cas n’est pas la même: dans cette variante, le joueur va gagner avec une probabilité de 1/2.

    Je pense donc (je me trompe peut-être) que ton programme passe à côté de quelque chose, et que “par chance” ton test sur la porte_restante est correct : il est incorrect pour la variante, alors que les explications sont les mêmes.

  • cyp

    C’est l’intervention du présentateur qui biaise les stats (et je sais pas ce qu’il fait avec ses chèvres ^^).

    Comme surligné en gras, lui il sait qu’est ce qu’il y a derrière les portes et il va éviter la voiture si elle fait partie des deux portes laissé à son choix.

    Je dis peut être une bêtise mais on doit tomber à une chance sur deux seulement si on rajoute la condition que le candidat avait choisis la bonne porte lors de son premier choix (a ce moment la le présentateur choisi au hasard)

  • Salvatore

    Il y a eu un article dans Sciences et Vie sur ce sujet.
    On y traitait des probabilités conditionnelles et de la formule de Bayes.
    Bravo pour la démo en Python :-)

  • Romain

    Bah, on a 2 chances sur 3 de choisir une chêvre au premier coup. Si tu changes au deuxième et que tu as choisi au départ la chêvre, tu es sur d’avoir la voiture. Tout dépend donc de la proba d’avoir eu la chêvre au premier coup et de ton choix de changer. Nous ne voyons pas d’autre explication.

  • Anon

    Votre script doit être faux, ou les statistiques ne sont probablement pas un domaine fiable, ou les ordinateurs ont été programmés pour éviter cette question.

  • claus

    Un bon moyen de renverser notre biais naturel à considérer que les portes ont une probabilité de gain égales est de remplacer les 3 portes par 1000 portes (voire plus).

    Supposons que devant 1000 portes fermées tu choisis la porte 17. Puis le présentateur décide de dévoiler toutes les portes sauf la 17 et la 669 : a ton avis ça te donne pas envie de changer ta porte choisie?
    ( la prob de gain en changeant de porte est ici de 0.999)

    Ce qui est fun, c’est que les souris, soumises au même problème, sont bien plus balèzes que nous : elles changent de porte deux fois sur trois.

  • AlexRNL

    C’est marrant, mais moi j’ai compris la réponse dès qu’on me l’a expliqué. Et je comprends pas les gens qui comprennent pas ^^

    L’explication qui marche le mieux est en général la suivante : au début, 2 chances sur 3 de tomber sur une chèvre. Et donc, la probabilité que la voiture soit derrière une autre porte (que celle choisie) est de 2/3. Le présentateur ouvre une de ces deux autres portes, donc 2/3 que la voiture soit derrière l’autre porte (celle que vous n’avez pas choisie).

  • Julot

    Et sinon, il suffit d’imiter le cris du chevreau et de voir quelle porte vous répond. Dans ce cas de figure, la probabilité de choisir la voiture (ou la chèvre, selon affinités…) est de 1.

  • Pocket Tiger

    Vous voulez une bonne raison de prendre une aspirine ?
    Prenez le code de Sam, augmenter le nombre de porte à 100. Changer le rand entre 0 et 99.
    On part donc du postulat que le présentateur vas ouvrir 98 porte. Regardez ce que ça donne. Plus le nombre de choix total augmente plus les chance de gagner en changeant augmente aussi.

    L’incompréhension vient du fait qu’on prend le problème dans le mauvais sens. Ce qu’on calcule finalement, ce ne sont pas les chances que le candidat à de gagner en changeant ou non. Ce sont ses chances de tomber juste du premier coup. Ce qui revient au même mais est plus simple à comprendre. On pourrai changer les variables par
    victoires_quand_on_reste => j_ai_bon_du_premier_coup
    victoires_quand_on_change => je_me_suis_planter

    Finalement l’intervention du présentateur ne sert à rien du tout.
    Et la proportion 2/3 1/3 n’est conserver que parce que le candidat à effectuer un choix avant que le nombre total de possibilité ne soit restreint. Fuck you logic !

    J’ai mal à la tête -_-

  • AlexRNL

    @Cyp > si tu impose la condition “le candidat choisit la voiture au premier essai”, ça n’a plus rien à voir puisque que tu n’as plus le choix de la porte (contraint par ta condition).

  • Jojo

    Salut et bravo pour votre site que je suis avec grand intérêt depuis quelques mois.

    Concernant le problème, je dois être encore plus con que la moyenne… j’ai jamais rien compris aux stats, je raisonne donc toujours de manière empirique :

    – si on on s’arrête à la première porte, on a eu qu’une chance sur 3 portes de trouver la voiture.
    – si on fait une deuxième tentative, on a forcément une chance de plus pour trouver la voiture, donc on passe de 1/3 à 2/3
    – j’ajouterais que si on a la possibilité de faire une troisième tentative, on est sur de gagner la voiture car on aura eu 3/3 chances :D

    ça semble tomber sous le sens, pas besoin de faire une diarrhée mentale pour comprendre ça. Ou alors j’ai rien compris à l’énoncé ?

  • Pocket Tiger

    Correction: le présentateur sert juste à casser les couilles si on à choisie la bonne porte dès le début.

  • François

    Le problème de Jean Dujardin, c’est qu’il oublie que le choix du présentateur dépend du choix du candidat. Dujardin aura raison si un démon échange ou non après la révélation du présentateur.

    Je connais depuis longtemps ce problème, j’ignorais l’histoire par contre.
    Sans être prétentieux, je n’ai jamais compris comment on pouvait s’embrouiller avec ça. Suffit d’un bout de papier, dessiner les situations, écrire les proba et basta. non ?

  • Sam Post author

    @®om: je ne suis pas expert donc je ne vais pas prétendre avoir raison, mais à mon avis le fait d’annuler la partie quand le présentateur dévoile la voiture change le programme (ce ne sera pas le même code) et explique le résultat différent. Comme tu le dis, c’est une variante, donc ce n’est pas la même chose.

    Après je suis une quiche en maths, donc je n’exclues pas d’avoir inséré une grosse bêtise et je suis ouvert aux corrections.

  • Max

    Bon et sinon pour le loto faut changer de numéro à chaque partie ?
    Je fais un flash à chaque fois ou je garde mon abo(taxe) avec les même nums ?

    Aidez-moi sinon j’appelle madame soleil…

  • ®om

    à mon avis le fait d’annuler la partie quand le présentateur dévoile la voiture change le programme (ce ne sera pas le même code) et explique le résultat différent

    Oui, tout-à-fait. Mais pourtant, si tu reprends chacune des étapes de ton code avec les explications, elles s’appliquent aussi à la variante. Cela signifie que les “explications” ne sont pas suffisantes (ou qu’il y a de l’implicite).

    En particulier :

    Le présentateur ouvre une des deux autres portes et c’est toujours une chèvre derrière celle-ci. La dernière porte contient donc une voiture si le candidat a choisi une chèvre, et inversement. (A)

    s’applique aussi à la variante. Mais dans le cas de la variante, ça ne te permet pas d’écrire l’affectation de “porte_restante” (B).

    Pour résumer, tu expliques A “donc” B, et effectivement dans Monty Hall, tu as A et tu as B. Mais dans la variante tu as aussi A, mais pas B.

    Je ne sais pas si je suis clair ;-)

    Je m’étais amusé aussi à écrire un petit programme en C pour chacune des 2 versions.

  • Sam Post author

    Je n’ai pas compris mais ça ne veut pas dire que tu n’as pas été clair. En propos, il est tellement facile de faire de la merde quand on s’y connait pas.

  • kontre

    @Max:
    Statistiquement, arrête de jouer. Ton espérance de gain au loto est négative, tu as beaucoup plus de chances de perdre du fric que d’en gagner.
    Sinon, comme chaque tirage de loto est indépendant, ça ne change rien de jouer le même numéro ou de changer. Ça revient à dire qu’un dé a toujours une chance sur 6 de tomber sur un numéro, quel que soit le numéro que tu choisisses.

    Si vous voulez vraiment vous prendre la tête sur les probas, lisez ça : http://blog.rom1v.com/2012/12/paradoxes-probabilistes/. Perso, j’y ai pas compris grand chose…

  • ®om

    Pour préciser peut-être plus simplement ma critique: l’explication du résultat peut être fait grâce à un raisonnement, sans programme. Comme ce résultat est contre-intuitif, un programme peut aider à s’en convaincre. Mais ce programme doit effectuer “factuellement” les étapes du jeu, où chaque étape est trivialement équivalente à ce qu’il se passe dans le jeu réel.

    Or, ta ligne “porte_restante=” contient déjà du raisonnement (ou au moins de l’implicite). En particulier, le “choix” du présentateur n’apparaît pas.

    Tu pourrais me rétorquer que dans le cas du Monty Hall classique (pas la variante), nous pouvons nous convaincre que c’est bon, mais dans ce cas, pourquoi ne pas aller plus loin et simplement tirer 10000 fois au sort un entier parmi 0, 1, 2, puis compter le nombre de victoires sans changer (0) et le nombre de victoires en changeant (1, 2) : le résultat serait correct et nous pourrions nous convaincre qu’il est bon.

  • Etienne

    J’adore ce genre de questions, en particulier quand je suis intimement convaincu que la “bonne réponse” est erronée.

    Pour s’en convaincre, il suffit de commenter 2 lignes dans le code de Sam:

    porte_restante = u'Chèvre' if porte_choisie == u"Voiture" else u"Voiture"

    et

    victoires_quand_on_change += int(porte_restante == u'Voiture')

    La sortie devient:
    ## Victoires quand on reste : 3354 (ou quelque chose d’approchant).

    Ce que ça dit, c’est que le “victoires quand on reste” mesure simplement la probabilité initiale de choisir la bonne porte (1/3) ou plus exactement la probabilité qu’a un nombre entre 0 et 2 d’être tiré par random.randomint.

    Par conséquent, on voit que le “victoires quand on change” mesure la probabilité que la voiture soit derrière l’une des deux autres portes (2/3). C’est tout. L’intervention du présentateur n’y change strictement rien.

    Cette histoire est fallacieuse parce qu’on assimile la probabilité de gagner en changeant de porte avec la probabilité initiale que la voiture soit derrière une des deux portes qui n’ont pas été choisies.

    C’est absurde parce qu’après qu’une de deux portes ait été ouverte, on se trouve devant deux portes. Si on peut changer d’avis, alors on est devant un nouveau problème: quelle est la probabilité que la voiture se trouve derrière une des deux porte: 1/2. Que tu changes d’avis ou pas n’a pas d’importance. Tu fais un choix dans de nouvelle conditions.

    Le code qui reflète ça:

    # -*- coding: utf-8 -*-
     
     
    import random
     
     
    victoires_quand_on_change = victoires_quand_on_reste = 0
    portes = (u"Voiture", u"Chèvre", u"Chèvre")
     
    # On fait 10000 parties du jeu
    for i in xrange(10000):
     
        # Le joueur prend une porte au hasard
        porte_choisie = portes[random.randint(0, 2)]
     
        # Le présentateur ouvre une des deux autres portes.
        porte_restante = u'Chèvre' if porte_choisie == u"Voiture" else u"Voiture"
     
        # Le joueur se trouve devant une nouvelle alternative:
        nouvelle_alternative = [porte_choisie, porte_restante]
     
        # Le joueur fait un nouveau choix qui soit est le même que précédemment
        # soit est différent
        nouveau_choix = random.randint(0, 1)
     
        porte_choisie = portes[nouveau_choix]
        porte_restante = portes[0] if nouveau_choix else portes[1]
     
        # int(False) == 0 et int(True) == 1 en Python
        victoires_quand_on_change += int(porte_restante == u'Voiture')
        victoires_quand_on_reste += int(porte_choisie == u'Voiture')
     
     
    print(u"Victoires quand on reste : {}".format(victoires_quand_on_reste))
    print(u"Victoires en change : {}".format(victoires_quand_on_change))
    ## Victoires quand on reste : 4938
    ## Victoires en change : 5062
  • Etienne

    C’est là que je me rends compte que je dis la même chose que Pocket Tiger.

    Y’aurait 100 portes et les présentateur en ouvrirait 98, il en resterait 2 et t’aurais une chance sur deux de choisir la bonne. Ce qui s’est passé avant, on s’en fout. C’est pas plus compliqué que ça.

  • Pois

    C’est marrant j’ai eu le même réflexe de lancer l’interpréteur python en regardant un (mauvais) film qui parlait de cela, je crois que le film est “21”.

  • roro

    Hey les gars, j’ai deux éoliennes,(conception et réalisation perso. siouplait!). Si vous veniez faire vos comptes par ici, ça ferait de l’électricité.

  • Fred

    Bonsoir
    Un axiome à ne pas oublier en probas: toujours toujours toujours prendre en compte toute information donnée après le choix.

    Donc ici les faits marquants sont
    1) le présentateur connait la bonne porte
    2) le présentateur enlèvera assurément une porte perdante
    Ainsi le joueur avait 1 chance sur 3 de trouver la bonne porte dès le départ et 2 sur 3 de ne pas la trouver alors la porte qui reste après l’élimination du présentateur a donc 2 chances sur 3 d’être la bonne. CQFD

    En revanche si le présentateur ne connait pas la bonne porte, ou bien s’il en enlève une au hasard, alors il n’y a plus d’info utilisable et on descend à 1/2 (comme s’il n’y avait eu en fait que 2 portes depuis le début)

  • Natim

    Maintenant que tu le dis c’est carrément évident.

    Au départ tu as 1/3 de chance sur chaque porte.
    Tu choisis une porte, donc il y a 1/3 sur cette porte et 2/3 sur les deux autres.
    Comme en plus le présentateur enlève celle sur les deux qui n’est pas la bonne, les 2/3 arrive sur la dernière que tu n’as pas choisie. CQFD.

  • Yo

    Ça marche si c’est des lapins à la place des chèvres ? Et avec toutes sortes de marques de voitures ? J’aimerai bien voir les différents jeux de données… :D

  • Za

    @Etienne : Ton code compte mal le nombre de victoire quand on change et quand on reste. Si la porte choisie est “Chèvre” et que nouveau_choix est “1” (je change, donc je gagne), la nouvelle valeur de porte_choisie sera “Voiture” et c’est victoires_quand_on_reste qui sera incrémenté, alors que dans ce cas de figure, c’est bel et bien une victoire en ayant changé.

  • Etienne

    @Za
    T’as entièrement raison, c’est n’importe quoi. J’aurais dû simplement parler de “victoires” et de “défaites” dans la mesure où le choix initial n’entre pas en ligne de compte puisque c’est un nouveau tirage.

    Quelque chose comme ça:

        victoires += int(porte_choisie == u'Voiture')
        defaites += int(not(porte_choisie == u'Voiture'))
  • thom

    Je dirais que c’est pas si compliqué que ça. Enfin, ça me semble pas si complexe que ça… même si sans connaitre le résultat j’aurais dis 1/2!

    Au début, je choisit une porte, j’ai donc 1 chance sur 3 d’avoir une voiture derrière.
    Le présentateur me montre une porte avec une chèvre (lui est sur d’avoir sa chèvre).

    Il faut pas se laisser abuser par le choix du présentateur, lui IL SAIT où sont les chèvres et la voiture, sont choix ne modifie pas les probabilité de mon 1er choix.

    Il n’y a donc toujours qu’1 chance sur 3 que je trouve la voiture dans la 1ere porte choisit.
    Donc, par déduction, il reste 2 chance sur 3 de trouver la voiture derrière la dernière porte.

  • thom

    En fait, c’est tout con.

    au départ. 1/3 chance d’avoir la voiture derrière la porte choisit (mais on sait pas encore).

    Cas 1 il y a la voiture derrière la porte que j’ai choisit (1/3 de chance que ça se produise).
    -> donc il y aura une chèvre derrière les 2 autres portes et si je change, j’aurais 100% de chance de trouver une chèvre.

    Cas 2 il y a une chèvre derrière la porte (2/3 chance que ça se produise)
    -> donc il y aura une chèvre et une voiture derrière les porte restante et le présentateur choisira la porte avec la chèvre -> il y aura de manière sur la voiture derrière la dernière porte.

    Donc 1/3 que le cas 1 se produise et 2/3 que le cas 2 se produise.

    Donc 2/3 chance si je change de porte!

  • Manu

    Bonjour,

    Il n’y a rien de bien sorcié. Il s’agit simplement de probabilités conditionnelles.

    L’ouverture de la porte apparaissant comme la “prévision d’une information complémentaire” et, de ce fait, biaise les probabilités.

  • Etienne

    J’avais tors, bordel. M’a fallut la journée pour comprendre ce qui se passe.

    Le code ci-dessous modélise le cas où les participants de l’émission n’ont pas de stratégie et choisissent de manière aléatoire après qu’une des deux portes ait été ouverte. Dans ce cas, la moitié n’a pas changé de porte et parmi eux 1/3 a gagné ce qui fait 1/2 * 1/3 victoires = 1/6, alors que l’autre moitié à changé: 1/2 * 2/3 = 2/6. Le total des victoires donne 1/2.

    Si on fait changer tout le monde systématiquement, le total des victoires devient 2/3.

    # -*- coding: utf-8 -*-
     
     
    import random
     
     
    victoires_quand_on_change = victoires_quand_on_reste = 0
    defaites_quand_on_change = defaites_quand_on_reste = 0
     
    portes = (u"Voiture", u"Chèvre", u"Chèvre")
     
    # On fait 10000 parties du jeu
    for i in xrange(10000):
     
        # Le joueur prend une porte au hasard
        porte_choisie_dabord = portes[random.randint(0, 2)]
     
        # Le présentateur enlève une (ou la) chèvre.
        porte_restante_dabord = u'Chèvre' if porte_choisie_dabord == u"Voiture" else u"Voiture"
     
        # Le joueur se trouve devant une nouvelle alternative:
        nouvelle_alternative = (porte_choisie_dabord, porte_restante_dabord)
     
        # Le joueur fait un nouveau choix
        nouveau_choix = random.randint(0, 1)
        porte_choisie = nouvelle_alternative[nouveau_choix]
        porte_restante = nouvelle_alternative[not(int(nouveau_choix))]
     
        # Le joueur n'a pas changé de porte: on incrémente
        #   victoires et défaites
        if porte_choisie == porte_choisie_dabord:
            victoires_quand_on_reste += int(porte_choisie == u'Voiture')
            defaites_quand_on_reste += int(not porte_choisie == u'Voiture')
     
        # le joueur a changé de porte:
        else:
            victoires_quand_on_change += int(porte_choisie == u'Voiture')
            defaites_quand_on_change += int(not porte_choisie == u'Voiture')
     
     
    print(u"Victoires quand on reste : {}".format(victoires_quand_on_reste))
    print(u"Victoires quand en change : {}".format(victoires_quand_on_change))
    print(u"Défaites quand on reste : {}".format(defaites_quand_on_reste))
    print(u"Défaites quand en change : {}".format(defaites_quand_on_change))
    ## Victoires quand on reste : 1709
    ## Victoires quand en change : 3294
    ## Défaites quand on reste : 3338
    ## Défaites quand en change : 1659

    Faut le voir pour le croire.

  • Za

    @Etienne
    Le truc subtil qui aide à comprendre, c’est qu’il n’y a pas 2 valeurs possibles pour nouvelle_alternative en fonction de la valeur de porte_choisie_dabord, mais 3. En différenciant les chèvres, on arrives mieux à s’en rendre compte :

    1 : (“Chevre1”, “Voiture”)
    2 : (“Chevre2”, “Voiture”)
    3 : (“Voiture”, “Chevre[1|2]”)

    La première valeur étant le choix initial. Dans les deux premiers cas, le présentateur va éliminer la chèvre que le candidat n’a pas choisi et va laisser la voiture. Dans le cas 3, le présentateur doit éliminer une chèvre au hasard et laisser l’autre, ce cas comporte donc 2 alternatives qui sont en fait identiques si on ne différencie pas les chèvres.

  • atome___

    Le problème, c’est que ce genre de problème se pose depuis toujours, et qu’il ne s’agit simplement pas d’un problème de mathématique ou de proba. Il s’agit d’un simple problème de français.

    C’est l’énoncé et les mots que vous utilisez qui vous induisent en erreur. Dans ce jeu. Vous n’avez, de toute façon qu’1/2 d’avoir la voiture (ou la chèvre) même avant que le présentateur n’ouvre une porte.

    La troisième porte n’est là que pour déstabiliser et faire du suspense dans un jeu télé. Dans tous les cas depuis le début, le présentateur ouvrira une porte avec une chèvre dérrière. Vous n’aurez donc dans tout les cas qu’une chance sur 2 de tomber sur la voiture.

    En soit dit en passant, les points de QI ne sont pas preuve d’intelligence. Les points de QI dependent des tests de QI qui sont pratiqués. Et ils concernent pour la plupart des problèmes de rapidité et de logique. (Je n’ai jamais compris cette course au plus gros QI)

  • kontre

    Ben non, justement, on gagne bien deux fois sur 3 avec cette stratégie ! D’ailleurs aucun jeu télé n’aurait intérêt à proposer ce jeu, ils y perdraient trop…

    J’avais lu une phrase comme quoi les tests de QI, c’était pour voir si tu pensais de la même manière que le type qui a fait le test de QI…

  • Etienne

    @atome___
    Ben non, justement, si tu choisis la porte qui n’a pas été ouverte par le présentateur, t’as 2/3 chances de gagner.

    Sinon d’accord avec toi concernant le QI. L’autre génie là, vos Savant, elle pourrait avoir 540 ça me ferait ni chaud ni froid.

    @Za
    je vois pas trop mais c’est pas grave, je garde ça dans un coin.

  • papy

    Je vais y allez de mon petit commentaire, car le sujet est très intéressant.
    Ce que je retiens, c’est qu’au premier choix, on a 2 fois plus de chance de choisir une chèvre qu’une voiture.
    Le présentateur ouvre une autre porte avec une chèvre.
    Ça n’enlève pas le fait qu’on a deux fois plus de chance d’avoir
    une chèvre derrière notre porte.
    Mais maintenant qu’il ne reste que 2 portes, si on change, il y
    aura moins de chance de tomber sur une chèvre.

    A moins que …
    Passionnant tout ça :-)

  • Bronco

    Bon déjà, c’est pas gentil de nous faire chauffer la calebasse avec des trucs qui
    1- semblent évidents au premier abord
    2- dont on s’aperçoit par la suite qu’on n’y avait pas réfléchi et que c’est tellement simple qu’on peut en déduire de surcroît qu’on est légèrement con sur les bords ^^
    avec l’image de wikipedia c’est mieux :
    https://upload.wikimedia.org/wikipedia/commons/thumb/0/0d/Pfeil.png/80px-Pfeil.png
    LA C’EST LIMPIDE oO
    Au fait, sur l’article en français de wikipédia, la fille est créditée d’un QI de 228 …

  • Sam Post author

    Je sais que le maximum e QI relevé de vos Savant est 228, mais elle a été dans le Guinness des records pour un max de 190. La mesure du QI a toujours été polémique.

  • kontre

    @Etienne : Si c’est toi sur l’avatar alors non, on ne se ressemble pas du tout ! :p

  • Sam Post author

    L’avatar d’Etienne c’est un anthropomorphisme de l’icône de l’app store sur mac.

  • alz

    Nan mais c’est n’importe quoi cet article !
    Franchement, une fille avec un QI de 190, et pourquoi pas le père noël derrière l’autre porte aussi ! Tss !

  • blurk

    Mais alors, ceux qui jouent à l’euromillion avec toujours la même combinaison ont tout faux ?

  • alz

    Enfin, moi ça me parait logique de changer.
    Puisque le présentateur SAIT où est la voiture, en choisissant l’une des portes qu’on a pas choisi, ça augmente la probabilité que la voiture soit derrière celle qui reste, alors qu’au départ la probabilité était égale pour toute les portes.
    Pareil avec plus de portes, et en ouvrant une porte à la fois :p

  • kontre

    @blurk : ça dépend si ils connaissent un gus qui leur indique presque toutes les combinaisons perdantes. Dans ce cas si ils ne changent pas, ils ont faux. Mais comme je le disais à Max, si ce sont des tirages successifs indépendants, la probabilité de gagner est la même. Dans nos trois portes, il n’y a pas de retirage après que le présentateur ait désigné une porte perdante.

  • Sebastien

    J’avais également codé ça en python il y a quelques années pour me convaincre de ce phénomène curieux. Mon code est moins compact que celui de Sam. Mais il marche tout de même ;-)

    <code>
    from random import Random
     
    def play(change):
        """Play game
        @param change: True if player change after announce
        @return: True if player win"""
     
        choices = [1, 2, 3] # 1 is good, 2 and 3 are bad
     
        r = Random()
     
        #player choose : 
        player_choice = r.choice(choices)
        print "Player first choice: %s" % player_choice
     
        # We annouce one bad choice
        bad_choice = player_choice
        while bad_choice == player_choice:
            bad_choice = r.choice((2, 3))
     
        print "Bad choice announce: %s" % bad_choice
     
        if change:
            choices.remove(bad_choice)
            choices.remove(player_choice)
            player_choice = choices[0]
            print "player change choice to: %s" % player_choice
     
        if player_choice == 1:
            print "player win"
            return True
        else:
            print "player loose"
            return False
     
    def main():
        n = 1000
        change_true = 0
        change_false = 0
        for i in range(n):
            r = play(True)
            if r:
                change_true += 1
        for i in range(n):
            r = play(False)
            if r:
                change_false += 1
     
        print "change_true win ratio: %s" % (100 * change_true / n)
        print "change_false win ratio: %s" % (100 * change_false / n)
     
    if __name__ == "__main__":
        main()
    </code>

    Grr l’indentation du code est pourrie sur la preview… Que fait la police ?

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.