Simulateur R générant le nombre de tirage T necassaire pour tirer toutes les vignettes d’un ensemble de cardinalité M>0.
tirage_vi <- function(M){
T<-0
tab<-rep(0,M)
while(0%in%tab){
tab[sample.int(300,1,replace=TRUE)]<-1
T<-T+1
}
return(T)
}
print(tirage_vi(300))
## [1] 1646
On calcule la moyenne de T de 500 experiences indépendantes sur plusieurs ensembles.
M<-c(10,15,25,30,40,50,75,100,125,150,175,200,250,300)
nbrep<-500
moy_T<-rep(0,length(M))
for(i in 1:length(M)){
stop<-nbrep #nb répétition de l'experience
tab_T<-rep(0,stop)
while (stop > 0){
tab_T[stop]<-tirage_vi(M[i])
stop<-stop-1
}
moy_T[i]<-mean(tab_T)
}
plot(M,moy_T,xlab ='nb vignettes collectionnées',ylab='nb vignettes achetées')
La moyenne de tirages necessaires ne semble pas évoluer linéairement par rapport au nombre de vignettes. Confirmons cette intuition avec une moyenne corrigée.
plot(M,moy_T/M,col=1,xlab ='nb vignettes collectionnées', ylab='moyenne corrigée en M')
sur le graphe de moyenne corrigée on voit clairement la non linéarité.
L’énoncé suggère que le tirage des vignettes (Xn) suit une loi uniforme et donc que les tirages sont indépendants.
le calcul de la probabilité de devoir acheter k vignettes pour en avoir une nouvelle, équivaut à tirer k-1 fois une vignette déja possédée, puis tirer une vignette nouvelle.
soit p la probabilité de tirer une vignette nouvelle ici on sait qu’on possède i-1 vignettes parmis les M totales d’ou p = M -(i-1) / M ; alors \[ \mathbb{P}(Y_i = k) = (1-P)^{k-1} \times p\] Yi suit clairement une loi géométrique, et chaque tirage est indépendant car \(Y_i\) n’est pas exprimé en fonction des Y précédents. \[\mathbb{E}(Y_i) = {1 \over p}\] \[\mathbb{V}(Y_i) = \frac{1-p}{p^2}\] T est obtenu en calculant la somme des k obtenus pour chaque \(Y_i\)
Donc: \[ \begin{aligned} \mathbb{E}(T) & = \mathbb{E}(\sum_{i=1}^M y_i) = \sum_{i=1}^M \mathbb{E}(y_i)\\ & = \sum_{i=1}^M \frac{M}{M-i+1}\\ & = M \times \sum_{i=1}^M {1 \over i}\\ & = M \times Ln(M) \text{|} M \to +\infty \end{aligned} \]
Et:
\[\begin{aligned} \mathbb{V}(T) & = \sum_{i=1}^M \mathbb{V}(Y_i)\\ & = \sum_{i=1}^M {M(i-1) \over (M-i+1)^2}\\ & = M \times \sum_{i=1}^M {1 \over i^2} \end{aligned}\]
La loi de tirage des vignettes etant uniforme et les tirages indépendants. Le cout moyen pour avoir l’ensemble des 300 vignettes plus le cahier de collage est donné par:
\[coût = 4 + 2 \times \left({\mathbb{E}(T) \over 10}\right)\]
Considérant que 300 est grand pour ln on peut dire que le coût moyen peut alors s’écrire:
\[coût = 4 + 2 \times M \times {ln(M) \over 10} = 4 + 60ln(300) = 346,22 \]
Génération des probabilités du premier cas
calcul_p_i <- function(M){
p_i<-rep(0,M)
alpha<-0
for (k in 1:M){
alpha<-alpha+(1/k)
}
for (i in 1:M){
p_i[i]<-1/(alpha*i)
}
return(p_i)
}
Génération des probabilités du second cas
calcul_p_i2 <- function(M){
p_i2 <- rep(0,M)
alpha <- 0
for (k in 1:M){
alpha <- alpha+(1/(k*k))
}
for (i in 1:M){
p_i2[i] <- 1/(alpha*i*i)
}
return(p_i2)
}
M<-300
plot(calcul_p_i(M),main='densité probabilités', xlab='vignette i',ylab='p(i)',type='l',col='purple')
lines(calcul_p_i2(M),col=5)
Créons maintenant la fonction de tirage aléatoire non uniforme
tirage_nu <- function (m,p){
T<-0
tab<-rep(0,m)
while(0%in%tab){
tirage<-runif(1)
i<-1
while(tirage >= 1-p[i] && i<=length(p)){
i<-i+1
}
tab[i]<-1
T<-T+1
}
return(T)
}
En laissant tourner ce chunk on remarque qu’il faudrait un temps incroyablement long pour qu’il termine faisons une autre experience; un tirage de 1000 vignettes pour voir la repartition
repartition_nu <-function(k,m,p){
nbTir <- k
qte_vi<-rep(0,m)
while(nbTir>0){
tirage<-runif(1)
i<-1
while(tirage >= 1-p[i] && i<=length(p)){
i<-i+1
}
qte_vi[i]<-qte_vi[i]+1
nbTir<-nbTir-1
}
return(qte_vi)
}
M<-30
barplot(repartition_nu(1000,M,calcul_p_i(M)),main='tirages non uniforme de vignettes', xlab='vignette i',ylab='nombre vignettes tirées',col='purple')
Grace à ce test nous pouvons remarquer que l’écrasante majorité des vignettes se trouve en début de tableau.
essayons avec la deuxième repartition de probabilité.
M<-30
barplot(repartition_nu(1000,M,calcul_p_i2(M)),main='tirages non uniforme de vignettes', xlab='vignette i',ylab='nombre vignettes tirées',col='purple')
le cas est très similaire. mais les densités de probabilité étant plus faibles que dans le premier cas les tirages devront être encore plus nombreux…
En prenant la probabilité décroissante en un terme exponentiel \(2^i\) on arrive très vite sur une asymptote en 0. Autant dire que les chances sont quasi nulles d’obtenir toutes les vignettes.Et donc un temps infini de simulation sur nos machines (i.e machine conçue par un humain; incapable de tirer \(2^{300}\) vignettes (pour info nb d’atomes dans l’univers \(2^{100}\))).