Simuler le hasard
Quelle est la chance d'obtenir 7 en lançant deux dés ? On peut le calculer avec des maths... ou demander à l'ordinateur de lancer les dés des milliers de fois et de compter. Cette méthode s'appelle une simulation.
La loi des grands nombres
Lançons une pièce 10 fois, puis 100, puis 1 000, puis 10 000 fois, et regardons la proportion de « pile » :
fonction proportionPile(lancers)
piles est un nombre vaut 0
pour i de 1 à lancers
si hasard(1, 2) = 1 alors
piles ajoute 1
fin si
fin pour
retourne piles / lancers
fin fonction
affiche '10 lancers : ' + decimal(proportionPile(10), 3)
affiche '100 lancers : ' + decimal(proportionPile(100), 3)
affiche '1000 lancers : ' + decimal(proportionPile(1000), 3)
affiche '10000 lancers : ' + decimal(proportionPile(10000), 3)
Avec 10 lancers, le résultat peut être 0,3 ou 0,7. Avec 10 000, il est très proche de 0,5. Plus on répète l'expérience, plus la proportion observée se rapproche de la probabilité réelle : c'est la loi des grands nombres.
La somme de deux dés
Toutes les sommes de 2 à 12 n'ont pas la même chance de sortir. Comptons-les avec un tableau de compteurs : la case 7 compte le nombre de fois où la somme vaut 7.
// un compteur par somme possible (les cases 0 et 1 ne servent pas)
compteurs est un tableau
pour i de 0 à 12
compteurs ajoute 0
fin pour
total est un nombre
pour i de 1 à 3600
total vaut hasard(1, 6) + hasard(1, 6)
compteurs[total] vaut compteurs[total] + 1
fin pour
barre est un texte
pour i de 2 à 12
barre vaut repeter_texte('#', arrondi(compteurs[i] / 20))
affiche i + ' : ' + barre + ' ' + compteurs[i]
fin pour
Le programme dessine un graphique en forme de pyramide : le 7 sort environ 600 fois sur 3 600, le 2 et le 12 seulement une centaine de fois.
Pourquoi ? Il y a 6 façons de faire 7 (1+6, 2+5, 3+4, 4+3, 5+2, 6+1), mais une seule de faire 2 (1+1).
Question : Sur 3 600 lancers de deux dés, combien de fois environ obtient-on un double 6 (somme 12) ? — Environ 100 fois. Une seule combinaison sur 36 donne 12 : 3 600 / 36 = 100.
Répondre à une question par simulation
« Dans une famille de 3 enfants, quelle est la chance d'avoir au moins deux filles ? » On simule 10 000 familles :
familles est un nombre vaut 10000
favorables est un nombre vaut 0
filles est un nombre
pour i de 1 à familles
filles vaut 0
pour j de 1 à 3
si hasard(1, 2) = 1 alors
filles ajoute 1
fin si
fin pour
si filles >= 2 alors
favorables ajoute 1
fin si
fin pour
affiche 'Probabilité estimée : ' + decimal(favorables / familles, 3)
Le résultat tourne autour de 0,5 : une chance sur deux. Pas besoin de formule : on fait l'expérience, très vite, un très grand nombre de fois.
Calculer pi avec des fléchettes
Voici une idée étonnante. On lance des fléchettes au hasard sur un carré de côté 1. Certaines tombent dans le quart de cercle de rayon 1 dessiné dans ce carré. La proportion de fléchettes dans le quart de cercle vaut... pi divisé par 4 !
Une fléchette en (px, py) est dans le quart de cercle si sa distance au coin est inférieure à 1, c'est-à-dire si px * px + py * py <= 1.
fleches est un nombre vaut 20000
dedans est un nombre vaut 0
px est un nombre
py est un nombre
pour i de 1 à fleches
px vaut hasard(0, 10000) / 10000
py vaut hasard(0, 10000) / 10000
si px * px + py * py <= 1 alors
dedans ajoute 1
fin si
fin pour
affiche 'Estimation de pi : ' + decimal(4 * dedans / fleches, 3)
affiche 'Vraie valeur : ' + decimal(pi(), 3)
hasard(0, 10000) / 10000 fabrique un nombre décimal au hasard entre 0 et 1. Avec 20 000 fléchettes, on obtient environ 3,14. Cette technique porte un joli nom : la méthode de Monte-Carlo, comme le casino.
En résumé
- Une simulation répète une expérience au hasard et compte les résultats.
- Plus il y a d'essais, plus le résultat est proche de la vraie probabilité.
- Un tableau de compteurs range les résultats par catégorie.
- La méthode de Monte-Carlo estime des valeurs difficiles à calculer, comme pi.