Adloun

Simuler pour vérifier

Exercice supplémentaire · niveau 2 · enseignement scientifique (première), chapitre 16 — Phénomènes aléatoires

Énoncé

On veut vérifier par simulation le résultat de l'exercice 6, où quatre feux sont verts avec probabilité 0,4 chacun.


import random

def un_trajet(p, n):
    """Compte les feux verts sur un trajet de n feux."""
    verts = 0
    for _ in range(n):
        if random.random() < p:
            verts = verts + 1
    return verts

def simulation(nb_trajets, p, n):
    compte = [0, 0, 0, 0, 0]
    for _ in range(nb_trajets):
        compte[un_trajet(p, n)] = compte[un_trajet(p, n)] + 1
    return [c / nb_trajets for c in compte]

print(simulation(100000, 0.4, 4))

Corrigé

1. La ligne qui incrémente le compteur, compte[un_trajet(p, n)]<br>\phantom{xxxx= compte[un_trajet(p, n)] + 1}, appelle un_trajet deux fois. Les deux appels tirent au sort indépendamment et ne donnent en général pas le même nombre de feux verts : on incrémente donc une case en lisant l'ancienne valeur d'une autre. Le tableau final est faux.

2. Il faut stocker le résultat d'un seul tirage :


        k = un_trajet(p, n)
        compte[k] = compte[k] + 1

3. Les probabilités exactes calculées à l'exercice 6 étaient 0,1296 ; 0,3456 ; 0,3456 ; 0,1536 ; 0,0256. Les fréquences simulées en diffèrent de moins de 0,001 dans chaque cas : l'accord est excellent, comme le laissait prévoir la loi des grands nombres avec 100 000 répétitions.

4. Une simulation est une expérience aléatoire : elle donne des fréquences, qui fluctuent d'une exécution à l'autre. Avec 100 trajets seulement, les écarts atteindraient couramment plusieurs centièmes, et la dernière case — de probabilité 0,0256 — vaudrait souvent 0,01 ou 0,05, voire 0. Une simulation courte ne permet jamais de départager deux modèles proches.

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.