Problème de Monty Hall
Bonjour,
Je souhaiterais programmer une illustration du phénomène de Monty Hall.
Cependant mes valeurs ne correspondent pas du tout aux résultats attendus. Je suis plutôt sur du 50/50.
Pouvez-vous regarder ce qu'il ne va pas dans mon code s'il vous plaît ?
Merci
Edit: ajout des balises de code et de la partie manquante du script
Je souhaiterais programmer une illustration du phénomène de Monty Hall.
Cependant mes valeurs ne correspondent pas du tout aux résultats attendus. Je suis plutôt sur du 50/50.
Pouvez-vous regarder ce qu'il ne va pas dans mon code s'il vous plaît ?
Merci
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt def jeu(strategie): portes = [i+1 for i in range(3)] choix_joueur = np.random.choice(portes) porte_gagnante = np.random.choice(portes) porte_eliminee = np.random.choice(portes) if choix_joueur == porte_eliminee: resultat = 0 elif strategie == "garder" : portes.remove(porte_eliminee) if porte_gagnante == choix_joueur: resultat = 1 else : resultat = 0 else : portes.remove(porte_eliminee) portes.remove(choix_joueur) if porte_gagnante == portes: resultat = 1 else : resultat = 0 return resultat garder = np.sum([jeu("garder") for i in range(1000)]) changer = np.sum([jeu("changer") for i in range(1000)]) print(garder) print(changer) plt.figure() plt.bar(1, garder) plt.bar(2, changer)
Configuration: Windows / Chrome 94.0.4606.61
Edit: ajout des balises de code et de la partie manquante du script
A voir également:
- Application la halle introuvable
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Desinstaller application windows - Guide
- Comment supprimer une application préinstallée sur android - Guide
- Windows application démarrage - Guide
- Miroir application - Guide
3 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
peux-tu préciser le langage, python, quand tu utilises les balises de code? explications: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
ton code donne des erreurs: es-tu certain d'avoir partagé le code complet?
à quoi sert la seconde ligne dans ce code?
tu n'utilises plus
peux-tu préciser le langage, python, quand tu utilises les balises de code? explications: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
ton code donne des erreurs: es-tu certain d'avoir partagé le code complet?
à quoi sert la seconde ligne dans ce code?
elif strategie == "garder" : portes.remove(porte_eliminee)
tu n'utilises plus
portespar la suite.
Bonjour,
Si l'on s'en tient à la définition du problème de Monty Hall, la porte éliminée ne peut être ni la porte gagnante, ni la porte choisie par le joueur. Or dans ton code, rien n'empêche ces situations d'arriver, ce qui peut engendrer un biais statistiques sur tes simulations.
Le début du programme ressemblerait donc plus à ça :
Ensuite dans ton code, tu compares (l23) une liste à un entier, donc ce test est toujours faux. Il faudrait à la rigueur le comparer
Enfin, comme le souligne yg_be, le contenu de
Bonne chance
Si l'on s'en tient à la définition du problème de Monty Hall, la porte éliminée ne peut être ni la porte gagnante, ni la porte choisie par le joueur. Or dans ton code, rien n'empêche ces situations d'arriver, ce qui peut engendrer un biais statistiques sur tes simulations.
Le début du programme ressemblerait donc plus à ça :
... portes = [i+1 for i in range(3)] choix_joueur = np.random.choice(portes) porte_gagnante = np.random.choice(portes) portes_eliminables = [ porte for porte in portes if porte != choix_joueur and porte != porte_gagnante ] porte_eliminee = np.random.choice(portes_eliminables) portes.remove(porte_eliminee) ...
Ensuite dans ton code, tu compares (l23) une liste à un entier, donc ce test est toujours faux. Il faudrait à la rigueur le comparer
portes[0](qui ne contient plus qu'une porte).
Enfin, comme le souligne yg_be, le contenu de
portesne sert pas à grand chose. Ton programme s'écrit bien plus simplement :
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt def jeu (strategie): portes = [i+1 for i in range(3)] choix_joueur = np.random.choice(portes) porte_gagnante = np.random.choice(portes) # portes_eliminables = [ # porte # for porte in portes # if porte != choix_joueur and porte != porte_gagnante # ] # porte_eliminee = np.random.choice(portes_eliminables) # portes.remove(porte_eliminee) return ( int(porte_gagnante == choix_joueur) if strategie == "garder" else int(porte_gagnante != choix_joueur) ) garder = np.sum([jeu("garder") for i in range(1000)]) changer = np.sum([jeu("changer") for i in range(1000)]) print(garder) print(changer) plt.figure() plt.bar(1, garder) plt.bar(2, changer)
Bonne chance