Probabilité

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
Elias
Habitué(e)
Messages: 369
Enregistré le: 07 Fév 2016, 18:20

Probabilité

par Elias » 07 Jan 2021, 22:48

Bonjour,

cette question s'inspire d'un jeu de société pour enfant
Le jeu est composé de :
- quatre figurines d'animaux « de la banquise » (un lapin, un ours polaire, un pingouin et un loup).
- trois plateaux en carton représentant une banquise en train de fondre, un pont de glace, et une banquise refuge contenant un igloo,
-6 piliers de glace,
- un dé à six faces ayant trois résultats équiprobables: 2 faces "pont", 2 faces "igloo" et 2 faces "glaçon".

Les quatres animaux sont initialement placés sur la banquise qui fond.
À son tour, le joueur lance le dé et effectue l'action dictée par le dé:
- en cas de glaçon, on retire un pilier du pont. Quand le pont n'a plus aucun pilier, le jeu est perdu (rappelons qu'au départ, il y a 6 piliers).
- en cas de pont, on déplace un animal de la banquise vers le pont (et on ne fait rien s'il n'y a personne sur la banquise).
- en cas d'igloo, on déplace un animal du pont vers l'igloo, et on ne fait rien si le pont est vide. Si tous les animaux sont sur l'igloo, la partie est gagnée.


La question est : comment calculer la probabilité de gagner à ce jeu ?

J'ai fait un programme vite fait et je trouve 47% environ. Mais comment calculer théoriquement cette probabilité ?


Code: Tout sélectionner
import random
def partie():
    # 1-2  ---> écroulement du pont
    # 3-4  ---> passage du pont vers ile d'arrivée
    # 5-6  ---> passage île de départ vers pont

    nb_animaux_ile_depart = 4
    nb_animaux_ponts = 0
    nb_animaux_ile_arrivee = 0
    glaces_ponts = 6

    while nb_animaux_ile_arrivee !=4 and glaces_ponts !=0:
        de = random.randint(1,6)
        if de in [1,2]:
            glaces_ponts -=  1
        elif de in [3,4]:
            if nb_animaux_ponts > 0:
                nb_animaux_ponts -= 1
                nb_animaux_ile_arrivee += 1
        elif de in [5,6]:
            if nb_animaux_ile_depart > 0:
                nb_animaux_ile_depart -= 1
                nb_animaux_ponts += 1

    if nb_animaux_ile_arrivee == 4:
        return "gagné"
    else:
        return "perdu"


def proba_gagner(n):
    compteur = 0
    for i in range(n):
        ma_partie = partie()
        if ma_partie== "gagné":
            compteur += 1
    return compteur / n
Pseudo modifié : anciennement Trident2.



lyceen95
Membre Complexe
Messages: 2255
Enregistré le: 15 Juin 2019, 00:42

Re: Probabilité

par lyceen95 » 08 Jan 2021, 01:12

J'ai tapé un très long message ... mais tout perdu au moment d'envoyer (mot de passe expiré :evil: )

Je vais simplifier les notations, quitte à perdre un peu le côté poêtique.

Mon dé sort A B ou Z
Si Z, je perds une vie.
Si A, j'avance un pion jusqu'à la case A
Si B, j'avance un pion de la case A jusqu'à la case B (à condition d'avoir au moins un pion sur la case A)
On a 6 vies au départ, on a 4 pions au départ, Et on veut emmener les 4 pions à la case B avant d'avoir perdu les 6 vies.
On a un dé à 3 faces ( A, B et Z), mais on va aussi utiliser 2 dés à 2 faces :
Un dé avec A et Z uniquement : si on n'a aucun pion sur la case A, on utilise ce pion, puisque si on tire la face B, on ne fait aucun mouvement. On est donc certain qu'à chaque lancer, on va avoir une action.
Et si on n'a plus aucun pion sur la case de départ, on utilise un pion avec uniquement les faces B et Z pour la même raison.

On va faire un arbre, mais en regroupant les cas qui peuvent l'être :
Situation de départ : 00006 : mes 4 pions sont sur la case 0, et j'ai 6 vies.

Je lance mon dé à 2 faces A ou C:
1er lancer
000A6 ou 00005 : proba = 1/2 pour chacun.

2ème lancer :
Si j'ai 000A6, j'utilise le dé à 3 faces :
000A;6 ==> 00AA6 ou 000B6 uo 000A5 : proba 1/6 chacun

Si j'ai 00005, j'utilise encore le dé à 2 faces :
000A5 ou 00004 : proba = 1/4 chacun

On regroupe :
00AA6 : P=1/6
000B6 : P=1/6
000A5 : P=1/6+1/4=5/12
00004 : P=1/4
La somme donne bien 1.

Et on peut continuer.
3ème lancer ... pareil, selon la situation, on utilise un dé ou un autre ... ... ...

C'est très long à faire à la main. Ca peut être assez amusant à programmer, en prenant bien soin de traiter des fractions, et non des réels.

lyceen95
Membre Complexe
Messages: 2255
Enregistré le: 15 Juin 2019, 00:42

Re: Probabilité

par lyceen95 » 08 Jan 2021, 10:14

Bon, une nuit de sommeil, ça aide à réfléchir.
Il y a une solution plus élégante que ça, basée sur des 'matrices de transition de Markov' .
Voir https://dept-info.labri.fr/ENSEIGNEMENT/formation-a-distance/cibermiage-processus/c1.7/ch01/seq02/sequence.htm par exemple.
Il faut recenser toutes les 'situations' possibles, environ 200 :
Avec les notations que je prenais :
Perdu ; Gagné ; 00006 ; 00005 ; ... ; 000A6 ; .... .... ; BBBA1
On va donc bâtir une matrice de 200 par 200.
Sur chaque ligne, la somme des termes vaut 1.
Par exemple, le plus simple, sur la ligne 'Perdu', on a seulement un 1, puisque la situation suivante sera forcément 'Perdu' ;
A partir de la situation initiale '00006', on aura 1/2 et 1/2, sur les colonnes 000A6 et 00005.
Et autre exemple, à partir de la situation 0AAB4, on aura 1/3 sur les colonnes AAAB4, 0ABB4 et 0AAB3.

Il faut remplir cette matrice.
On a un vecteur , qui représente la situation initiale : on part de la situation 00006.
On a donc un 1 sur la ligne qui correspond à 00006, et des 0 partout ailleurs.
On multiplie donc le vecteur par la matrice, on obtient un nouveau vecteur.
Et on continue de multiplier par cette matrice autant de fois que nécessaire.

On peut aussi élever cette matrice au carré, autant de fois que nécessaire (jusqu'à avoir des données uniquement dans les colonnes 'Perdu' et 'Gagné')
Et ainsi, par lecture, on voit les probabilités de gagner ou de perdre à partir de n'importe quelle situation intermédiaire.

Ici, j'ai modélisé les choses en disant que à partir d'une situation, on passait forcément à une situation différente ( à partir de la situation initiale, on s'interdit de tirer un B, qui ferait qu'il ne se passe rien)
On peut dire que à partir de cette situation initiale, on a 3 possibilités, passer à 000A6, 00005, ou rester à 00006 , et 1/3 sur chacune de ces 3 colonnes.
Et avec cette hypothèse, au lieu d'élever la matrice à la puissance 14 ou 16 pour arriver à une situation figée, il faut élever la matrice à une puissance ''infinie'' pour avoir une situation stabilisée ... parce que la partie peut s'éterniser.

Il y a déjà eu des discussions sur ce forum sur ces matrices de Markov, exemple https://www.maths-forum.com/enigmes/martingale-excedent-t213935-80.html?hilit=markov

GaBuZoMeu
Habitué(e)
Messages: 6019
Enregistré le: 05 Mai 2019, 10:07

Re: Probabilité

par GaBuZoMeu » 08 Jan 2021, 16:24

Bonjour,

On peut faire avec une matrice de transition de taille 86 (84 états non absorbants + 2 états absorbants "Gagné" et "Perdu").
Chaque état non absorbant est codé par
- un triplet d'entiers positifs ou nuls (b,p,i) avec b+p+i=4 et i<4 (il y a 14 tels triplets)
- un entier g entre 1 et 6 (compris)
Les états absorbants correspondent à (b,p,i) = (0,0,4) (Gagné) et g=0 (Perdu).

L'état de départ est bien sûr (b,p,i)=(4,0,0), g=6.

La partie la plus chronophage est d'écrire la matrice de transition. Après, ça roule tout seul.

Un petit doc sur les chaînes de Markov absorbantes :
https://www.idpoisson.fr/berglund/probamass_html/node18.html

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 38 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite