set.seed(1)

Exercice 1

nt = 500
a = 100
N = 100

1.1/

E(M) doit tendre vers a quand n tend vers l’infini.

tM = array(nt)
mM = array(N)
for(n in 1:N){
  for(i in 1:nt){
    tM[i] = max(runif(n,0,a))
  }
  mM[n] = mean(tM)
}
plot(mM,xlab = "n",ylab = "E(M)", ylim = c(min(mM),a*1.1))

Chaque point représente la moyenne de M sur nt (500) répétitions du jeu. E(M) suit la fonction \(a*\frac{n}{n+1}\), qui tend bien vers a quand n tend vers l’infini.

On doit pouvoir corriger M en le multipliant par \(\frac{n+1}{n}\) :

for(n in 1:N){
  for(i in 1:nt){
    tM[i] = ((n+1)/n)*max(runif(n,0,a))
  }
  mM[n] = mean(tM)
}
plot(mM,xlab = "n",ylab = "E(M)")

Cette modification semble bien corriger l’estimateur M.

\(Var(M) = E(M^2)-E(M)^2\). On obtient la variance suivante :

vM = array(N)
for(n in 1:N){
  for(i in 1:nt){
    tM[i] = ((n+1)/n)*max(runif(n,0,a))
  }
  m = mean(tM)
  vM[n] = (mean(tM*tM)-m*m)
}
plot(vM,xlab = "n",ylab = "Var(M)")

Cette variance semble proportionnelle à a². On le voit en traçant le même graphe pour a = 1 et a = 10 :

1.2/

Le nouvel estimateur :

M = array(nt)
mM = array(N)
for(i in 1:N){
  for(n in 1:nt){
    M[n] = (2/n)*sum(runif(n,0,a))
  }
  mM[i] = mean(M)
}
plot(mM,xlab="n",ylab="E(M')",ylim = c(a*0.98, a*1.04))

Et le précédent (corrigé) tracé avec le même axe y :

Cet estimateur est moins fiable que le premier (corrigé) pour n>20.

L’espérance de la loi uniforme sur \([0;a]\) est \(\frac{a}{2}\), donc \(2*\sum\frac{Xi}{n}\) avec les \(X_i\) tirés selon cette loi doit estimer a.

Or, \(\frac{2}{n} * \sum{X_i} = 2*\sum\frac{Xi}{n}\), soit 2 fois la moyenne des nombres tirés.

M = array(nt)
vM = array(N)
for(i in 1:N){
  for(n in 1:nt){
    M[n] = (2/n)*sum(runif(n,0,a))
  }
  vM[i] = var(M)
}
plot(vM,xlab = "n",ylab = "Var(M')")

La variance de l’estimateur semble être indépendante de n. Elle est bien meilleure pour n petit, mais ne s’améliore pas et devient moins bonne que celle du premier estimateur lorsque n grandit. Cette variance est également proportionnelle à a². On le voit en traçant le même graphe pour a = 1 et a = 10 :

Exercice 2

N = 100

2.3/

C’est une mauvaise stratégie, car pour gagner avec r(M) = 1.1*M, M doit être inferieur ou égal à \(\frac{a}{1.1}\), ce qui signifie que tous les Xi doivent être inferieurs ou égaux à \(\frac{a}{1.1}\). Donc on a \(P(M \leq \frac{a}{1.1}) = P(X_{i} \leq \frac{a}{1.1})^n\), soit \(\frac{1}{1.1^n}\). La probabilité de gagner devient donc très faible lorsque n est grand :

Proba = array(N)
for(i in 1:N){
  Proba[i] = 1/(1.1^i)
}
plot(Proba, ylab = "Probabilité de gagner", xlab = "n", ylim = c(0,1))
abline(h=0.5)
abline(h=0.1)

On voit que la probabilité de gagner est inférieure à 0.5 pour \(n \geq 8\) et inférieure à 0.1 pour \(n \geq 25\).

Pour n = 10, la probabilité de gagner est de 0.3855.

2.4/

w = matrix(0,11,11)
for(a in 1:11){
  for(i in 1:1000000){
    t = max(sample(a,3,TRUE))
    w[t,a] = w[t,a]+1
  }
}
for(a in 0:10){
  plot(w[a+1,]/sum(w[a+1,]), ylim = c(0,1), ylab = paste(c("P(A=x)"), collapse=""),xaxt = "n", main = paste(c("M=",toString(a/10)),collapse = ""))
  axis(1, at=1:11, labels=(0:10)/10)
  abline(h = 0.2)
  abline(h = 0.4)
  abline(h = 0.6)
  abline(h = 0.8)
}

tab = array(11)
for(a in 1:11){
  for(i in 1:11){
    tab[i] = (sum(w[a,i:11])/sum(w[a,]))*(((i-1)/10)-((a-1)/10))
  }
  plot(tab, ylab = "Gain moyen pour chaque réponse",xaxt="n", xlab = "Réponse", ylim = c(0,max(tab)), main = paste(c("Gain moyen pour M=",toString((a-1)/10)),collapse = ""))
  axis(1, at=1:11, label=(0:10)/10)
}

Pour M=0.5, on a P(A=0), P(A=0.1), P(A=0.2), P(A=0.3) et P(A=0.4) nulles. P(A=0.5)=0.3666992, P(A=0.6)=0.2313788, P(A=0.7)=0.1547244, P(A=0.8)=0.1088591, P(A=0.9)=0.0787135 et P(A=1)=0.0596251

Si M vaut 0.5, la valeur de A la plus probable est 0.5, mais ce n’est pas la plus rentable.

En effet, le gain étant \(r(M)-M\) pour \(r(M) \leq A\) et 0 sinon, on ne gagnera rien en répondant 0.5. Ensuite, on gagnera même si la réponse n’est pas exactement A, tant qu’elle n’est pas superieure à A. On doit donc pondérer la somme potentiellement gagnée par la probabilité que A soit superieur ou égal à la réponse donnée.

Si on veut maximiser ses chances de gagner quelque chose dans une partie, on doit répondre M+0.1 à moins que M=1, auquel cas on ne peut pas faire de gain.

Ici, la réponse la plus sûre pour avoir un gain immédiat est 0.6. En revanche, celle produisant les meilleurs gains à long terme est 0.7 (lecture du graphique).

2.5/

Cette stratégie semble prometteuse puisque r(M) suit une fonction de M telle que \(r(M) \geq M\) et \(r(M) \in [0;1]\).

r = matrix(0,1000,10000)
mM = array(10)
for(alpha in 1:1000){
  for(i in 1:10000){
    a = runif(1,0,1)
    m = max(runif(2,0,a))
    t = m^(alpha/1000)
    if(t<=a){
      r[alpha,i] = t-m
    }else{
      r[alpha,i] = 0
    }
  }
  mM[alpha] = mean(r[alpha,])
}

Les valeurs de G pour \(\alpha \in \{0.3, 0.5, 0.7\}\) sont respectivement 0.0551778, 0.0663639 et 0.0555558.

plot(mM, xaxt="n", main = "Gain moyen selon alpha pour a quelconque sur [0;1] et n=2", xlab = "alpha", ylab = "")
axis(1, at=1:1000, label=(1:1000)/1000)

On observe que le gain moyen maximum est obtenu pour \(\alpha \approx\) 0.5.

r = matrix(0,1000,10000)
mM = array(10)
for(alpha in 1:1000){
  for(i in 1:10000){
    a = runif(1,0,1)
    m = max(runif(10,0,a))
    t = m^(alpha/1000)
    if(t<=a){
      r[alpha,i] = t-m
    }else{
      r[alpha,i] = 0
    }
  }
  mM[alpha] = mean(r[alpha,])
}

Les valeurs de G pour \(\alpha \in \{0.3, 0.5, 0.7\}\) sont respectivement 0.0056991, 0.0098829 et 0.0134939.

plot(mM, xaxt="n", main = "Gain moyen selon alpha pour a quelconque sur [0;1] et n=10", xlab = "alpha", ylab = "")
axis(1, at=1:1000, label=(1:1000)/1000)

On observe que le gain moyen maximum est obtenu pour \(\alpha \approx\) 0.8.

\(\alpha\) doit donc être déterminé en fonction de n.