PS DM 1

Partie 1

Question 1

N = 100000

choix_signe <- function(x,y,z){
  rand = sample(100,1, TRUE);
  if(rand<x*100){
    return(1);
  }
  if(rand<(x+y)*100){
    return(2);
  }
  else{
    return(3);
  }
}

decis_victoire <- function(a,b,res){
  if(a-b==1 || a-b==-2){
    return(res-1);
  }
  if(a==b){
    return(res)
  }
  else{
   return(res+1) 
  }
}

res = 0  #score en faveur du joueur A

simul_q1 <- function(a1, a2, a3, b1, b2, b3, N){
  res = 0
  for(i in 1:N){
    a = choix_signe(a1,a2,a3)
    b = choix_signe(b1, b2, b3)
    res = decis_victoire(a, b, res)
  }
  return(res)
}

esp = simul_q1(0.25, 0.25, 0.5, 0.25, 0.25, 0.5, N)/N;

print(esp)
## [1] 3e-04

On obtient une esperance proche de 0, ce qui est normal étant donné que les deux joueurs ont les mêmes probabilités

Question 2

N = 100000
esp2 = simul_q1(0.25, 0.25, 0.5, 1/3, 1/3, 1/3, N)/N;


print(esp2)
## [1] 0.00028

Nous avons également une espérance très proche de 0

Question 3

esp3 = c();
vecX = c();
vecY = c();
N = 1000
compt = 0;
for(i in 0:10){
  for (j in 0:10){
    if((i+j)<=10){
      x = i/10
      y = j/10
      z = 1-x-y
      vecX[compt] = x
      vecY[compt] = y
      esp3[compt] = simul_q1(0.25, 0.25, 0.5, x, y, 1.0-x-y, N)/N;
      compt = compt +1;
    }
  }
}

max = 0
indice = 0
for(i in 1:(compt-1)){
  if(esp3[i]>=max){
    max = esp3[i]
    indice = i;
  }
}
print(max)
## [1] 0.288
print(vecX[indice])
## [1] 1
print(vecY[indice])
## [1] 0

Question 4

Le plus profitable serait que B joue exclusivement pierre car son expérance de gain serait maximal (eniron 0.25 par partie)

Question 5

Pour la question 1 :
Soit X la variable aléatoire du gain de B par partie, A et B les deux variables aléatoires de ce que joue A et B, on a :
E[X] = P(X=1) - P(X=-1)
= P(A=Ciseaux et B=Pierre) + P(A=Feuille et B=Ciseaux) + P(A=Pierre et B=Feuille) - P(A=Ciseaux et B=Feuille) - P(A=Pierre et B=Ciseaux) - P(A=Feuille et B=Pierre)
= 1/8+ 1/8 + 1/16 - 1/8 - 1/8 - 1/16
= 0
On retrouve bien le résultat de la simulation

Pour la question 2 :
E[X] = 1/6 + 1/12 + 1/12 - 1/6 - 1/12 - 1/12 = 0
On retrouve aussi les résultats de la simulation

Pour la question 3 :
E[X] = 1/2x + 1/4(1-x-y) + 1/4y - 1/2y - 1/4(1-x-y) - 1/4x = 1/4y - 1/4x
La stratége à adopter est bien de faire que des feuilles pour maximiser l’espérance contre un joueur qui joue plus pierre.

Partie 2

Question 1

On a conçu un algoruthme qui enregistre les fréquences des différents coups de A : si A a plus tendance a jouer un coup précis, B va joué le contre de ce coup là.

N = 10000

choix_signe_robot <- function(nb_a1, nb_a2, nb_a3){
  if(nb_a1 > nb_a2){
    if(nb_a1 > nb_a3){
      return(2)
    }
    else{
      return(1)
    }
  }
  else{
    if(nb_a2 > nb_a3){
      return(3)
    }
    else{
      return(1)
    }
  }
}

res = 0  #score en faveur du joueur A

simul_q2 <- function(a1, a2, a3, N){
  res = 0
  nb_a1 = 0
  nb_a2 = 0
  nb_a3 = 0
  for(i in 1:N){
    a = choix_signe(a1,a2,a3)
    b = choix_signe_robot(nb_a1, nb_a2, nb_a3)
    #print(a);
    #print(b);
    if(a==1){
      nb_a1 = nb_a1 +1
    }
    if(a==2){
      nb_a2 = nb_a2 +1
    }
    if(a==3){
      nb_a3 = nb_a3 +1
    }
    res = decis_victoire(a, b, res)
  }
  return(res)
}

esp = simul_q2(0.25, 0.25, 0.5, N)/N;

print(esp)
## [1] 0.262

Question 2

L’algorithme renvoie une espérance de gain de 0.25 par partie pour B ce qui correspond à celle calculée dans la partie précédente car l’algorithme revient à joué quasiment que pierre contre un joueur qui joue principalement ciseaux.

Question 3

L’algorithme a aucune chance face à un humain à peu près intelligent car il va remarquer que le robot va jouer le contre au coup qu’il joue le plus.
À la place, il faudrait que le robot joue avec une certaine probabilité : le robot évalue le vecteur de probabilité du joueur A et le robot aura un vecteur de probabilité de sorte que s’il évalue que A a un vecteur de (x,y, 1-x-y), le robot aura un vecteur de probabilité de (1-x-y, x, y).

Question 4

N = 10000

res = 0  #score en faveur du joueur A

simul_q2 <- function(a1, a2, a3, N){
  res = 0
  compt = 1
  nb_a1 = 1
  nb_a2 = 0
  nb_a3 = 0
  for(i in 1:N){
    a = choix_signe(a1,a2,a3)
    b = choix_signe(nb_a3/compt, nb_a1/compt, nb_a2/compt)
    if(a==1){
      nb_a1 = nb_a1 +1
    }
    if(a==2){
      nb_a2 = nb_a2 +1
    }
    if(a==3){
      nb_a3 = nb_a3 +1
    }
    res = decis_victoire(a, b, res)
    compt = compt + 1;
  }
  return(res)
}

esp = simul_q2(0.25, 0.25, 0.5, N)/N;

print(esp)
## [1] 0.0743

On a une espérance de gain de 0.07 par partie en moyenne pour B, on a une espérance inférieur à l’algorithme d’avant mais il est censé mieux fonctionner contre un humain.