Probabilités

15 minutes de Python

Simulation : coder un événement avec rd.random() et rd.randint()

Thème : Probabilités

Niveau : ECG1–ECG2

Année : Maths appliquées, Maths approfondies

Objectif : savoir simuler une expérience aléatoire simple et coder un événement par une condition ; savoir répéter une expérience plusieurs fois, compter les succès, calculer une fréquence qui estime une probabilité.

Rappels fondamentaux

Dans le module numpy.random (souvent importé sous le nom rd), on dispose de fonctions permettant de générer des nombres aléatoires. Ces fonctions sont à la base de la simulation d’expériences aléatoires en Python.

  • La commande U = rd.random() renvoie un nombre réel U choisi uniformément dans l’intervalle \( [0,1[ \). Autrement dit, tout sous-intervalle de \( [0,1[ \) de même longueur a la même probabilité d’être atteint.
  • La commande rd.randint(a,b) renvoie un entier choisi uniformément dans l’ensemble \( \{a,a+1,\dots,b-1\} \). Attention : dans numpy.random, la borne supérieure b est exclue.



Simuler une expérience aléatoire consiste à remplacer un phénomène aléatoire réel (par exemple un tirage de boule, un lancer de dé, un choix au hasard) par une règle simple appliquée à un nombre aléatoire généré par l’ordinateur.

Par exemple, comme la probabilité que la valeur renvoyée par un appel de rd.random() appartienne à l’intervalle \( [0,\tfrac13[ \) est égale à \( \tfrac13 \), on peut simuler le tirage d’une boule dans une urne contenant un tiers de boules rouges et deux tiers de boules vertes de la manière suivante :

import numpy.random as rd

U = rd.random()
if U < 1/3:
    couleur = "rouge"
else:
    couleur = "verte"

Dans ce code :

  • un nombre est choisi au hasard dans \( [0,1[ \),
  • un nombre strictement inférieur à \( \tfrac13 \) correspond à une boule rouge,
  • un nombre supérieur ou égal à \( \tfrac13 \) correspond à une boule verte.

On peut de la même manière utiliser rd.randint pour simuler des tirages discrets. Par exemple, pour simuler le lancer d’un dé équilibré à six faces :

import numpy.random as rd

X = rd.randint(1,7)

Ici, la variable X prend l’une des valeurs \( 1,2,3,4,5,6 \) avec la même probabilité, ce qui correspond exactement au modèle mathématique d’un dé équilibré.




La loi des grands nombres affirme que, lorsque l’on répète un grand nombre de fois la même expérience aléatoire indépendante, la fréquence de réalisation d’un événement se rapproche de sa probabilité théorique.

En pratique, pour déterminer une valeur approchée de la probabilité \( \mathbb{P}(A) \) d'un événement \( A \) avec Python, on procède donc ainsi :

  • on répète l’expérience un grand nombre de fois (par exemple \( N = 10\,000 \)),
  • on compte le nombre de fois où l'événement \( A \) s'est réalisé à l'aide d'un compteur compteur / N,
  • on renvoie la fréquence compteur / N.
Par exemple, si l'on veut estimer la probabilité que, lorsqu'on lance deux dés équilibrés à six faces, les deux dés donnent le même résultat, on peut utiliser le programme suivant :
import numpy.random as rd

N = 10000
compteur = 0

for i in range(N):
    if rd.randint(6) == rd.randint(6):
        compteur = compteur + 1

estimation = compteur / N
print(estimation)

Plus la valeur de N est grande, plus l’estimation obtenue est proche de la probabilité théorique recherchée.

Exemple

import random as rd

N = int(input("N = "))
compteur = 0

for k in range(N):
    U = rd.random()
    if U < 1/2:
        compteur += 1

print(compteur)

Explication

Le programme commence par demander à l'utilisateur d'entrer un entier naturel, stocké dans la variable N puis initialise la variable compteur à 0.

Ensuite, pour k variant de 0 à N-1 :

  • on choisit un nombre réel au hasard dans \( [0,1 [ \), qui est affecté à U,
  • on compare U et \( \frac{1}{2} \) et on augmente la variable compteur de \( 1 \) à chaque fois que U est inférieur à \( \frac{1}{2} \), ce qui correspond à un événement de probabilité \( \frac{1}{2} \) (par exemple obtenir pile quand on lande une pièce équilibrée).

À la fin, on a donc simulé une suite de \( N \) expériences indépendantes de Bernoulli (en appelant succès \og obtenir un nombre inférieur à \( \frac{1}{2} \) (ou obtenir pile quand on lance une pièce équilibrée) \fg{} et compté le nombre de succès obtenus.

Trois commandes utiles aujourd’hui

Clique sur une carte pour voir l’instruction utile.

Simuler un événement de probabilité \(p\)
Calculer la moyenne des coefficients d’un tableau
Calculer la somme des coefficients d’un tableau

Un exercice pour vérifier ta maîtrise

Compléter le script suivant pour qu’il renvoie une estimation de la probabilité d’obtenir une somme égale à 7 en lançant deux dés équilibrés.

Et pour quelques minutes de plus…

Prendre en main la programmation, pas à pas.

Ces exercices sont conçus pour t’aider à maîtriser progressivement la programmation en Python, en partant de la lecture et de la compréhension du code, jusqu’à l’écriture autonome de scripts complets.

L’objectif n’est pas d’aller vite, mais de construire des automatismes solides, en comprenant ce que fait chaque instruction, puis en apprenant à les utiliser par toi-même.

L’ordre des exercices est volontaire : on lit, on comprend, on complète, puis on écrit seul. Prends le temps de chaque étape : c’est la clé pour progresser durablement.

Niveau 1 Analyser un code

Comprendre avant d’écrire.
Dans cette première série, tu observes et analyses des scripts Python déjà écrits. L’objectif est de comprendre la logique du programme, le rôle des variables, des boucles et des conditions, et d’être capable de prévoir ce que le code affiche ou calcule.

Niveau 2 Compléter un code

Écrire, mais avec un cadre.
Ici, tu passes à l’écriture sans partir de zéro. Le squelette du programme est fourni : il te reste à compléter certaines instructions pour que le code fonctionne correctement. Ce format permet de se concentrer sur l’essentiel, sans se perdre dans la structure générale.

Niveau 3 Écrire un code complet

Passer à l’autonomie.
Dans cette dernière série, tu écris un programme complet à partir d’une consigne. Tu dois organiser ton code, choisir les bonnes instructions et construire la logique globale du script. C’est ici que tu mets en pratique tout ce que tu as appris dans les niveaux précédents.

error: Ce contenu est protégé !