Expérimentation et simulation
Hugo a un doute sur un jeu de la fête foraine : on lance deux dés, et l'on gagne si la somme est un multiple de 3. Le forain affirme que « ça arrive une fois sur trois ». Hugo ne va pas lancer les dés 10 000 fois à la main. Il peut demander à un ordinateur de le faire pour lui. Mais que peut-on conclure d'une simulation, et avec quelle fiabilité ? C'est ce que nous allons voir.
Simuler une expérience aléatoire
Une simulation remplace une expérience réelle par un programme qui produit des résultats « au hasard ». En réalité, l'ordinateur produit des nombres pseudo-aléatoires, mais ils se comportent comme le hasard dans nos modèles.
En Python, le module random propose deux outils de base :
-
randint(a, b)renvoie un entier de $a$ à $b$ inclus, avec équiprobabilité ; -
random()renvoie un réel de $[0\,;1[$, « uniformément » réparti.
from random import randint, random
def lancer_de():
return randint(1, 6)
def pile_face():
if random() < 1 / 2: # probabilité 1/2
return 1 # face
else:
return 0 # pile
Pour simuler une épreuve de Bernoulli de paramètre $p$ (succès avec la probabilité $p$, échec sinon), on utilise cette idée : le nombre random() tombe dans $[0\,;p[$ avec la probabilité $p$, car la longueur de cet intervalle vaut $p$.
Pour répéter une épreuve $n$ fois de façon indépendante, on utilise une boucle, et un compteur qui s'incrémente à chaque succès.
On simule le lancer d'un dé équilibré à six faces avec la fonction randint(1, 6) du module random. a) Écrire une fonction Python lancer_double() qui renvoie la somme de…
On simule le lancer d'un dé équilibré à six faces avec la fonction randint(1, 6) du module random.
- a) Écrire une fonction Python
lancer_double()qui renvoie la somme de deux lancers.
- b) Donner les valeurs minimale et maximale possibles.
On simule une épreuve de Bernoulli de paramètre $p = 0{,}3$ avec random(), qui renvoie un réel de $[0\,;1[$ : le succès correspond à random() < 0.3. a) Écrire une…
On simule une épreuve de Bernoulli de paramètre $p = 0{,}3$ avec random(), qui renvoie un réel de $[0\,;1[$ : le succès correspond à random() < 0.3.
- a) Écrire une fonction
bernoulli()qui renvoie 1 en cas de succès et 0 sinon.
- b) Écrire une fonction
somme(n)qui renvoie le nombre de succès pour $n$ répétitions indépendantes.
Simuler une variable aléatoire à partir de sa loi
Soit une variable aléatoire $X$ dont on connaît la loi. Comment la simuler avec random() ? On découpe $[0\,;1[$ en intervalles dont les longueurs sont les probabilités.
Prenons $X$ de loi :
| $x_i$ | $1$ | $2$ | $4$ |
|---|---|---|---|
| $P(X = x_i)$ | $0{,}6$ | $0{,}3$ | $0{,}1$ |
Si random() tombe dans le premier morceau, on renvoie 1 ; dans le deuxième, 2 ; dans le troisième, 4. Chaque valeur sort bien avec sa probabilité, puisque la probabilité de tomber dans un morceau est sa longueur.
Pour un jeu d'argent, la variable $G$ est le gain algébrique (gain moins mise, négatif en cas de perte). Le jeu est équitable si $E(G) = 0$. Si $E(G) < 0$, le joueur perd en moyenne de l'argent à chaque partie.
Une variable aléatoire $X$ prend les valeurs $0$, $1$, $5$ avec les probabilités $0{,}5$, $0{,}3$, $0{,}2$. a) Calculer $E(X)$, $V(X)$ et $\sigma(X)$. b) Écrire une…
Une variable aléatoire $X$ prend les valeurs $0$, $1$, $5$ avec les probabilités $0{,}5$, $0{,}3$, $0{,}2$.
- a) Calculer $E(X)$, $V(X)$ et $\sigma(X)$.
- b) Écrire une fonction Python
simuler_X()qui simule $X$ à l'aide derandom().
- c) Écrire une fonction
moyenne(n)qui renvoie la moyenne de $n$ simulations de $X$. Vers quelle valeur doit-elle se rapprocher quand $n$ augmente ?
Un jeu de la Française des Jeux propose : on mise 2 €, on lance un dé ; si l'on obtient 6, on reçoit 9 € (la mise de 2 € n'est pas rendue en plus), sinon on perd la…
Un jeu de la Française des Jeux propose : on mise 2 €, on lance un dé ; si l'on obtient 6, on reçoit 9 € (la mise de 2 € n'est pas rendue en plus), sinon on perd la mise. On note $G$ le gain algébrique.
- a) Donner la loi de $G$ et calculer $E(G)$.
- b) Écrire une fonction Python
gain_moyen(n)simulant $n$ parties et renvoyant le gain moyen.
- c) Que peut-on prévoir pour
gain_moyen(100000)?
Fréquences, moyennes et fluctuation
Simulons 200 lancers d'une pièce équilibrée. On ne trouve presque jamais exactement 100 « face ». Par exemple, 108 « face » donnent une fréquence $\frac{108}{200} = 0{,}54$, soit un écart de $0{,}04$ avec la probabilité théorique $0{,}5$. Si on recommence, on obtient un autre résultat : c'est la fluctuation d'échantillonnage.
Quand le nombre de simulations $n$ augmente, on observe que :
-
la fréquence d'un événement se rapproche de sa probabilité ;
-
la moyenne des valeurs de $X$ se rapproche de l'espérance $E(X)$ ;
-
les fluctuations deviennent de plus en plus petites.
On admet le résultat suivant : si $M_n$ est la moyenne de $n$ simulations indépendantes d'une variable $X$ d'écart type $\sigma$, alors $V(M_n) = \frac{\sigma^2}{n}$, donc
$$\sigma(M_n) = \frac{\sigma}{\sqrt{n}}.$$Sur un tableur, on simule 200 lancers d'une pièce équilibrée et on obtient 108 « face ». a) Calculer la fréquence observée de « face ». b) Calculer l'écart entre cette…
Sur un tableur, on simule 200 lancers d'une pièce équilibrée et on obtient 108 « face ».
- a) Calculer la fréquence observée de « face ».
- b) Calculer l'écart entre cette fréquence et la probabilité théorique.
On répète $n$ fois la simulation d'une variable $X$ d'espérance $\mu = 2$ et d'écart type $\sigma = 1{,}5$, et on note $M_n$ la moyenne des résultats, avec $M_n$ de…
On répète $n$ fois la simulation d'une variable $X$ d'espérance $\mu = 2$ et d'écart type $\sigma = 1{,}5$, et on note $M_n$ la moyenne des résultats, avec $M_n$ de variance $\frac{\sigma^2}{n}$.
- a) Calculer l'écart type de $M_n$ pour $n = 100$ puis $n = 10\,000$.
- b) Par quel facteur faut-il multiplier $n$ pour diviser par 10 l'écart type de $M_n$ ?
- c) Écrire une fonction Python
fluctuation(n, m)qui renvoie la liste de $m$ moyennes de $n$ simulations d'une loi de Bernoulli de paramètre $0{,}5$, et expliquer ce que l'on observe quand $n$ augmente.
Estimer une probabilité ou un nombre par simulation
Loi binomiale en quelques mots
Si l'on répète $n$ fois, de façon indépendante, une épreuve de Bernoulli de paramètre $p$, le nombre $X$ de succès suit la loi binomiale $\mathcal{B}(n\,;p)$. Pour $k$ entier de $0$ à $n$ :
$$P(X = k) = \binom{n}{k} p^k (1-p)^{n-k}, \qquad E(X) = np, \qquad V(X) = np(1-p).$$Le coefficient $\binom{n}{k}$ compte les chemins de l'arbre qui contiennent $k$ succès.
Estimer une probabilité
Pour estimer $P(A)$, on simule $n$ fois l'expérience et on calcule la fréquence de $A$ : $f = \frac{\text{nombre de fois où } A \text{ est réalisé}}{n}$. Plus $n$ est grand, plus $f$ est proche de $P(A)$.
La méthode de Monte-Carlo
On peut même estimer un nombre qui n'a rien d'aléatoire, comme $\pi$. On tire au hasard des points $(x\,;y)$ dans le carré $[0\,;1]^2$, d'aire 1. Le quart de disque de rayon 1 a pour aire $\frac{\pi}{4}$, donc la probabilité qu'un point y tombe est $\frac{\pi}{4}$. La fréquence $\frac{k}{N}$ de points dans le quart de disque estime $\frac{\pi}{4}$, d'où $\pi \approx \frac{4k}{N}$.
def monte_carlo(N):
k = 0
for i in range(N):
x = random()
y = random()
if x*x + y*y <= 1:
k = k + 1
return 4 * k / N
On estime $\pi$ par la méthode de Monte-Carlo : on tire au hasard $N$ points $(x\,;y)$ dans le carré $[0\,;1]^2$ et on compte le nombre $k$ de points tels que…
On estime $\pi$ par la méthode de Monte-Carlo : on tire au hasard $N$ points $(x\,;y)$ dans le carré $[0\,;1]^2$ et on compte le nombre $k$ de points tels que $x^2 + y^2 \leq 1$.
- a) Justifier que la probabilité qu'un point tombe dans le quart de disque est $\frac{\pi}{4}$.
- b) Écrire une fonction
monte_carlo(N)qui renvoie l'estimation de $\pi$.
- c) Avec $N = 5\,000$ et $k = 3\,920$, calculer l'estimation obtenue.
Un candidat répond au hasard à un QCM de 10 questions ; chaque question a 4 réponses dont une seule exacte. Soit $X$ le nombre de bonnes réponses. a) Justifier que $X$…
Un candidat répond au hasard à un QCM de 10 questions ; chaque question a 4 réponses dont une seule exacte. Soit $X$ le nombre de bonnes réponses.
- a) Justifier que $X$ suit la loi binomiale $\mathcal{B}(10 ; 0{,}25)$. On rappelle que, si $X$ suit $\mathcal{B}(n ; p)$, alors $P(X=k)=\binom{n}{k}p^k(1-p)^{n-k}$, $E(X)=np$ et $V(X)=np(1-p)$. Calculer $E(X)$ et $V(X)$.
- b) Écrire une fonction Python
simuler()qui renvoie une valeur de $X$.
- c) Écrire une fonction
frequence(n)qui estime $P(X \geq 5)$ sur $n$ simulations.
- d) Calculer exactement $P(X \geq 5)$ à $10^{-3}$ près et indiquer ce que l'on peut attendre de
frequence(10000).
Un joueur lance simultanément deux dés équilibrés. Soit $S$ la somme des faces, $X = 1$ si $S$ est un multiple de 3, $X = 0$ sinon. a) Déterminer la loi de $S$ et…
Un joueur lance simultanément deux dés équilibrés. Soit $S$ la somme des faces, $X = 1$ si $S$ est un multiple de 3, $X = 0$ sinon.
- a) Déterminer la loi de $S$ et calculer $E(S)$.
- b) Calculer $P(X = 1)$.
- c) Écrire une fonction Python qui estime $P(X = 1)$ à partir de $n$ simulations.
- d) Pour $n = 1\,000$ simulations, on obtient 352 succès. Calculer la fréquence et la comparer à $P(X=1)$.
L'essentiel
-
randint(a, b)renvoie un entier de $a$ à $b$ inclus ;random()renvoie un réel de $[0\,;1[$. Le testrandom() < psimule une épreuve de Bernoulli de paramètre $p$. -
Pour simuler une variable aléatoire, on découpe $[0\,;1[$ en intervalles de longueurs égales aux probabilités (seuils cumulés).
-
Fréquence et moyenne d'un grand nombre de simulations sont proches de la probabilité et de l'espérance, mais fluctuent : $\sigma(M_n) = \frac{\sigma}{\sqrt n}$.
-
Une simulation donne une estimation, jamais une valeur exacte : on distingue le modèle de la réalité.
-
Loi binomiale $\mathcal{B}(n\,;p)$ : $E(X) = np$ et $V(X) = np(1-p)$.
-
Monte-Carlo : $\pi \approx \frac{4k}{N}$, où $k$ est le nombre de points dans le quart de disque.