set.seed(3)

Exercice 1

Intuition:

Si \(n < a\) alors il y a peut de chance que Bob trouve \(a\), mais plus \(n\) est grand plus il sera facile pour Bob de déterminer \(a\).

Q1.1

#Etude du cas pour différentes valeurs de a
a = seq(10,100,by=10)
n = 100
x = c()
for(i in 1:10){
x[i] = max(runif(n,0,a[i]))
}
plot(a,x,ylab="Xi")

On peut voir que la valeur max est proportionelle à \(a\). En prenant un n grand et en fesant varier \(a\) on se rend compte que ca ne change pas vraiment la valeur max trouver en fonction de \(a\). Donc on en deduis que pour avoir une valeur max proche de \(a\), ce n’est pas le choix de \(a\) qui est important mais le choix de \(n\). On va donc faire varier \(n\).

#Etude du cas pour différentes valeurs de n
a = 100
n = seq(10,90,by=10)
x = c()
for(i in 1:9){
x[i] = max(runif(n[i],0,a))
}
plot(n,x, ylab="Xi")

On remarque que les points formes un fonction de la forme de la fonction \(log\), donc que plus \(n\) est grand (donc plus on a de valeur dans l’intervalle) plus la valeur max tend vers \(a\).

On calcul l’esperence de \(M\) pour différente valeur de \(a\).

a = 100
n = 4 
x = replicate(1000,max(runif(n,0,a)))
mean(x)
## [1] 79.97826
a = 10
n = 4 
x = replicate(1000,max(runif(n,0,a)))
mean(x)
## [1] 7.929425

On remarque que lorsqu’on multiplie \(a\) par 10 on multiplie egalement la moyenne de la valeur max par 10, donc \(a\) est un coeficient dans la formule de l’espérence. Comme le choix de \(a\) ne va pas modifier la valeur max (elle est seulement un coefficient) on va poser \(a = 100\) pour essayer d’estimer une formule.

a = 100
n = 2 
x = replicate(1000,max(runif(n,0,a)))
mean(x)
## [1] 66.52354
a = 100
n = 3 
x = replicate(1000,max(runif(n,0,a)))
mean(x)
## [1] 75.56522
a = 100
n = 5
x = replicate(1000,max(runif(n,0,a)))
mean(x)
## [1] 84.09142
#calcul de la moyenne pour différente valeur de n
a = 100
n = c(2:10)
y = c()
for (i in 1:9){
y[i] = mean(replicate(1000,max(runif(n[i],0,a))))
}
plot(n,y)

#affichage de la fonction (1 - (1/(n+1)))*a)
z = c()
for (j in 1:9){
z[j] = (1 - (1/(j+1)))*100
}
plot(z)

Après plusieurs essaies sur des petites valeurs de \(n\), on remarque que l’esperence de \(M\) dépend de \(n\) de tel façons que : \[E[M] = (1 - ({1\over n+1}))*a\] Après affichage de la courbe de la fonction \((1 - ({1\over n+1}))*a\) on peut voir que c’est en effet la même courbe de fonction.

On cherche donc \(n\) tel que \[E[M] = a\]

soit \[(1 - {1\over(n+1)})*a = a\] On veut donc que \[{1\over(n+1)}\] soit le plus proche possible de 0. Donc pour corriger M il faut un n le plus grand possible.

#calcul de la variance
a = 100
n = c(2:10)
y = c()
for (i in 1:9){
y[i] = var(replicate(1000,max(runif(n[i],0,a))))
}
plot(n,y)

La formule de la variance se calculs en fonction de l’espérence, on a \[var(M) = {n*a^2\over{n+2}} - ({n*a\over{n+1}})^2\]

Q1.2

a = seq(10,100,by=10)
n = 100
x = c()
for(i in 1:10){
x[i] = (2/n)*sum(runif(n,0,a[i]))
}
plot(a,x)

a = 100
n = c(2:10)
y = c()
for (i in 1:9){
y[i] = mean(replicate(1000,(2/n[i])*sum(runif(n[i],0,a))))
}
plot(x=n,y=y,asp =1/10)

a = 100
n = 6
(2/n)*sum(runif(n,0,a))
## [1] 115.6076

On remarque que quand on augente \(n\) la valeur moyenne trouvé reste pratiquement la même. De plus on trouve des valeurs qui sont plus grande que \(a\). \(M'\) parait meilleur que \(M\) pour un petit nombre de \(n\). Car peut importe la valeur de \(n\) on retrouve la valeur \(a\) assez facilement.

Exercice 2

Q2.3

On sait que l’esperence de \(M\) est \((1 - {1\over(n+1)})*a\) donc pour \(n = 10\) on a en moyenne \(M=(1 - (1/11)) * a\). Donc \(a = 1.1*M\). Donc c’est judicieux de prendre \(r(M) = 1.1*M\). Cependant ici on a pris comme base la valeur moyenne de \(M\), donc Bob tombera parfois sur des valeurs en dessous qui lui feront gagner moins mais aussi sur des valeurs au dessus qui ne lui ferons rien gagner du tout. Notamment comme on prend a entre 0 et 1, il y a des valeur de \(r(M)\) qui dépasserons 1 donc qui sont fausse d’office, mais cela n’est pas pris en compte dans la méthode de Bob.

Ce code permet de donner la valeur moyenne du gain \(G\) de Bob.

G=c()
for (i in 1:10000){
  a = runif(1,0,1)
  n = 10
  X = runif(n,0,a)
  M=max(X)
  r=1.1*M
  if(r>a){
    G[i] = 0
  }else{
    G[i]=r - M
  }
}
mean(G)
## [1] 0.01610574

Empiriquement on trouve que l’esperence de \(G\) est d’environ 0.016 soit environ 1 centimes.

Q2.4

Pour calculer la probabilité \(P[A=a,M=m]\) pour différentes valeurs de \(a\) et de \(m\), la foction probAaMm nous permet de generer la probabilité pour un certains \(a\) et \(m\) donnée en paramêtre.

probaAaMm = function(a, m, N){
  n=3
  p=c()
  for(k in 1:N){
    A = sample(x = 0:10, size = 1, replace = T)/10
    X = sample(x = 0:(10*A), size = n, replace = T)/10
    M = max(X)
    p = c(p,(A==a && M==m))
  }
  return (mean(p==TRUE))
}

 probaAaMm(0.6,0.2,10000)
## [1] 0.0047
 probaAaMm(0.3,0.2,10000)
## [1] 0.0284
 probaAaMm(0.6,0.5,10000)
## [1] 0.0248

Ce code permet de gerner, pour un a donné en paramêtre, la probabilité \(P[A=a|M=0.5]\).

probaAasachantMm = function(a, N){
  n=3
  p=c()
  saveM = c()
  for(i in 1:N){
    A = sample(x = 0:10, size = 1, replace = T)/10
    X = sample(x = 0:(10*A), size = n, replace = T)/10
    M = max(X)
    p = c(p,(A==a && M==0.5))
    saveM = c(saveM,M)
  }
  return (mean(p==TRUE)/mean(saveM==0.5))
}
#on affiche toutes les probabilités calculés
proba = c()
for(i in 1:10){
proba = c(proba,probaAasachantMm(i/10,10000))
}
plot(proba)

#valeur de la probabilité pour a=0.5
probaAasachantMm(0.5,10000)
## [1] 0.3816794

On remarque sur le graphe que si Alice nous annonce que \(M=0.5\) alors il faut que Bob lui propose \(A=0.5\) car c’est pour \(A=0.5\) que la probabilité de \(A\) sachant \(M\) est la plus grande (environ 0.38).

Q2.5

Comme \(M\) est compirs entre 0 et 1, et qu’on considère \(alpha\) positif, \(M^{alpha}\) sera forcément compris entre 0 et 1. Cette strétégie, contrairement à la première, assure à Bob de ne jamais proposer une valeur supérieur à 1, qui serait donc fausse d’office.

esperanceGain = function(n,alpha){
  G=c()
  for (i in 1:10000){
    a = runif(1,0,1)
    X = runif(n,0,a)
    M=max(X)
    r=M^alpha
    if(r>a){
      G[i] = 0
    }else{
      G[i]=r - M
    }
  }
  return(mean(G))
}

esperanceGain(2,0.7)
## [1] 0.0561546
esperanceGain(2,0.5)
## [1] 0.06651593
esperanceGain(2,0.3)
## [1] 0.05336826
G = c()
for(i in 1:10){
  G = c(G,esperanceGain(2,i/10))
}
plot(seq(0.1,1,by=0.1),G, xlab="alpha",ylab="gain")

Pour \(n=2\), parmis les valeurs de \(alpha\) proposé c’est \(alpha = 0.5\) qui assure un gain maximal à Bob d’environ 6 centimes en moyenne. D’après le graphe on peut remarquer que c’est bien la meilleur valeur d’\(alpha\) pour \(n=2\).

G = c()
for(i in 1:10){
  G = c(G,esperanceGain(10,i/10))
}
plot(seq(0.1,1,by=0.1),G, xlab="alpha",ylab="gain")

esperanceGain(10,0.8)
## [1] 0.01456347

D’après le graphe représentant le gain obtenu en fonction de la valeur de \(alpha\), on peut remarquer que la meilleur valeur de \(alpha\) pour \(n=10\) est \(alpha=0.8\) qui fait un gain de environ 1 centimes en moyennes.

On peut donc en conclure que cette méthode est meilleur que la précédente mais qu’il faut prendre un \(n\) petit et un \(alpha\) de 0.5.

Exercice 3

Q3.6

Alice tire à pile ou face avec une pièce non truqué, donc la probailité qu’Alice donne à Bob la plus grande valeur (A2) est de 0.5. Donc si Bob répond toujours “oui” à la question “est ce que Alice lui a indiqué la plus grande valeur?” alors il aura ne probabiité de 0.5 de gagner.

Q3.7

Une stratégie pour tomber juste strictemment plus d’une fois sur deux, serait de dire oui seulement si la valeur donnée par Alice est supérieur à 0.5.

Avec cette stratégie lorsque Alice choisis \(A1=0.4\) et \(A2=0.6\), Bob a 100% de chance de gagné car si Alice lui donne \(A1=0.4 < 0.5\) alors Bob répond non et gagne et si ALice lui donne \(A2=0.6 > 0.5\), Bob répond oui et gagne également.

proba = c()
for(i in 1:1000){
A = runif(1,0,1)
B = runif(1,0,1)
if(A>B){
  A2 = A
  A1 = B
  }else if(A<B){
  A2 = B
  A1 = A
  }else{
  #la probabilité que cela arrive est nul 
  stop(message = "A1=A2")
}
piece = sample(x = 0:1, size = 1, replace = T)
#on considere 1 = pile
proba = c(proba,((piece == 1 && A2 > 0.5) || (piece == 0 && A1 < 0.5)))
}
mean(proba)
## [1] 0.751

Avec cette stratégie lorsque Alice tire uniformément les valeurs de A1 et A2 la probabilité de Bob de gagner est de 75% cela parait donc être une bonne stratégie.