Adloun

Simuler un dé, sans se tromper de convention

Exercice supplémentaire · niveau 1 (application) · mathématiques appliquées (ECG 1re année), chapitre 10 — Probabilités — variables aléatoires réelles · Simulation

Énoncé

Écrire une fonction Python simulant un lancer de dé équilibré à six faces avec rd.randint, puis estimer la fréquence du sur lancers. Quelle erreur commet-on en écrivant rd.randint(1, 6) ?

Corrigé

Le code.

import numpy.random as rd

def de():
    # un entier de 1 a 6, chacun avec la probabilite 1/6
    return rd.randint(1, 7)      # borne HAUTE EXCLUE

N = 100000
tirages = [de() for _ in range(N)]
freq6 = sum(1 for x in tirages if x == 6) / N
print(freq6, 1 / 6)              # ~0.1667   0.16666...

La convention à connaître. Dans numpy.random, rd.randint(a, b) rend un entier tiré uniformément dans : la borne haute est exclue. Pour obtenir , il faut donc écrire rd.randint(1, 7).

L'erreur de rd.randint(1, 6). Cet appel tire uniformément dans : le ne sort jamais, et les cinq autres faces sortent avec la probabilité au lieu de . Le défaut est sournois car le programme ne signale aucune erreur — c'est la fréquence du , nulle au lieu de , qui le révèle.

L'écart attendu sur la fréquence. L'indicatrice « le résultat est un » suit une loi de Bernoulli de paramètre , de variance . La fréquence sur tirages a donc un écart-type de

Lire ou est normal ; lire ou signale une erreur de code, pas un caprice du hasard.

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.