Fonctions:
pccprob = function(ppA,pcaA,pciA,ppB,pcaB,pciB){
j1 = runif(1,1,100);
j2 = runif(1,1,100);
res = 0
if(j1 <= ppA*100)
if(j2 >= (ppB+pcaB)*100+1)
res = 1
if(j1 > ppA*100 && j1 <= (ppA+pcaA)*100)
if(j2<=ppB*100)
res = 1
if(j1 >= (ppA+pcaA)*100+1)
if(j2 >=ppB*100+1 && j2 <= (ppB+pcaB)*100)
res = 1
res
}
pccN2 = function(N=10000,ppA,pcaA,pciA,ppB,pcaB,pciB){
res = 0
for(i in 1:N)
res = res+pccprob(ppA,pcaA,pciA,ppB,pcaB,pciB);
res/N
}
fonction1_3 = function(ppA,pcaA,pciA){
tab = matrix(0,nrow = 11,ncol = 11);
for(x in 1:11)
{
for(y in 1:11)
{
x1 = (x-1)/10
y1 = (y-1)/10
if((x1+y1)<=1)
tab[x,y] = pccN2(10000,ppA,pcaA,pciA,x1,y1,1-x1-y1);
}
}
tab
}
maxtab = function(tab){
is = 0;
js = 0;
max = 0;
i=0;j=0;
for( i in 1:nrow(tab))
for(j in 1:ncol(tab))
{
if(tab[i,j] > max)
{
max = tab[i,j];
is = i;
js = j;
}
}
c('Espérance max,pp,pca :',max,(is-1)/10,(js-1)/10);
}
joueurproba = function(pp,pca,pci){
j1 = runif(1,1,100);
res = 0
if(j1 <= pp*100)
res = 1
if(j1 > pp*100 && j1 <= (pp+pca)*100)
res = 2
if(j1 >= (pp+pca)*100+1)
res = 3
res
}
jouertour = function(nbr_papier, nbr_cailloux, nbr_ciseaux)
{
m = max(nbr_papier,nbr_cailloux,nbr_ciseaux);
tour = 0;
if(m == 0)
{
tour = runif(1,1,3);
}
else
{
if(m ==nbr_papier)
{
tour = 3;
}
else
{
if(m == nbr_cailloux)
{
tour = 1;
}
else
{
if(m == nbr_ciseaux)
tour = 2
}
}
}
tour
}
qui_a_gagne = function(a,b)
{
res = 0
if(a == 1)
{
if(b == 2)
res = 1
if(b == 3)
res = 2
}
if(a == 2)
{
if(b == 3)
res = 1
if(b == 1)
res = 2
}
if(a == 3)
{
if(b == 1)
res = 1
if(b == 2)
res = 2
}
res
}
Q1: première partie (Nous avons remarqué au dernier moment que nous n’avons pas jouer au pierre/feuille/ciseaux mais a papier/cailloux/ciseaux)
pccN2(100000,1/4,1/4,1/2,1/4,1/4,1/2);
## [1] 0.30086
pccN2(100000,1/4,1/4,1/2,1/3,1/3,1/3);
## [1] 0.32334
question1_3 = fonction1_3(1/4,1/4,1/2);
maxtab(question1_3)
## [1] "Espérance max,pp,pca :" "0.4985"
## [3] "0" "1"
Q1 : deuxième partie Pour cette partie nous avons juste remplacer les valeurs dans l’appel de nos fonctions. 1)
pccN2(100000,1/3,1/3,1/3,1/4,1/4,1/2);
## [1] 0.32057
pccN2(100000,1/3,1/3,1/3,1/3,1/3,1/3);
## [1] 0.32204
tab = fonction1_3(1/3,1/3,1/3);
maxtab(tab)
## [1] "Espérance max,pp,pca :" "0.339"
## [3] "0.8" "0.1"
Q2:
#papier = 1 , cailloux = 2 , ciseaux = 3
test = function()
{
nbr_papier = 0;
nbr_cailloux = 0;
nbr_ciseaux = 0;
nbr_victoires = 0;
print('Saisir 1,2 ou 3 papier = 1 , cailloux = 2 , ciseaux = 3 :');
l = readline();
while(l != 'exit')
{
tour_bot = jouertour(nbr_papier, nbr_cailloux, nbr_ciseaux);
if ((vainqueur = qui_a_gagne(l,tour_bot)) == 2)
{
nbr_victoires = nbr_victoires+1;
print('Victoire du bot, t es nul !');
}
else if(vainqueur == 1)
{
print('Victoire');
}
else
{
print('Egalité');
}
if(l == 1)
nbr_papier = nbr_papier + 1;
if(l == 2)
nbr_cailloux = nbr_cailloux + 1;
if(l == 3)
nbr_ciseaux = nbr_ciseaux + 1;
print('Saisir 1,2 ou 3 papier = 1 , cailloux = 2 , ciseaux = 3 :')
l = readline();
}
c('Nombres de victoires du bot:',nbr_victoires);
}
test2 = function(N=1000,pp,pca,pci)
{
i=0;
nbr_papier = 0;
nbr_cailloux = 0;
nbr_ciseaux = 0;
nbr_victoires = 0;
while(i<N)
{
tour_joueur = joueurproba(pp,pca,pci);
tour_bot = jouertour(nbr_papier, nbr_cailloux, nbr_ciseaux);
if ((vainqueur = qui_a_gagne(tour_joueur,tour_bot)) == 2)
{
nbr_victoires = nbr_victoires+1;
}
if(tour_joueur == 1)
nbr_papier = nbr_papier + 1;
if(tour_joueur == 2)
nbr_cailloux = nbr_cailloux + 1;
if(tour_joueur == 3)
nbr_ciseaux = nbr_ciseaux + 1;
i = i + 1;
}
c('Nombres de victoires du bot:',nbr_victoires);
}
test2(10000,1/4,1/4,1/2)
## [1] "Nombres de victoires du bot:" "4977"
Non, un humain pas trop bete peut changer de strategie en cours de partie ce qui induirais notre algorithme en erreur. Pour l’ameliorer on a choisis de réinitialiser les compteurs de coups du joueur tous les 5 tours.
On peut voir que la probabilité de gagner contre un joueur biaisé est descendu mais il est plus efficace contre un joueur humain car on le réinitialise tous les 5 coups. C’est à cause de cette réinitialisation que le taux de victoire a baissé car le joueur biaisé ne change pas de stratégie .
test3 = function(N=1000,pp,pca,pci)
{
i=0;
nbr_papier = 0;
nbr_cailloux = 0;
nbr_ciseaux = 0;
nbr_victoires = 0;
while(i<N)
{
tour_joueur = joueurproba(pp,pca,pci);
tour_bot = jouertour(nbr_papier, nbr_cailloux, nbr_ciseaux);
if ((vainqueur = qui_a_gagne(tour_joueur,tour_bot)) == 2)
{
nbr_victoires = nbr_victoires+1;
}
if(tour_joueur == 1)
nbr_papier = nbr_papier + 1;
if(tour_joueur == 2)
nbr_cailloux = nbr_cailloux + 1;
if(tour_joueur == 3)
nbr_ciseaux = nbr_ciseaux + 1;
i = i + 1;
if(nbr_ciseaux+nbr_cailloux+nbr_papier > 5)
{
nbr_cailloux = 0;
nbr_ciseaux = 0;
nbr_papier = 0;
}
}
c('Nombres de victoires du bot:',nbr_victoires);
}
test3(10000,1/4,1/4,1/2)
## [1] "Nombres de victoires du bot:" "3042"