Pour ce DM, j’ai discuté avec Alan Guivarch, Alexandre Salmon, Alexandra Chaton
Essayons tout d’abord de faire varier le nombre de tirages.
set.seed(100)
for (n in c(1:10)) {
# Alice choisit un nb a
a = 5000
# Tirage des x de X1,...Xn
M = replicate(10000,max(runif(n,0.0,a)))
# Affichage du résultat
cat("E(M)=",mean(M),"avec a=5000 et n=",n,"\n")
}
## E(M)= 2501.478 avec a=5000 et n= 1
## E(M)= 3318.775 avec a=5000 et n= 2
## E(M)= 3753.937 avec a=5000 et n= 3
## E(M)= 3997.609 avec a=5000 et n= 4
## E(M)= 4162.985 avec a=5000 et n= 5
## E(M)= 4288.216 avec a=5000 et n= 6
## E(M)= 4372.839 avec a=5000 et n= 7
## E(M)= 4445.763 avec a=5000 et n= 8
## E(M)= 4504.572 avec a=5000 et n= 9
## E(M)= 4538.941 avec a=5000 et n= 10
Je remarque que lorsque la valeur de n augmente, le résultat augmente et tend vers la valeur de a.
Essayons maintenant de faire varier la valeur a choisie initialement par Alice.
set.seed(100)
n = 10
for (a in c(2,5,30,400)) {
M = replicate(10000,max(runif(n,0.0,a)))
cat("E(M)=",mean(M)," avec n=10 et a=",a,"\n")
}
## E(M)= 1.817291 avec n=10 et a= 2
## E(M)= 4.54394 avec n=10 et a= 5
## E(M)= 27.24865 avec n=10 et a= 30
## E(M)= 363.7088 avec n=10 et a= 400
Je remarque que si on si on fait varier la valeur de a pour un n fixé, l’écart entre le maximum et a augmente (la valeur de l’espérance augmente)
Soit N le nombre de répétitions. \[\mathbb{E}(M) = \frac{\sum_{i=1}^{N} max(X_{i})}{N} \to a\]
En utilisant mes expériences précédentes, je peux en déduire l’écriture suivante : \[\mathbb{E}(M) = \frac{an}{n+1} \to a\]
Pour obtenir exactement a avec l’expression précédente, on peut la “corriger” en la multipliant avec la fraction \(\frac{n+1}{n}\). Cela nous donne bel et bien par simplification a.
v = mean(M**2) - mean(M)**2
print(v)
## [1] 1089.639
print(var(M))
## [1] 1089.748
v2 = (((a**2)*n)/(n+2)) - (a*n/(n+1))**2
print(v2)
## [1] 1101.928
La formule de la variance est : \[ Var(M) = \mathbb{E}(M^{2}) - (\mathbb{E}(M))^{2}\] Si l’on remplace l’Espérance de M par la formule empirique déduite précédemment, on obtient une approche empirique de la variance en fonction de a et de n. Après calcul de \(\mathbb{E}(M^{2})\) grâce à la formule de l’intégrale, on obtient l’expression suivante :
\[ Var(M) = \frac{a^{2}n}{n+2} - (\frac{an}{n+1})^{2}\]
set.seed(100)
# Variation de n
for (n in c(1:10)) {
# Alice choisit un nb a
a = 5000
# Tirage des x de X1,...Xn
M2 = replicate(10000,(2/n)*sum(runif(n,0.0,a)))
# Affichage du résultat
cat("E(M')=",mean(M2),"avec a=5000 et n=",n,"\n")
}
## E(M')= 5002.956 avec a=5000 et n= 1
## E(M')= 4976.171 avec a=5000 et n= 2
## E(M')= 4989.079 avec a=5000 et n= 3
## E(M')= 4996.226 avec a=5000 et n= 4
## E(M')= 4989.956 avec a=5000 et n= 5
## E(M')= 5023.594 avec a=5000 et n= 6
## E(M')= 5004.889 avec a=5000 et n= 7
## E(M')= 5013.376 avec a=5000 et n= 8
## E(M')= 5008.381 avec a=5000 et n= 9
## E(M')= 4990.928 avec a=5000 et n= 10
n = 10
for (a in c(2,5,30,400)) {
M2 = replicate(10000,(2/n)*sum(runif(n,0.0,a)))
cat("E(M')=",mean(M2)," avec n=10 et a=",a,"\n")
}
## E(M')= 2.002953 avec n=10 et a= 2
## E(M')= 5.000134 avec n=10 et a= 5
## E(M')= 29.99407 avec n=10 et a= 30
## E(M')= 401.2726 avec n=10 et a= 400
On remarque maintenant que le fait de faire varier n pour un a fixé, n’influe plus sur la valeur de l’espérance.
Le fait de faire varier a pour un n fixé, influe sur l’espérance. Elle varie de façon proportionnelle à a.
On peut le montrer en réécrivant l’expression de départ telle que : \[ M' = \frac{2}{n}\times\sum_{i=1}^{n} X_{i} = 2\times\frac{\sum_{i=1}^{n} X_{i}}{n} = 2\times\mathbb{E}(M') = 2\times\frac{a}{2} = a \] Cela fonctionne car les \(X_i\) sont uniformes.
On en déduit l’expression de l’espérance suivante :
\[\mathbb{E}(M') = \]
v = mean(M2**2) - mean(M2)**2
print(v)
## [1] 5237.635
print(var(M2))
## [1] 5238.158
\[ Var(M) = a^{2} - ()^{2}\]
La stratégie de Bob n’est pas très bonne, parce que tout au plus il gagnera M*1.1 - M, soit 0.1% de M, c’est-à-dire au mieux 1 centime.
set.seed(100)
# Variation de A
n = 10
A = runif(n,0.0,1.0)
for (i in c(1:n)) {
# Tirage des x de X1,...Xn
M = replicate(10000,max(runif(n,0.0,A[i])))
# Proposition de Bob
RM = M*1.1
cat("E(M')=",mean(RM <= A),"avec n=",n," et A=",A[i],"\n")
gain = 0
for(j in c(1:10000)) {
if(RM[j] <= A[i]) {
gain = gain + (RM[j] - M[j])
}
}
cat("gain=",gain,"\n\n")
}
## E(M')= 0.6453 avec n= 10 et A= 0.3077661
## gain= 99.259
##
## E(M')= 0.7398 avec n= 10 et A= 0.2576725
## gain= 82.65328
##
## E(M')= 0.1929 avec n= 10 et A= 0.5523224
## gain= 177.6815
##
## E(M')= 0.936 avec n= 10 et A= 0.05638315
## gain= 18.08012
##
## E(M')= 0.3972 avec n= 10 et A= 0.4685493
## gain= 147.6247
##
## E(M')= 0.3669 avec n= 10 et A= 0.4837707
## gain= 155.8744
##
## E(M')= 0.0419 avec n= 10 et A= 0.8124026
## gain= 257.2691
##
## E(M')= 0.547 avec n= 10 et A= 0.3703205
## gain= 116.4434
##
## E(M')= 0.1994 avec n= 10 et A= 0.5465586
## gain= 170.7164
##
## E(M')= 0.8393 avec n= 10 et A= 0.1702621
## gain= 54.85304
Avec les résultats du dessus on peut voir que la stratégie de Bob n’est pas bonne car l’espérance de gain est faible.
set.seed(100)
# Variation de A
n = 3
A = sample(x=c(0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0),size = n,replace = T)
# Tirage des x de X1,...Xn
M = replicate(10000,max(runif(n,0.0,A))%%0.1)
set.seed(100)
# Variation de A
for(alpha in c(0.7,0.5,0.3)) {
n = 10
A = runif(n,0.0,1.0)
for (i in c(1:n)) {
# Tirage des x de X1,...Xn
M = replicate(10000,max(runif(n,0.0,A[i])))
# Proposition de Bob
RM = M**alpha
cat("E(M')=",mean(RM <= A),"avec n=",n," et A=",A[i],"\n")
gain = 0
for(j in c(1:10000)) {
if(RM[j] <= A[i]) {
gain = gain + (RM[j] - M[j])
}
}
cat("gain=",gain,"\n\n")
}
}
## E(M')= 0.5086 avec n= 10 et A= 0.3077661
## gain= 6.898741
##
## E(M')= 0.5594 avec n= 10 et A= 0.2576725
## gain= 2.919364
##
## E(M')= 0.1169 avec n= 10 et A= 0.5523224
## gain= 101.1162
##
## E(M')= 0.9 avec n= 10 et A= 0.05638315
## gain= 0
##
## E(M')= 0.1857 avec n= 10 et A= 0.4685493
## gain= 50.8654
##
## E(M')= 0.1653 avec n= 10 et A= 0.4837707
## gain= 57.95032
##
## E(M')= 0.0419 avec n= 10 et A= 0.8124026
## gain= 341.5421
##
## E(M')= 0.402 avec n= 10 et A= 0.3703205
## gain= 15.97992
##
## E(M')= 0.1172 avec n= 10 et A= 0.5465586
## gain= 89.43115
##
## E(M')= 0.7199 avec n= 10 et A= 0.1702621
## gain= 0.5278893
##
## E(M')= 0.3216 avec n= 10 et A= 0.8339043
## gain= 266.5
##
## E(M')= 0.7 avec n= 10 et A= 0.06375672
## gain= 0
##
## E(M')= 0.7 avec n= 10 et A= 0.07156163
## gain= 0
##
## E(M')= 0.5005 avec n= 10 et A= 0.5813128
## gain= 12.81416
##
## E(M')= 0.5011 avec n= 10 et A= 0.5303062
## gain= 2.741632
##
## E(M')= 0.1873 avec n= 10 et A= 0.9692256
## gain= 503.65
##
## E(M')= 0.1875 avec n= 10 et A= 0.9685131
## gain= 501.1081
##
## E(M')= 0.2599 avec n= 10 et A= 0.9396243
## gain= 496.9627
##
## E(M')= 0.7 avec n= 10 et A= 0.01404462
## gain= 0
##
## E(M')= 0.3387 avec n= 10 et A= 0.7810237
## gain= 155.1193
##
## E(M')= 0.0375 avec n= 10 et A= 0.6991043
## gain= 1.599267
##
## E(M')= 0.004 avec n= 10 et A= 0.8720115
## gain= 112.3333
##
## E(M')= 0.1007 avec n= 10 et A= 0.6005099
## gain= 0
##
## E(M')= 0.8 avec n= 10 et A= 0.0205602
## gain= 0
##
## E(M')= 0.1004 avec n= 10 et A= 0.6235031
## gain= 0
##
## E(M')= 0.0275 avec n= 10 et A= 0.7160975
## gain= 0.3993705
##
## E(M')= 0.1544 avec n= 10 et A= 0.3642408
## gain= 0
##
## E(M')= 0.2765 avec n= 10 et A= 0.3140639
## gain= 0
##
## E(M')= 0.0865 avec n= 10 et A= 0.6432802
## gain= 0
##
## E(M')= 0.6519 avec n= 10 et A= 0.03682868
## gain= 0
set.seed(100)
n= 1000
# Proposition de Bob
flip = sample(x=c("P","F"),size=n,replace=T)
cat("E(M')=",mean(flip == "P"),"avec n=",n,"\n")
## E(M')= 0.48 avec n= 1000
Si la pièce de monnaie est non biaisée, il possède une chance de gagner égale à \(\frac{1}{2}\).
De mon avis, une meilleure stratégie pour Bob serait de répondre “oui” uniquement si la valeur donnée par Alice est supérieure à 0.5. En effet, si la valeur est supérieure à 0.5, il y a moins de chance que l’autre valeur soit supérieure à celle-ci.
Dans ce cas là, Bob à 100% de chances de gagner avec ma stratégie.
set.seed(100)
n= 1000
A1 = runif(n,0.0,1.0)
A2 = runif(n,A1,1.0)
# Proposition de Bob
flip = sample(x=c("P","F"),size=n,replace=T)
res <- c(1:n)
res2 <- c(1:n)
for(i in c(1:n)) {
res[i] = (flip[i] == "P" && A2[i] >= 0.5 || flip[i] == "F" && A1[i] < 0.5)
}
cat("E(M')=",mean(res == 1),"avec n=",n,"\n")
## E(M')= 0.652 avec n= 1000
On remarque qu’avec ma stratégie, que l’on passe en effet de 50% de chances de victoire à 65% lorsque Alice tire ses nombres uniformément.