Le problème de Monty Hall

Présentation, explication et modélisation du problème de Monty Hall
Samedi 4 juillet 2020

Ici nous allons parler d’un célèbre problème contre-intuitif ! Le problème de Monty Hall !

Énoncé du problème

Le jeu oppose un présentateur et un candidat. Le candidat peut soit gagner une chèvre, soit une voiture.

Il y a 3 portes fermées devant le candidat.

Derrière une porte, il y a une voiture.

Derrière les deux autres portes, il y a une chèvre.

Le candidat choisit une porte au hasard.

Le présentateur, ouvre une autre porte qui ne contient pas la voiture.

Le présentateur demande si le candidat veut changer de porte. Il peut refuser ou accepter.

Question: Pour maximiser ses chances de gagner la voiture, que doit-il faire pour maximiser ses chances de gagner ? Doit-il changer de porte ou garder la porte originale ?

Raisonnement

À première vue, nous pouvons penser qu’il s’agit d’un 50/50.

Or ce n’est pas complètement le cas : pour nous en convaincre, nous allons modéliser le problème avec un algorithme :

Modélisation en algorithme

Ici nous allons modéliser le cas de figure où le candidat change de porte (porte_choisie_1 puis porte_choisie_2 dans le code).

Un exemple de modélisation algorithmique peut se faire de cette manière:

// Fonction qui retourne un nombre aléatoire qui est soit 1,2 ou 3.
// La fonction peut retourner un nombre aléatoire qui suit une certaine condition (callback).
let choisirUnePorte = (condition = () => true) => {
let door;
do {
door = Math.floor(Math.random() * 3) + 1;
} while (!condition(door));
return door;
};
let n = 0; // Numérateur -> Nombre de succès
const d = 100000; // Dénominateur -> Nombre de fois où l'on répète l'expérience
for (let i = 1; i <= d; i++) {
const porte_avec_la_voiture = choisirUnePorte();
const porte_choisie_1 = choisirUnePorte();
const porte_presentateur = choisirUnePorte(
(porte) => porte != porte_choisie_1 && porte != porte_avec_la_voiture
);
// Changement de porte
const porte_choisie_2 = choisirUnePorte(
(porte) => porte != porte_presentateur && porte != porte_choisie_1
);
if (porte_choisie_2 == porte_avec_la_voiture) n++;
}
console.log(n / d);

Ici, le numérateur (n) est le nombre de fois ou le candidat gagne la voiture. Le dénominateur désigne le nombre de fois où l’on répète l’expérience.

Note: Si vous êtes sur ordinateur, nous pouvez tester cet algorithme en appuyant sur le raccourci clavier CTRL+MAJ+J (ou CMD+MAJ+J sur mac) et en copiant/collant le code dans la console qui s’affiche.

Résultats

Le résultat (moyen) de l’expérience est ≈0.6666 ! (le chiffre du diable :o)

Le vrai résultat (que l’on va prouver juste après), est 2/3 si le candidat change de porte (et 1/3 si le candidat ne change pas de porte).

Preuve

Au premier abord, nous pouvons penser qu’il s’agit d’un 50/50.

Or, notre algorithme dit que non ! Pourquoi ? Regardons tous les cas de figure:

Cas de figure où l’on ne change jamais de porte

Voici ce qui se passe si on ne change pas de porte:

  • Je choisis une mauvaise porte au début (2/3 chances), je ne change pas, je perds. (2/3 chances de perdre)

  • Je choisis une bonne porte au début (1/3 chances), je ne change pas, je gagne. (1/3 chance de gagner)

Si nous changeons pas de porte, nous avons 1/3 chance de gagner la voiture.

Cas de figure où on change à chaque fois de porte

Voici ce qu’il se passe si on change de porte:

  • Je choisi une mauvaise porte au début (2/3 chances), et le présentateur ouvre une autre mauvaise porte:
    • Je change de porte -> je gagne (2/3 chances de gagner)

  • Je choisi la bonne porte au début (1/3 chances):
    • Je change de porte -> je perds (1/3 chances de perdre)

Si nous changeons de porte, nous avons 2/3 chances de gagner la voiture.

Le résultat n’est pas un 50/50 car le problème induit que le présentateur sait où se trouve la voiture. S’il n’avait pas connaissance de cette information, alors ce raisonnement est correct.

Source: Énoncé du problème (Wikipédia)


Articles recommandés