Roulette

Stratégie 1 : on joue jusqu’à gagner 1 coup

Si on mise 1$ à chaque lancer de roulette, si l’on gagne au \(n^e\) coup, on aura perdu \(n-1\)$ et gagné \(1\)$.

pwin=18/37
N=10000 #nb joueurs observés 

#version basique avec des boucles
earnings=function(p=pwin){
  ntours=1
  outcome=runif(1)>pwin
  while(outcome){
    outcome=runif(1)>pwin
    ntours=ntours+1
  }
  1-(ntours-1) #gains pour 1 victoire et ntours-1 défaites
}

# on répète l'expérience N fois et on la stocke dans un vecteur "gains"
gains=c()
for (i in 1:N){
  gains=c(gains,earnings(pwin))
}

# on pouvait faire tout cela en 1 seule ligne en remarquant que le jeu suit une variable aléatoire de loi géométrique:
gains=1-rgeom(N,pwin) #rgeom donne le nb d'échecs avant victoire

# Remarque: on peut renommer ce vecteur "gains" autrement pour comparer les 2 versions et se convaincre qu'elles sont statistiquement similaires

# que peut-on observer de cette stratégie répétée N fois?
mean(gains)
## [1] -0.0797
hist(gains)

#nombre de valeurs différentes observées
nbox=length(unique(gains))

# on refait l'histogramme, mais avec des boîtes centrées autour des valeurs entières
br=seq(min(gains)-0.5,max(gains)+0.5,by=1)
hist(gains,breaks=br, xlab="gains d'une partie en $")

On voit bien la loi géométrique, avec la fréquence des observations qui est divisée par 2 à mesure que le nombre de lancers augmente.

Stratégie 2 : jusqu’à \(v\) victoires (binomiale negative)

Combien de parties pour vivre au moins \(v\) victoires? Pour quel gain à la fin?

Stratégie 3 : Quitte ou double

on joue jusqu’à la ruine ou bien doubler la mise initiale (ou la multiplier par \(c\)). En règle générale, combien faut-il jouer de parties? Est-ce qu’on gagne souvent avec cette stratégie?

Tests aléatoires

Par exemple : https://fr.wikipedia.org/wiki/Test_de_primalité_de_Miller-Rabin L’algorithme répond “premier” si le nombre testé, \(n\), est premier. Si \(n\) est composé, l’algo répond “composé” avec une probabilité \(p\).

Autre exemple : vérification de produit de matrices. On choisit un vecteur aléatoire \(r\) et on vérifie que \(ABr\)=\(Cr\) (ce qui est plus rapide que de refaire le produit). L’algorithme se trompe si \(AB-C\neq 0\) et que \((AB-C)r=0\). On montre que cela arrive avec une probabilité au pire \(\frac{1}{2}\).

Dans le cas du test de primalité, on cherche la probabilité de “faux négatif” : on suppose que \(n\) est un nombre composé (i.e., non premier). On veut voir si \(K\) expériences suffisent pour être “certain” qu’il n’est pas premier.

perreur=0.2
K=5
N=100000 #nb de répétitions de cette expériences pour faire des stats

# simuler K expériences et voir si on observe au moins 1 résultat conforme ("composé")

# astuce : K expériences binaires indépendantes de même loi est une binomiale. Chaque expérience donne 1 si l'algo se trompe, 0 sinon, le cumul donne un nombre d'erreur entre 0 et K.
resultats_bruts=rbinom(1,size=K,prob=perreur)

# répéter cette campagne de test pour voir si en général, K est suffisant
#idem en remplacant 1 par K
resultats_bruts=rbinom(N,size=K,prob=perreur)

# on filtre les composantes (la campagne de K expériences donne un résultat faux si et seulement si TOUTES les K expériences ont donné une erreur)
nberreurs=sum(resultats_bruts==K)
nberreurs/length(resultats_bruts)
## [1] 0.00038

On vérifie : la proba de se tromper 5 fois consécutives est bien \((1-p)^5\approx 3.10^{-4}\)

# faire varier K pour observer la proba d'accepter n à tort en fonction de K
# il faut faire une petite fonction... à vous de jouer

Overbooking

Une compagnie de car fait de la sur-réservation pour maximiser le taux de remplissage sur les trajets longue distance. Un car peut accueillir 20 passagers. Habituellement, un quart des clients ayant réservé ne se présentent pas au départ. La compagnie accepte généralement 25 réservations.

Décrire la loi du nombre de clients se présentant le jour du départ et calculer sa moyenne. Quelle est la probabilité que ce nombre dépasse 20 clients?

# à compléter...