La ruine du joueur, prédite puis simulée
Exercice d'entraînement · niveau 3 (difficile) · mathématiques approfondies (ECG 1re année), chapitre 11 — Informatique et algorithmique · Simulation et estimation
Énoncé
Un joueur possède jetons, son adversaire . À chaque partie, il en gagne ou en perd un, avec la probabilité , jusqu'à ce que l'un des deux soit ruiné. Déterminer la probabilité de ruine du joueur et la durée moyenne du jeu, puis les contrôler par simulation pour , .
Corrigé
Ce qu'on montre. Que les deux quantités sont solutions de récurrences linéaires d'ordre , et que la simulation valide les formules obtenues.
La probabilité de ruine. Notons la probabilité que le joueur soit ruiné lorsqu'il possède jetons, . En conditionnant sur le résultat de la partie suivante (système complet à deux événements, de probabilité chacun) : avec les conditions aux bords (déjà ruiné) et (l'adversaire l'est).
La relation s'écrit : les accroissements sont constants, donc est arithmétique, . Les bords donnent et , d'où et
La durée moyenne. Notons la durée moyenne du jeu partant de jetons. Le même conditionnement, en comptant la partie qui vient d'être jouée : Posons et vérifions que convient : après développement, ce qui donne exactement . Les conditions aux bords sont satisfaites : et . Donc
Les valeurs pour , .
Le programme.
import numpy as np
import numpy.random as rd
def une_partie(a, b):
"""Renvoie (ruine, duree) : ruine vaut 1 si le joueur perd tout."""
fortune = a
duree = 0
while fortune > 0 and fortune < a + b:
if rd.binomial(1, 0.5) == 1:
fortune = fortune + 1
else:
fortune = fortune - 1
duree = duree + 1
if fortune == 0:
ruine = 1
else:
ruine = 0
return ruine, duree
a, b, M = 5, 10, 20000
R = np.zeros(M)
D = np.zeros(M)
for i in range(M):
R[i], D[i] = une_partie(a, b)
print(np.mean(R), b / (a + b)) # ~0.667 0.6667
print(np.mean(D), a * b) # ~50 50
Les ordres de grandeur. La fréquence de ruine sur parties a pour écart-type : on attend une valeur entre et .
Le point à vérifier. La condition d'arrêt porte sur les deux bords : fortune > 0 and fortune < a + b. Oublier la seconde donnerait une boucle qui s'arrête encore, mais après un temps moyen infini.
Commentaire. Le joueur le plus pauvre est ruiné avec la probabilité , qui ne dépend que du rapport des fortunes. Face à un adversaire dix fois plus riche, la ruine survient dans dix cas sur onze, alors même que chaque partie est parfaitement équitable.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.