Objectifs : Dans ce DM on s’intéresse au jeu de Pierre Papier Ciseaux et on cherche à savoir quelle est la bonne stratégie à avoir. On se concentre sur la version (non violente!) dite “à somme nulle” où le gagnant empoche 1 alors que le perdant perd 1. En cas d’égalité, personne ne perd ni ne gagne rien.
Le joueur biaisé :
n_parties = function (nombre=10000,proba_A=c(0.25,0.25,0.5),proba_B=c(0.25,0.25,0.5)){
B=0;
for(i in 1:nombre){
elementA=sample(size = 1,x = c('P','F','C'),prob = proba_A);
elementB=sample(size = 1,x = c('P','F','C'),prob = proba_B);
#B remporte la partie
if( (elementA=='P'&&elementB=='F') || (elementA=='C'&&elementB=='P') || (elementA=='F'&&elementB=='C') ) {
B=B+1;
}
#B perd la partie
if( (elementA=='P'&&elementB=='C') || (elementA=='F'&&elementB=='P') || (elementA=='C'&&elementB=='F') ) {
B=B-1;
}
#sinon il y a match nul donc pas de points sont attribués
}
B/nombre
}
n_parties()
## [1] 0.0046
Par simulation, on observe une espérance de gain nulle. Lorsque le joueur B rencontre le joueur A dans ces conditions (avec les mêmes probabilités) le jeu est équilibré donc l’espérance de gain est nulle.
n_parties (proba_B = c(1/3,1/3,1/3))
## [1] 0.0039
Par simulation, on observe une espérance de gain nulle. Il semblerait que le jeu reste équilibré.
esp_gain_b = function(proba_a=c(1/4,1/4,1/2)){
esp_b = c();
x = 0;
y = 0;
i = 1;
dataF = c();
dataP = c();
dataC = c();
while(x<=1){
while(y<=1 && x+y<=1){
val3 = 1 - x - y;
if(val3<0) val3 = 0;
dataP[i] = x;
dataF[i] = y;
dataC[i] = val3;
esp_b[i] = n_parties (proba_B = c(x,y,val3),proba_A = proba_a)
i = i + 1;
y = y + 0.1;
}
y = 0;
x = x + 0.1;
}
return(data.frame(dataP,dataF,dataC,esp_b));
}
data_frame=esp_gain_b()
Nous pouvons alors analyser les résultats obtenus à l’aide de graphes.
with(data_frame,plot(dataF,esp_b,xlab = "Probabilité de jouer Feuille",ylab = "Espérance de gain de B"))
Tout d’abord, on observe que l’espérance de gain est forte lorsque la probabilité de jouer Feuille est nulle. Le joueur B doit donc éviter à tout prix de jouer Feuille pour maximiser ses gains.
with(data_frame,plot(dataP,esp_b,xlab = "Probabilité de jouer Pierre",ylab = "Espérance de gain de B"))
Ensuite, plus la probabilité de jouer Pierre est forte, plus le joueur B à de chances de gagner. Il doit donc jouer Pierre le plus de fois possible.
regression<- lm(esp_b ~ dataC ,data = data_frame)
with(data_frame,plot(dataC,esp_b,xlab = "Probabilité de jouer Ciseau",ylab = "Espérance des gains de B"))
abline(regression,col="red")
Enfin, on observe que la probabilité de jouer Ciseaux n’a pas d’’importance’influences sur l’espérance de gain du joueur B. En moyenne, le joueur B ne va pas gagner de points.
La stratégie optimale pour B est donc de jouer uniquement Pierre. En effet, cela est compréhensible car A a une probabilité plus élevé de jouer Ciseaux. Donc l’espérance de gain sera plus élevé quand Pierre aura le plus de chance d’être joué. On peut noter qu’il ne faut en aucun cas jouer la Feuille car on a de très gros risques de perdre (comme le joueur A joue souvent Ciseaux). La configuration optimale du joueur B est donc de jouer Pierre avec une probabilité de 1 (d’où x=1 et y=0). Par simulation on observe une espérance associée de 0.25 environ (nous regardons la première ligne lorsque l’attribut espérance du data_frame est rangé en ordre décroissant.
Essayons maintenant de retrouver tous ces résultats à l’aide d’un calcul exact. Soit une partie de Pierre Feuille Ciseaux une expérience aléatoire et soient A et B deux variables aléatoires correspondant respectivement au choix entre Pierre, Feuille ou Ciseaux des joueurs A et B. Soient (1/4,1/4,1/2) et (x,y,1-x-y) les probabilités de A et de B de choisir entre Pierre, Feuille et Ciseaux. Nous cherchons une configuration (stratégie) pour que B soit gagnant, cela revient à trouver la configuration qui maximise l’espérance de gain du joueur B, soit X cette espérance. On a alors \(X=gains * Probabilité De Gagner - pertes * Probabilité De Perdre\) D’où \(X= P((B='F') \cap (A='P')) + P((B='P') \cap (A='C')) + P((B='C') \cap (A='F')) - P((B='F') \cap (A='C')) - P((B='C') \cap (A='P')) - P((B='P') \cap (A='F'))\). Nous savons à ce stade que A et B sont indépendants car le choix du joueur B et totalement indépendant du choix du joueur A. Donc on obtient : \(X=P(B='F') * P(A='P') + P(B='P') * P(A='C') + P(B='C') * P(A='F') - P(B='F') * P(A='C') - P(B='C') * P(A='P') - P(B='P') * P(A='F') = y/4 + x/2 + (1-x-y)/4 -y/2 - (1-x-y)/4 - x/4 = x/4 - y/4.\) Or nous souhaitons maximiser l’espérance (MAX (X)). Pour maximiser cette soustraction, nous devons maximiser x et minimiser y. On doit alors mettre x à 1 et y à 0. L’espérance de gain associée à cette stratégie est alors de 0.25.
Le joueur non biaisé :
Reprennons les mêmes questions que précédemment avec le joueur A non biaisé, c’est à dire avec la même probabilité de jouer Pierre Feuille ou Ciseaux(1/3,1/3,1/3).
n_parties(proba_A = c(1/3,1/3,1/3))
## [1] 0.002
Par simulation, on observe une espérance de gain nulle. Une telle configuration semble conduire à un jeu équilibré.
n_parties(proba_A = c(1/3,1/3,1/3), proba_B = c(1/3,1/3,1/3))
## [1] 0.0077
Par simulation, on observe une espérance de gain nulle. Une telle configuration semble aussi conduire à un jeu équilibré.
data_frame_2=esp_gain_b(proba_a = c(1/3,1/3,1/3))
Nous pouvons alors analyser les résultats obtenus à l’aide de graphes.
regression<- lm(esp_b ~ dataF ,data = data_frame_2)
with(data_frame_2,plot(dataF,esp_b,xlab = "Probabilité de jouer Feuille",ylab = "Espérance des gains de B"))
abline(regression,col="red")
regression<- lm(esp_b ~ dataP ,data = data_frame_2)
with(data_frame_2,plot(dataP,esp_b,xlab = "Probabilité de jouer Pierre",ylab = "Espérance des gains de B"))
abline(regression,col="red")