R Markdown

Question 1 : Poissons chirurgiens

probaPFC = function(paP, paF, paC, pbP, pbF, pbC)
{
  j1 = runif(1);
  j2 = runif(1);
  res = 0;
  
  if(j1 <= paF)
    if(j2 >= (pbF + pbP))
      res = 1;
    
  if(j1 > paF && j1 <= (paF + paP))
    if(j2 <= pbF)
      res = 1;
    
  if(j1 >= (paF + paP))
    if(j2 >= pbF && j2 <= (pbF + pbP))
      res = 1;
  res
}

approxN = function(N=10000, paP, paF, paC, pbP, pbF, pbC)
{
  res = 0;
  for(i in 1:N)
    res = res + probaPFC(paP, paF, paC, pbP, pbF, pbC);
  
  res/N
}

JOUEUR BIAISE

estim1000_1b = approxN(1000, 1/4, 1/4, 1/2, 1/4, 1/4, 1/2);
estim10000_1b = approxN(10000, 1/4, 1/4, 1/2, 1/4, 1/4, 1/2);
estim100000_1b = approxN(100000, 1/4, 1/4, 1/2, 1/4, 1/4, 1/2);

1°) D’après les différentes estimations, l’espérance de gain du joueur B contre le joueur A est d’environ 0.314 pour : - P(A) = (1/4, 1/4, 1/2) - P(B) = (1/4, 1/4, 1/2)

estim1000_2b = approxN(1000, 1/4, 1/4, 1/2, 1/3, 1/3, 1/3);
estim10000_2b = approxN(10000, 1/4, 1/4, 1/2, 1/3, 1/3, 1/3);
estim100000_2b = approxN(100000, 1/4, 1/4, 1/2, 1/3, 1/3, 1/3);

2°) D’après les différentes estimations, l’espérance de gain du joueur B contre le joueur A est d’environ 0.332 pour : - P(A) = (1/4, 1/4, 1/2) - P(B) = (1/3, 1/3, 1/3)

estim_variations = function(N=10000, paP, paF, paC)
{
  tab = matrix(0, nrow = 11, ncol = 11);
  
  for(x in 0:10)
  {
    for(y in 0:10)
    {
      xp = x / 10;
      yp = y / 10;
      
      if((xp + yp) <= 1)
        tab[x+1,y+1] = approxN(N, paP, paF, paC, xp, yp, 1-xp-yp);
    }
  }
      
  tab;
}

tabvariations1000b = estim_variations(1000, 1/4, 1/4, 1/2);
max(tabvariations1000b);
## [1] 0.524
tabvariations10000b = estim_variations(10000, 1/4, 1/4, 1/2);
max(tabvariations10000b);
## [1] 0.5013

3°) Les tableaux tabvariations1000b et tabvariations10000b contiennent les espérances de gain du joueur B en fonction de x et y pour : - P(A) = (1/4, 1/4, 1/2)

4°) A partir de ces tableaux, on en déduit que je joueur B a tout interêt à jouer la pierre et très peu la feuille. On aurait pu déduire celà de l’énoncé car le joueur A avait une probabilité plus élevée de jouer la pierre. La valeur que l’on retrouve est environ égale à 0.5.

JOUEUR NON BIAISE

estim1000_1nb = approxN(1000, 1/3, 1/3, 1/3, 1/4, 1/4, 1/2);
estim10000_1nb = approxN(10000, 1/3, 1/3, 1/3, 1/4, 1/4, 1/2);
estim100000_1nb = approxN(100000, 1/3, 1/3, 1/3, 1/4, 1/4, 1/2);

1°) D’après les différentes estimations, l’espérance de gain du joueur B contre le joueur A est d’environ 0.333 pour : - P(A) = (1/3, 1/3, 1/3) - P(B) = (1/4, 1/4, 1/2)

estim1000_2nb = approxN(1000, 1/3, 1/3, 1/3, 1/3, 1/3, 1/3);
estim10000_2nb = approxN(10000, 1/3, 1/3, 1/3, 1/3, 1/3, 1/3);
estim100000_2nb = approxN(100000, 1/3, 1/3, 1/3, 1/3, 1/3, 1/3);

2°) D’après les différentes estimations, l’espérance de gain du joueur B contre le joueur A est d’environ 0.332 pour : - P(A) = (1/3, 1/3, 1/3) - P(B) = (1/3, 1/3, 1/3)

tabvariations1000nb = estim_variations(1000, 1/3, 1/3, 1/3);
max(tabvariations1000nb);
## [1] 0.367
tabvariations10000nb = estim_variations(10000, 1/3, 1/3, 1/3);
max(tabvariations10000nb);
## [1] 0.3463

3°) Les tableaux tabvariations1000nb et tabvariations10000nb contiennent les espérances de gain du joueur B en fonction de x et y pour : - P(A) = (1/3, 1/3, 1/3)

4°) A partir de ces tableaux, on en déduit que B n’a pas de stratégie particulière à adopter, en effet le jouer B a une espérance de 0.33 qu’importe le biais que l’on intègre à son mode de jeu. L’autre joueur aura également une espérance de 0.33 et ils auront une espérance de 0.33 de faire match nul.

Question 2 : Apprentissage

jouerpartie = function(N=10000, paP, paF, paC, nbcoups=20)
{
  pbP= 1/3; 
  pbF= 1/3; 
  pbC= 1/3;
  
  coups_adv = matrix(0, nrow = 1, ncol = nbcoups);
  index = 1;
  
  nb = N;
  nbVictoires = 0;
  
  while(nb > 0)
  {
    j1 = runif(1); j2 = runif(1);
    
    coups_adv[1,index] = j1;
  
    if((j1 <= paF) && (j2 >= (pbF + pbP)))
        nbVictoires = nbVictoires + 1;
      
    if((j1 > paF && j1 <= (paF + paP)) && (j2 <= pbF))
        nbVictoires = nbVictoires + 1;
      
    if((j1 >= (paF + paP)) && (j2 >= pbF && j2 <= (pbF + pbP)))
        nbVictoires = nbVictoires + 1;
    
    nbP = 0; nbF = 0; nbC = 0;
    
    for(i in 1:nbcoups)  
    {
      coup = coups_adv[1,i];
      
      if(coup <= paF) 
        nbF = nbF + 1;
      if(j1 > paF && j1 <= (paF + paP)) 
        nbP = nbP + 1;
      if(j1 >= (paF + paP)) 
        nbC = nbC + 1;
    }
    
    if(index == nbcoups){index = 1;}
    else{index = index+1;}

    
    nb = nb - 1;

    pbP = nbC/nbcoups;
    pbF = nbP/nbcoups;
    pbC = nbF/nbcoups;

  }
  
  nbVictoires/N
}

1°) L’algorithme que nous proposons peut s’exprimer comme cela :

-> On initialise nos probabilités à (1/3, 1/3, 1/3). -> On fixe N le nombre de coups joués par l’adversaire que nous allons retenir. -> A chaque fin de tour, on comptabilise chacun des N derniers coups joués par l’adversaire et on adapte nos probabilités comme ceci :

-> Nous ne détaillons pas plus l’implémentation de l’algorithme, nous avons eu une approche orientée C. :)

res05 = jouerpartie(10000, 1/4, 1/4, 1/2, 5);
res10 = jouerpartie(10000, 1/4, 1/4, 1/2, 10);
res20 = jouerpartie(10000, 1/4, 1/4, 1/2, 20);
res40 = jouerpartie(10000, 1/4, 1/4, 1/2, 40);

2°) Les valeurs res10, res20, res40 correspondent respectivement à l’espérance de gains lorsque l’on retient 10, 20 et 40 coups. On obtient globalement 38% de victoire, ce qui représente un gain d’environ 5% par rapport à une approche non biaisée.

3°) Nous pensons que notre algorithme peut se défendre contre un humain pas trop bête. En effet, puisqu’il ne retient que les N derniers coups, il peut adapter facilement son jeu.

Deux cas de figures sont possibles : -> soit l’adversaire est biaisé et notre algorithme saura trouver un avantage -> soit l’adversaire joue totalement aléatoirement et l’algorithme jouera lui aussi aléatoirement

Dans le second cas, il n’est pas garanti que notre algorithme obtienne un avantage net sur son adversaire.

Une perspective pour améliorer notre algorithme aurait pu être de faire varier le nombre N de coups qu’il retient.