Le paradoxe des anniversaires, simulé puis calculé
Exercice · niveau 2 · mathématiques approfondies (ECG 1re année), chapitre 11 — Informatique et algorithmique · Simuler une loi, estimer une probabilité
Énoncé
Estimer par simulation la probabilité que, parmi personnes, deux au moins soient nées le même jour — année de jours, dates équiprobables et indépendantes — puis comparer à la valeur exacte.
Corrigé
import numpy as np
import numpy.random as rd
def coincidence(n):
# rend 1 s'il y a au moins deux dates egales parmi n, 0 sinon
t = rd.randint(0, 365, n)
for i in range(n):
for j in range(i + 1, n):
if t[i] == t[j]:
return 1
return 0
N = 100000
s = 0
for r in range(N):
s = s + coincidence(23)
print(s / N) # environ 0.507
p = 1.0
for k in range(23):
p = p * (1 - k / 365) # toutes les dates distinctes
print(1 - p) # 0.5072972...
Le calcul exact. L'événement contraire est « les dates sont deux à deux distinctes ». En plaçant les personnes une à une, la -ième doit éviter les dates déjà prises :
d'où la probabilité cherchée — au-delà d'une chance sur deux avec seulement personnes, ce qui est le « paradoxe » : les comparaisons sont au nombre de , pas .
L'accord. La simulation rend à quelques millièmes près, et pas mieux : la fréquence sur tirages a pour écart-type .
Le point à retenir. Ce que la simulation apporte n'est pas la valeur — le calcul exact la donne mieux — mais la confiance : deux chemins indépendants qui aboutissent au même nombre valident le modèle. Et c'est la loi faible des grands nombres qui autorise à lire une probabilité sur une fréquence.
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.