“Modélisation du sujet”
Dans ces questions, je vais essayer d’expliquer comment je formulerais l’espérance à calculer suivant la stratégie adoptée par le joueur au casino. Pour les deux premières stratégies, la “modélisation” est plutôt facile, étant donné que le joueur ne choisit qu’une des deux machines, il suffit de faire la somme de la probabilité de la machine car le gain est égal à 1. Pour la dernière stratégie, on sait que le joueur a 1/2 chance de choisir la machine A et 1/2 de choisir la machine B. Ici les deux machines sont donc sollicitées avec une probabilité de 1/2, d’où la formule notée ci-dessous. (Quentin Sibué)
Dans la formule du regret, représente l’espérance de ne jouer que avec la machine A auquel on soustrait l’esperance moyenne pour une méthode donnée () sur un nombre de lancés donnés (ici ). Les différents résultats possibles nous informent sur la “qualité de la méthode m. Si le résultat final est positif, cela signifie que la méthode de n’utiliser que la machine A est meilleure que la méthode choisie précédement. S’il est négatif, c’est que la méthode de n’utiliser que la machine A est moins performante. Pour finir, si le résultat est nul, c’est que la stratégie choisie est la celle même que de n’utiliser que la machine A ou que les deux stratégies ont exactement la même efficacité.
set.seed(12)
library("ggplot2")
regret = function(pML,E,t){ #fonction qui calcul le regre a un instant t
return (pML - (E/t))
}
simuPartie = function(id,strat,pA=0.65,pB=0.55,Tmax=1000,e=0.05,ePrime=0.1){
# Variables de la fonction utiles pour les 3 stratégies
Gain_A = 0 #symbolise le nombre de succès obtenus sur la machine A
Gain_B = 0 #symbolise le nombre de succès obtenus sur la machine B
t = 1 #symbolise à quel lancé on se trouve
nb_A = 0 #symbolise le nombre de lancer total effectués sur la machine A (succès + échec)
nb_B = 0 #symbolise le nombre de lancer total effectués sur la machine B (succès + échec)
tab_regret = c() #tableau utilisé pour stocker le regret à chaque instant du jeu
tab_time = c(1:Tmax) #tableau pour l'axe des abscisse de la data frame
switch(strat, #On regarde quelle stratégie est adoptée
Q2 = { #Si c'est la stratégie de la question 2 (mL)
i=Tmax*e #On calcul le nombre d'essais pour estimer la machine à choisir
tirage = rbinom(i/2,1,pA) #On tire la moitié de ses coups sur la machine A
Gain_A = sum(tirage) #On calcul le nombres de succès sur la machine A
tirage = rbind(tirage,rbinom(i/2,1,pB)) #On tire le reste des essais sur la machine B
Gain_B = sum(tirage) - Gain_A #On calcul le nombres de succès sur la machine B
if (Gain_A > Gain_B){ #Si le nombre de succès sur A est supérieur à ceux de B
tirage = c(tirage,rbinom((Tmax-i),1,pA)) #On tir tout les coups restants sur la machine A
}
else{
tirage = c(tirage,rbinom((Tmax-i),1,pB)) #Sinon on les fait sur la machine B
}
Esp=0 #On initialise notre espérance à 0
for(t in 1:Tmax){ #Pour chaque instant
Esp = Esp + tirage[t] #On calcul l'espérance de l'instant t
tab_regret[t] = regret(pA,Esp,t) #On calcul le regret de l'instant t
}
},
Q3 = {
while(t <= Tmax){
if(Gain_A/(nb_A+1) == Gain_B/(nb_B+1)){ #Cas de l'égalité entre les deux ratios
if(runif(1) < 0.5){ #On choisit aléatoirement quelle machine utilisée
pmG = pA
nb_A = nb_A + 1 #On compte le nombre de coups joués sur la machine A
}
else{
pmG = pB
nb_B = nb_B + 1 #On compte le nombre de coups joués sur la machine B
}
}
else {
choix = rbinom(1,1,1-ePrime) #Si les rations ne sont pas égaux, on fait un tirage de binomiale avec un probabilité de 1-ePrime
if(((Gain_A/(nb_A+1) > Gain_B/(nb_B+1)) && choix) || ((Gain_B/(nb_B+1) > Gain_A/(nb_A+1)) && !choix)){ #Si le ration de A est supéreieur à celui de B et que choix est 1 OU que le ration de B est supérieur et que choix est 0
pmG = pA #On joue sur la machine A
nb_A = nb_A + 1 #On augmente le nombre de coups joués sur A
}
else {
pmG = pB #On joue sur la machine B
nb_B = nb_B + 1 #On augmente le nombre de coups joués sur B
}
}
Gain = rbinom(1,1,pmG) #On calcul si pour l'instant t on a un succè ou un échec
if(pmG == pA){ #Suivant la machine selectionnée, on augmente le nombre de succès de cette dernière
Gain_A = Gain_A + Gain
}
else{
Gain_B = Gain_B + Gain
}
E = Gain_A + Gain_B #On calcul l'espérance de l'instant t
tab_regret[t] = regret(pA,E,t) #On calcul le regret de l'instant t
t=t+1 #On passe au lancer suivant
}
},
Q4 = {
Esp = 0 #On initialise l'esperance à 0
while(t <= Tmax){
rA = rbeta(1,Gain_A+1,(nb_A-Gain_A)+1) #On tire un nombre aléatoire qui suit une loi beta suivant les succes de A
rB = rbeta(1,Gain_B+1,(nb_B-Gain_B)+1) #On tire un nombre aléatoire qui suit une loi beta suivant les succes de B
if(rA > rB){ #Si rA est supérieur à rB
nb_A = nb_A + 1 #On augmente le nombre de coups joués sur A
if(runif(1) < pA){
Gain_A = Gain_A + 1 #On augmente le gain de A si le tirage à réussi
}
}
else{
nb_B = nb_B + 1 #On augmente le nombre de coups joués sur B
if(runif(1) < pB){
Gain_B = Gain_B + 1 #On augmente le gain de A si le tirage à réussi
}
}
Esp = Gain_A+Gain_B #On calcul l'espérance au moment t
tab_regret[t] = regret(pA,Esp,t) #On calcul le regret au moment t
t = t+1 #On passe au coup suivant
}
}
)
return(data.frame(Id = id,Strategie = strat, time = tab_time, regret = tab_regret))
}
display = function(strat){
df = data.frame()
mean_regret = data.frame()
tours = 100
Tmax = 1000
index = seq(1,Tmax)
for(i in 1:tours){
df = rbind(df,simuPartie(i,strat, Tmax = Tmax))
}
mean_regret = rbind(mean_regret,aggregate(df$regret, list(df$time), mean))
ggplot() +
geom_line(data = df, aes(x = time, y = regret, group = Id), alpha = 0.1) +
geom_line(data = mean_regret, aes(x = index, y = mean_regret$x), color = "red")
}
display("Q2")
Intuitions: Dans cette question, on teste la machine la plus prometteuse en sauvegardant le nombre de réussites pour chaque machine et en choisisant la machine avec le plus grand nombre de reussite aux epsilon*T/2 coups joués. Une fois la machine la plus prometteuse trouvée, on ne joue plus que cette dernière.
() est une stratégie moyenne comparé aux 2 autres. En effet le nombre d’essais consistants à alterner entre les deux machines pour en choisir une au final, n’est, en général pas assez grand pour estimer de façon précise la machine la plus fiable. En effet ce défaut de fiabilité ce voit aisément lorsque l’on prend un epsilon = 0.05 car beaucoup de coups ont été joués sur la machine B, ce qui produit un regret entre 0.1 et 0.15 environ lors de l’utilisation de cette machine. Pour pallier à ce problème, on pourrait ce dire qu’il suffit de monter drastiquement epsilon, mais en faisant ça, le joueur jouera beaucoup de coups sur une machine moins performante, ce qui améliore grandement la précision dans le choix final mais ne résout pas le problème du regret “élevé”.
display("Q3")
Intuitions : Ici, on va, à chaque coup, réévaluer la machine sur laquelle on va jouer, du premier coup jusqu’au dernier, d’où la présence d’une boucle while. On comparera les ratios et le succès eventuel d’un tirage de loi binomiale avec une probabilité 1 - ePrime afin de choisir la machine sur laquelle jouer. La machine A ayant une probabilité supérieure de succès comparer à la machine B, on devrait avoir un résultat meilleur que la méthode précédente.
() est une meilleure stratégie que () mais peut encore être améliorée (on verra ça à la question d’après). En effet cette stratégie est bien meilleure, car, étant donné que A a une probabilité de réussite plus forte, le ratio succès/coups_joués sera, en moyenne supérieure à celui de la machine B. Le regret est donc, en moyenne, plus faible que la méthode () car on a plus de chances de jouer sur la machine A avec cette stratégie et donc de se rapprocher de la méthode de ne jouer que sur cette machine. On remarque encore la présence de parties jouées sur la machine B avec un nombre de coups moins conséquents que la méthode précédente mais encore visible.
display("Q4")
Intuitions : Comme pour la question précedente, on va réévaluer la machine sur laquelle on joue à chaque coup. Sauf qu’ici, pour évaluer la machine à choisir, on utilisera pas un ratio du nombre de succès diviser par le nombre total de coups joués mais un nombre aléatoire suivant la densité béta correspondant à chaque machine. Cette manière de faire et encore plus fiable que la méthode précèdente ce qui devrait nous donner un résultat encore plus convaincant en baissant encore le nombre de coups joués sur la machine B, ce qui aura pour effet de réduire encore le regret moyen.
() est la meilleure stratégie qui nous est proposée dans le sujet. En effet on voit très clairement que le regret est très proche de 0 en moyenne ce qui nous rapproche de la stratégie de ne jouer que la machine A, soit la machine la plus prometteuse. Ce résultat satisfaisant est possible grâce à l’utilisation de la loi bêta qui propose les meilleures estimations possibles des probabilités et , qui permet au joueurs de choisir la bonne machine plus souvent que et beaucoup plus souvent que .