Modélisation de la ruine du joueur

De Wiki du LAMA (UMR 5127)
Aller à la navigation Aller à la recherche

Modélisation de la ruine du joueur

Nous nous intéressons à l'étude des gains d'un joueur lors d'une soirée au casino, dans lequel le joueur joue à la roulette russe.

Le joueur commence avec une somme initiale comprise entre 0 et la somme souhaitée, le joueur s'arrête uniquement si :

  - il obtient la somme souhaitée 
  - le joueur est ruiné (la somme est égale à 0)

Pour cela le joueur va jouer à la roulette en misant à chaque fois 1 jeton qu'il peut doubler ou perdre.

Estimations numériques

Nous allons prendre pour base le document suivant : Ruine

Notre objectif est de trouver de :

- calculer la probabilité de victoire, soit d'atteindre la somme souhaitée, en partant de la somme de départ.
- calculer la durée de la partie, soit le joueur arrête de jouer, donc il atteint l'une des conditions d'arrêt.

On définit de manière générale p la probabilité de victoire d'une partie et q = (1-p)

Estimation de la probabilité de gagner

On veut trouver une formule qui permet de trouver la probabilité de victoire lors d'une soirée au casino selon les paramètres de départ, soit la somme de départ et la somme voulue et la probabilité de victoire.

On commence avec la loi de probabilité totale :

Ce qui donne le système suivant :

On cherche l'équation quadratique :

On a la suite récurrente d'ordre 2 : Résoudre une équation linéaire d'ordre 2

On remplace par  :

On divise par  :

On résoult l'équation

Pour p = 1/2

Ca qui donne la solution unique :

On en déduit les valeurs  :

On a donc formule suivante :

Pour p ≠ 1/2

Ce qui donne les solutions :

On a alors :


On en déduit les valeurs  :

On obtient :

D'où :

On a donc formule suivante :

Estimation du temps moyen de jeu

On commence avec la loi de probabilité totale :

Ce qui donne l'équation :

On note, pour

On a donc la relation de récurence :

Pour p = 1/2

On a

donc,

d'où

Alors pour

Or

Donc

Pour p ≠ 1/2

On pose le réel l qui verifie qui est donc

La relation devient donc

Par conséquent,

Donc pour , on a :

Or

Donc

Simulation d'une partie

Afin de modéliser la ruine du joueur on peut utiliser ce programme python :

Bases du Programme

On commence par initialiser nos valeurs que l'on va utiliser :

from random import random
from matplotlib import pyplot as plt 

PROBABILITE = (18/37) #18/37 Pour la roulette
SOMME_DEPART = 10
GAIN_FIN = 10  # Le gain souhaité

#Faire varier Nombre de Parties 

NOMBRE_PARTIES = 1000

Simulation d'une soirée

On commence par simuler une soirée au casino :

def simule_soiree(initial:int = SOMME_DEPART, fin:int= GAIN_FIN, prob:int= PROBABILITE) -> tuple:
    """ Simule une soirée au casino """
    
    tab = [initial]
    somme = initial 
    
    while somme > 0 and somme < initial + fin:
        aleatoire = random()
        if aleatoire <= prob:
            somme += 1
        else:
            somme -= 1
        tab = tab + [somme]
        
    if somme == initial + fin:
        res = True
    else:
        res = False
        
    return (tab, res)

On peut afficher le résultat d'une soirée :

 
# Permet d'afficher une partie jouée.

def affiche_graphe() -> None:
    """ Affiche le graphe d'une soirée au casino """

    y = simule_soiree()[0]
    x = [[i] for i in range(len(y))]
    plt.title("Graphe d'une soirée au casino") 
    plt.xlabel("Instant I") 
    plt.ylabel("Somme instant I") 
    plt.plot(x,y) 
    plt.show()
    
affiche_graphe()

Simulation soiree 1.png

Simulation soiree 2.png

Simulation soiree 3.png

Verifications de nos estimations numériques

Pour cette partie nous commençons à 10 jetons et on veut doubler cette somme.

On peut implémenter nos estimations numériques :

 
R = (1-PROBABILITE) / (PROBABILITE)

def calcule_proba_victoire_theorique() -> float:
    """Renvoie la probabilité de victoire théorique"""
    
    if PROBABILITE == 0.5:
        res = (SOMME_DEPART) / (SOMME_DEPART + GAIN_FIN)
        
    else:
        numerateur = R**(SOMME_DEPART) - 1
        denumerateur = (R**(SOMME_DEPART + GAIN_FIN) - 1)
        res = numerateur / denumerateur
    
    return res

def calcule_duree_partie_theorique() -> float:
    """Renvoie la durée theorique d'une partie"""
    
    if PROBABILITE == 0.5:
        res = SOMME_DEPART * GAIN_FIN
        
    else:
        numerateur = (SOMME_DEPART + GAIN_FIN) * (1 - R**SOMME_DEPART)
        denumerateur = 1 - R**(SOMME_DEPART + GAIN_FIN)
        
        res = (1 / (2 * PROBABILITE - 1)) * ((numerateur / denumerateur) - SOMME_DEPART)
    
    return res

On va utiliser la méthode de comptage pour observer nos simulations :

def calcule_nombre_victoire(tab_parties = SIMULATION_N_SOIREE) -> int:
    """ Renvoie le nombre de victoires dans les soirées simulées"""
    compteur = 0
    
    for res_partie in tab_parties:
        if res_partie[1] == True:
            compteur = compteur + 1
    
    return compteur

def calcule_proba_victoire(tab_parties = SIMULATION_N_SOIREE) -> float:
    """Renvoie la probabilité de victoire sur M soirées"""
    
    nb_victoires = calcule_nombre_victoire(tab_parties)
    res = nb_victoires/len(tab_parties)
    
    return res


def calcule_duree_moyenne():
    """ Renvoie la durée moyenne sur M soirées simulées"""
    somme = 0
    for partie in SIMULATION_N_SOIREE:
        duree_partie = len(partie[0])
        somme += duree_partie
    res = somme / NOMBRE_PARTIES
    return res

On peut maintenant comparer nos résultats :

 
Voici les valeurs theoriques : 

   La probabilité de victoire : 0.3680312223171822
   Durée partie moyenne theorique : 97.65689548528538

Voici les valeurs avec nos resultats : 

   La probabilité de victoire : 0.347
   Durée partie moyenne : 95.984


Nous pouvons ainsi voir que nos formules qui servent à estimer la probabilité de victoire sont assez bonnes.

Nous pouvons dresser un graphe de l'évolution de la probabilité de victoire et la durée selon le nombre de parties simulées.

Graphe proba selon nb parties.png

En bleu, nous avons la probabilité de victoire théorique.

Graphe duree selon nb parties.png

En bleu, nous avons la durée théorique.

Autres Graphes

Nous pouvons aussi faire des graphes pour modeliser l'évolution de la probabilité et de la durée selon la somme de départ.

Dans notre cas nous allons faire varier la somme de départ de 1 à 19. La somme souhaité est donc 20.

La ligne bleu représente la valeur "juste" qui est le millieu entre les deux conditions d'arrêt.

Graphe probabilité

Nous avons ci-dessous le graphe de l'évolution de la probabilité de victoire.

Graphe proba selon a.png

Nous pouvons voir que l'évolution de la probabilité de victoire est assez linéaire.

Graphe durée

Nous avons ci-dessous le graphe de l'évolution de la durée.

Graphe duree selon a.png

Nous pouvons voir que l'évolution de la durée est en forme de parabolle plutot favorable à la défaite.

Conclusion

Nous avons vu qu'il est possible de modéliser l'évolution des gains d'un joueur lors d'une soirée.

Les résultats montrent que la chance de victoire est grandement défavorable pour le joueur.

Pour analyser le sujet plus profondément on pourrait changer la valeur des mises et passer à 1 ou 2.